تنزيل الملفات باستخدام Cloud Storage for 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> من واجهة pyplot. يمكنك استخدام مثيل لفئة 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.