Unity için Cloud Storage ile dosya indirme

Cloud Storage for Firebase, Firebase tarafından sağlanan ve yönetilen bir Cloud Storage paketinden dosyaları hızlı ve kolay bir şekilde indirmenize olanak tanır.

Referans Oluşturma

Bir dosyayı indirmek için öncelikle indirmek istediğiniz dosyaya Cloud Storage referansı oluşturun.

Cloud Storage paketinizin köküne alt yol ekleyerek referans oluşturabilir veya Cloud Storage'teki bir nesneye referans veren mevcut bir gs:// ya da https:// URL'sinden referans oluşturabilirsiniz.

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

Dosyaları İndir

Referans aldıktan sonra Cloud Storage dosyalarını dört şekilde indirebilirsiniz:

  1. URL'den indirme
  2. Bir bayt dizisine indirme
  3. Akışla indirme
  4. Yerel bir dosyaya indirme

Dosyalarınızı almak için kullanacağınız yöntem, oyununuzdaki verileri nasıl kullanmak istediğinize bağlıdır.

URL'den indirme

Unity'nin WWW veya UnityWebRequest işleviyle URL kullanmak istiyorsanız GetDownloadUrlAsync() işlevini çağırarak bir dosyanın indirme URL'sini alabilirsiniz.

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

Bir bayt dizisine indirme

GetBytesAsync() yöntemini kullanarak dosyayı bellekteki bir bayt arabelleğine indirebilirsiniz. Bu yöntem, dosyanızın tüm içeriğini belleğe yükler. Uygulamanızın kullanılabilir belleğinden daha büyük bir dosya isterseniz uygulamanız kilitlenir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu, uygulamanızın kaldırabileceğini bildiğiniz bir değere ayarladığınızdan veya başka bir indirme yöntemi kullandığınızdan emin olun.

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

Akış üzerinden indirme

Dosyayı bir akışla indirmek, veriler yüklenirken bunları işlemenize olanak tanır. Bu sayede, indirme işleminizle ilgili maksimum esnekliğe sahip olursunuz. GetStreamAsync() işlevini çağırın ve ilk bağımsız değişken olarak kendi akış işleyicinizi iletin. Bu temsilci, içeriği diske depolama gibi gecikmeye duyarlı işlemler veya hesaplamalar yapmanıza olanak tanıyan bir Stream ile arka plan iş parçacığında çağrılır.

// 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(), akış işleyiciden sonra işlemi iptal etmenize veya ilerleme durumuyla ilgili bildirim almanıza olanak tanıyan isteğe bağlı bağımsız değişkenler alır.

Yerel bir dosyaya indirme

GetFileAsync() yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya dosyayı farklı bir uygulamada paylaşmak istiyorsa bu seçeneği kullanın.

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

İndirme işleminin ilerleme durumunu izlemek için indirmelere dinleyici ekleyebilirsiniz. Dinleyici, standart System.IProgress<T> arayüzünü kullanır. İlerleme çubukları için geri çağırma işlevi olarak kendi Action<T>'ınızı sağlamak üzere StorageProgress sınıfının bir örneğini kullanabilirsiniz.

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

Hataları işleme

İndirme sırasında, dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişme izninin olmaması gibi çeşitli nedenlerle hata oluşabilir. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları ele alma bölümünde bulabilirsiniz.

Sonraki adımlar

Ayrıca, Cloud Storage'de depolanan dosyalar için meta verileri alıp güncelleyebilirsiniz.