قم بتنزيل الملفات باستخدام Cloud Storage لـ Unity

يتيح لك Cloud Storage for Firebase تنزيل الملفات بسرعة وسهولة من مجموعة Cloud Storage التي توفرها وتديرها Firebase.

إنشاء مرجع

لتنزيل ملف، قم أولاً بإنشاء مرجع Cloud Storage للملف الذي تريد تنزيله.

يمكنك إنشاء مرجع عن طريق إلحاق مسارات فرعية بجذر مجموعة Cloud Storage، أو يمكنك إنشاء مرجع من عنوان URL موجود gs:// أو https:// يشير إلى كائن في Cloud Storage.

// Create a reference with an initial file path and name
StorageReference pathReference =
    storage.GetReference("images/stars.jpg");

// Create a reference from a Google Cloud Storage URI
StorageReference gsReference =
    storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
StorageReference httpsReference =
    storage.GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");

تحميل ملفات

بمجرد حصولك على مرجع، يمكنك تنزيل الملفات من Cloud Storage بأربع طرق:

  1. التنزيل من عنوان URL
  2. تحميل إلى مجموعة بايت
  3. تحميل مع دفق
  4. تحميل إلى ملف محلي

تعتمد الطريقة التي ستستخدمها لاسترداد ملفاتك على الطريقة التي تريد بها استهلاك البيانات الموجودة في لعبتك.

التنزيل من عنوان URL

إذا كنت تريد استخدام عنوان URL مع WWW أو UnityWebRequest الخاصين بـ Unity، فيمكنك الحصول على عنوان URL لتنزيل ملف عن طريق استدعاء GetDownloadUrlAsync() .

// Fetch the download URL
reference.GetDownloadUrlAsync().ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        Debug.Log("Download URL: " + task.Result);
        // ... now download the file via WWW or UnityWebRequest.
    }
});

تحميل إلى مجموعة بايت

يمكنك تنزيل الملف إلى مخزن مؤقت للبايت في الذاكرة باستخدام طريقة GetBytesAsync() . ستقوم هذه الطريقة بتحميل محتويات ملفك بالكامل إلى الذاكرة. إذا طلبت ملفًا أكبر من الذاكرة المتوفرة لتطبيقك، فسيتعطل تطبيقك. للحماية من مشكلات الذاكرة، تأكد من ضبط الحجم الأقصى على شيء تعرف أن تطبيقك يمكنه التعامل معه، أو استخدم طريقة تنزيل أخرى.

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
const long maxAllowedSize = 1 * 1024 * 1024;
reference.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread(task => {
    if (task.IsFaulted || task.IsCanceled) {
        Debug.LogException(task.Exception);
        // Uh-oh, an error occurred!
    }
    else {
        byte[] fileContents = task.Result;
        Debug.Log("Finished downloading!");
    }
});

التنزيل عبر الدفق

يتيح لك تنزيل الملف باستخدام الدفق معالجة البيانات أثناء تحميلها. يمنحك هذا أقصى قدر من المرونة عند التعامل مع التنزيل الخاص بك. اتصل بـ GetStreamAsync() وقم بتمرير معالج الدفق الخاص بك باعتباره الوسيط الأول. سيتم استدعاء هذا المفوض في سلسلة رسائل خلفية باستخدام دفق يسمح لك بإجراء عمليات أو حسابات مكثفة لزمن الاستجابة مثل تخزين المحتويات على القرص.

// Download via a Stream
reference.GetStreamAsync(stream => {
    // Do something with the stream here.
    //
    // This code runs on a background thread which reduces the impact
    // to your framerate.
    //
    // If you want to do something on the main thread, you can do that in the
    // progress eventhandler (second argument) or ContinueWith to execute it
    // at task completion.
}, null, CancellationToken.None);

يأخذ GetStreamAsync() وسيطات اختيارية بعد معالج الدفق مما يسمح لك بإلغاء العملية أو الحصول على إشعار بالتقدم.

تحميل إلى ملف محلي

يقوم أسلوب GetFileAsync() بتنزيل ملف مباشرة إلى جهاز محلي. استخدم هذا إذا كان المستخدمون لديك يريدون الوصول إلى الملف أثناء عدم الاتصال بالإنترنت أو مشاركة الملف في تطبيق مختلف.

// Create local filesystem URL
string localUrl = "file:///local/images/island.jpg";

// Download to the local filesystem
reference.GetFileAsync(localUrl).ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        Debug.Log("File downloaded.");
    }
});

يمكنك إرفاق المستمعين بالتنزيلات لمراقبة تقدم التنزيل. يتبع المستمع واجهة System.IProgress<T> القياسية. يمكنك استخدام مثيل لفئة StorageProgress ، لتوفير Action<T> كرد اتصال لعلامات التقدم.

// Create local filesystem URL
string localUrl = "file:///local/images/island.jpg";

// Start downloading a file
Task task = reference.GetFileAsync(localFile,
    new StorageProgress<DownloadState>(state => {
        // called periodically during the download
        Debug.Log(String.Format(
            "Progress: {0} of {1} bytes transferred.",
            state.BytesTransferred,
            state.TotalByteCount
        ));
    }), CancellationToken.None);

task.ContinueWithOnMainThread(resultTask => {
    if (!resultTask.IsFaulted && !resultTask.IsCanceled) {
        Debug.Log("Download finished.");
    }
});

التعامل مع الأخطاء

هناك عدد من الأسباب التي قد تؤدي إلى حدوث أخطاء عند التنزيل، بما في ذلك الملف غير موجود، أو عدم حصول المستخدم على إذن للوصول إلى الملف المطلوب. يمكن العثور على مزيد من المعلومات حول الأخطاء في قسم التعامل مع الأخطاء في المستندات.

الخطوات التالية

يمكنك أيضًا الحصول على البيانات التعريفية للملفات المخزنة في Cloud Storage وتحديثها .