دانلود فایل ها با Cloud Storage for Unity

Cloud Storage for Firebase به شما این امکان را می دهد که به سرعت و به راحتی فایل ها را از یک سطل Cloud Storage که توسط Firebase تهیه و مدیریت می شود دانلود کنید.

یک مرجع ایجاد کنید

برای دانلود یک فایل، ابتدا یک مرجع Cloud Storage برای فایلی که می خواهید دانلود کنید ایجاد کنید .

می‌توانید با اضافه کردن مسیرهای فرزند به ریشه سطل فضای ذخیره‌سازی ابری خود، یک مرجع ایجاد کنید، یا می‌توانید از یک نشانی اینترنتی gs:// یا https:// موجود که به یک شی در فضای ذخیره‌سازی ابری ارجاع می‌دهد، یک مرجع ایجاد کنید.

// 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");

دانلود فایل ها

هنگامی که یک مرجع دارید، می توانید فایل ها را از فضای ذخیره سازی ابری به چهار روش دانلود کنید:

  1. دانلود از یک URL
  2. دانلود در یک آرایه بایت
  3. دانلود با یک جریان
  4. دانلود به یک فایل محلی

روشی که برای بازیابی فایل های خود استفاده خواهید کرد به نحوه مصرف داده های بازی خود بستگی دارد.

دانلود از یک URL

اگر می‌خواهید از URL با WWW یا UnityWebRequest یونیتی استفاده کنید، می‌توانید با فراخوانی GetDownloadUrlAsync() یک URL دانلود برای یک فایل دریافت کنید.

// 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.");
    }
});

رسیدگی به خطاها

دلایل متعددی وجود دارد که ممکن است هنگام دانلود خطا رخ دهد، از جمله اینکه فایل موجود نیست یا کاربر اجازه دسترسی به فایل مورد نظر را ندارد. اطلاعات بیشتر در مورد خطاها را می توانید در بخش Handle Errors در اسناد پیدا کنید.

مراحل بعدی

همچنین می‌توانید متادیتا را برای فایل‌هایی که در Cloud Storage ذخیره می‌شوند، دریافت و به‌روزرسانی کنید .