Mendownload file dengan Cloud Storage untuk Unity

Dengan Cloud Storage for Firebase, Anda dapat mendownload file dengan cepat dan mudah dari bucket Cloud Storage yang disediakan dan dikelola oleh Firebase.

Membuat Referensi

Untuk mendownload file, buat referensi Cloud Storage terlebih dahulu ke file yang ingin didownload.

Anda dapat membuat referensi dengan menambahkan jalur turunan ke root bucket Cloud Storage, atau membuat referensi dari URL gs:// atau https:// yang sudah ada, yang mereferensikan suatu objek di 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");

Mendownload File

Setelah memiliki referensi, Anda dapat mendownload file dari Cloud Storage dengan empat cara:

  1. Mendownload dari URL
  2. Mendownload file ke byte array
  3. Mendownload file melalui Stream
  4. Mendownload ke file lokal

Metode pengambilan file yang akan digunakan tergantung pada cara Anda menggunakan data dalam game.

Mendownload dari URL

Jika ingin menggunakan URL dengan WWW atau UnityWebRequest pada Unity, Anda dapat memperoleh URL download ke suatu file dengan memanggil 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.
    }
});

Mendownload file ke byte array

Anda dapat mendownload file ke buffering byte dalam memori menggunakan metode GetBytesAsync(). Metode ini akan memuat seluruh konten file ke dalam memori. Jika Anda meminta file yang lebih besar daripada kapasitas memori aplikasi yang tersedia, aplikasi akan mengalami error. Untuk menghindari hal ini, pastikan untuk menyetel ukuran maksimum ke nilai yang Anda tahu mampu ditangani oleh aplikasi, atau gunakan metode download lainnya.

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

Mendownload file melalui Stream

Mendownload file dengan Stream memungkinkan Anda memproses data begitu data dimuat. Dengan metode ini, Anda memiliki fleksibilitas maksimum untuk menangani proses download. Panggil GetStreamAsync() dan teruskan stream processor Anda sebagai argumen pertama. Delegasi ini akan dipanggil di thread latar belakang dengan Stream, sehingga Anda dapat menjalankan operasi atau kalkulasi yang sarat latensi, seperti menyimpan konten ke disk.

// 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() mengambil argumen opsional setelah stream processor yang mengizinkan Anda membatalkan operasi atau mendapatkan pemberitahuan mengenai progresnya.

Mendownload ke file lokal

Metode GetFileAsync() akan mendownload file secara langsung ke perangkat lokal. Gunakan metode ini jika pengguna ingin mengakses file saat sedang offline atau membagikan file di aplikasi lain.

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

Anda dapat menambahkan pemroses ke download untuk memantau progresnya. Pemroses mengikuti antarmuka System.IProgress<T> standar. Anda dapat menggunakan instance class StorageProgress untuk menyediakan Action<T> Anda sendiri sebagai callback untuk memantau progres.

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

Menangani Error

Ada sejumlah penyebab terjadinya error pada download, termasuk tidak adanya file atau pengguna tidak memiliki izin untuk mengakses file yang diinginkan. Informasi lebih lanjut mengenai error dapat ditemukan di bagian Menangani Error pada dokumen.

Langkah Berikutnya

Anda juga dapat mengambil dan memperbarui metadata untuk file yang disimpan di Cloud Storage.