Buka konsol

Mendownload File dengan Cloud Storage untuk Unity

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

Membuat Referensi

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

Anda dapat membuat referensi dengan menambahkan lokasi turunan ke root penyimpanan, atau membuat referensi dari URL gs:// atau https:// yang sudah ada, yang mereferensikan objek di Cloud Storage.

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

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

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

Mendownload File

File yang tersimpan di Cloud Storage dapat diambil lewat 4 cara:

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

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

Mendownload file 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().ContinueWith((Task<Uri> 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).ContinueWith((Task<byte[]> task) => {
  if (task.IsFaulted || task.IsCanceled) {
    Debug.Log(task.Exception.ToString());
    // 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, yang memungkinkan Anda menjalankan operasi atau kalkulasi yang penuh 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 prosesnya.

Mendownload file ke perangkat lokal

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

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

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

Anda dapat menambahkan listener ke download untuk memantau prosesnya. Listener mengikuti antarmuka System.IProgress<T> standar. Anda dapat menggunakan instance dari kelas StorageProgress, untuk memberikan Action<T> Anda sendiri sebagai callback untuk memantau kemajuan proses download.

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

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

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

Menangani Error

Ada sejumlah alasan mengapa terjadi error saat download, termasuk file tidak ada atau karena 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.