تنزيل الملفات باستخدام 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".