Unity için Cloud Storage ile dosya indirme

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

Referans Oluşturma

Dosya indirmek için önce indirmek istediğiniz dosyaya ait bir Cloud Storage referansı oluşturun.

Cloud Storage paketinizin köküne alt yollar ekleyerek veya Cloud Storage'da 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 edindikten sonra dosyaları Cloud Storage'dan dört şekilde indirebilirsiniz:

  1. URL'den indir
  2. Bayt dizisine indir
  3. Video Akışıyla İndirme
  4. Yerel dosyaya indir

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

URL'den indir

Unity'nin WWW veya UnityWebRequest kodlu bir URL'sini kullanmak istiyorsanız GetDownloadUrlAsync() arayarak dosya için 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 indir

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 talep ederseniz uygulamanız kilitlenir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu, uygulamanızın işleyebileceğini bildiğiniz bir değere ayarladığınızdan emin olun veya başka bir indirme yöntemi kullanın.

// 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ış yoluyla indirme

Dosyayı bir Akış ile indirmek, verileri yüklenirken işlemenize olanak tanır. Bu, indirme işleminizle ilgili maksimum esneklik sağlar. GetStreamAsync() öğesini çağırın ve ilk bağımsız değişken olarak kendi akış işlemcinizi iletin. Bu yetki verilen kişi, gecikmeyi vurgulayan işlemler veya içerikleri diskte depolama gibi hesaplamalar yapmanıza olanak tanıyan bir Akış içeren 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 işlemi iptal etmenize veya ilerleme durumu hakkında bildirim almanıza olanak tanıyan isteğe bağlı bağımsız değişkenleri alır.

Yerel dosyaya indir

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 isterse bunu 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 ilerlemesini izlemek için dinleyicileri indirilenlere ekleyebilirsiniz. Dinleyici, standart System.IProgress<T> arayüzünü izler. İlerleme değerleri 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ı Giderme

İndirme sırasında, dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişim izni olmaması gibi çeşitli nedenler vardır. Hatalar hakkında daha fazla bilgiyi belgelerin İşleyici Hataları bölümünde bulabilirsiniz.

Sonraki adımlar

Cloud Storage'da depolanan dosyalar için meta verileri de alabilir ve güncelleyebilirsiniz.