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 önce indirmek istediğiniz dosyaya Cloud Storage referans oluşturun.

Alt yolları Cloud Storage paketinizin köküne ekleyerek referans oluşturabilir veya Cloud Storage içindeki bir nesneye referans veren mevcut bir Cloud Storage ya da https:// URL'den referans oluşturabilirsiniz.gs://

// 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ınız olduğunda Cloud Storage dosyalarını dört şekilde indirebilirsiniz:

  1. URL'den indirme
  2. 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 ile bir URL kullanmak istiyorsanız GetDownloadUrlAsync()'ı çağırarak dosya için bir indirme URL'si 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.
    }
});

Bayt dizisine indirme

Dosyayı GetBytesAsync() yöntemini kullanarak 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 isteğinde bulunursanız uygulamanız çöker. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu uygulamanızın işleyebileceği 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, verileri yüklendikçe işlemenize olanak tanır. Bu sayede, indirme işleminizle ilgili olarak maksimum esneklik elde edersiniz. GetStreamAsync() işlevini çağırın ve ilk bağımsız değişken olarak kendi akış işlemcinizi iletin. Bu temsilci, içerikleri diske kaydetme gibi gecikme süresi yoğun 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şlemcisinden sonra isteğe bağlı bağımsız değişkenler alır. Bu bağımsız değişkenler, işlemi iptal etmenize veya ilerleme durumu hakkında bildirim almanıza olanak tanı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 yöntemi 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şlemlerinin ilerleme durumunu izlemek için indirme işlemlerine dinleyiciler ekleyebilirsiniz. Dinleyici, standart System.IProgress<T> arayüzünü kullanır. İlerleme tikleri için geri çağırma olarak kendi Action<T> öğenizi 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ı İşleme

İndirme sırasında hataların oluşmasının birkaç nedeni vardır. Örneğin, dosya mevcut olmayabilir veya kullanıcının istenen dosyaya erişme izni olmayabilir. Hatalar hakkında daha fazla bilgiyi dokümanların Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

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