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 paketine sahip olabilir veya mevcut bir paketten referans oluşturabilirsiniz Cloud Storage içindeki bir nesneye referans veren gs:// veya https:// URL'si.

// 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 hizmetinden indirebilirsiniz dört yöntem sunar:

  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, verilerinizi nasıl almak istediğinize nasıl tükettiğini gösterir.

URL'den indir

Unity'nin WWW veya UnityWebRequest ile bir URL kullanmak isterseniz şunu yapabilirsiniz: GetDownloadUrlAsync() numaralı telefonu arayarak bir dosyanın indirme URL'sini al.

// 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 isterseniz uygulamanız kilitlenir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu belirli bir değere ayarladığınızdan emin olun veya başka bir indirme yöntemi kullanabilirsiniz.

// 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. Telefonla arama GetStreamAsync() ve ilk bağımsız değişken olarak kendi akış işlemcinizi iletin. Bu temsilci, akış içeren bir arka plan ileti dizisinde çağrılacaktır. gibi gecikme yoğun işlemler veya hesaplamalar yapmanıza olanak tanır: depolamaktan kaçınmalısınız.

// 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şkenleri alır. işlemi iptal etmenize veya işlemin ilerleme durumuyla ilgili bildirim almanıza olanak tanır.

Yerel dosyaya indir

GetFileAsync() yöntemi, dosyayı doğrudan yerel bir cihaza indirir. Bu seçeneği aşağıdaki durumlarda kullanın: Kullanıcılarınız çevrimdışıyken dosyaya erişmek veya dosyayı bir ekleyebilirsiniz.

// 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> arabirimini takip eder. Aşağıdakileri sağlamak için StorageProgress sınıfının bir örneğini kullanabilirsiniz: ilerleme göstergeleri için geri çağırma olarak kendi Action<T>'nızı kullanın.

// 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 hataların oluşmasının birkaç nedeni vardır: dosya mevcut değil veya kullanıcının istenen dosyaya erişim izni yok. Hatalarla ilgili daha fazla bilgiyi şurada bulabilirsiniz: Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

Ayrıca meta verileri alıp güncelleyebilirsiniz Cloud Storage klasöründe depolanan dosyalar.