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 dosya için 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 gs:// ya da https:// URL'den 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ınız olduğunda Cloud Storage dosyalarını dört şekilde indirebilirsiniz:
- URL'den indirme
- Bayt dizisine indirme
- Akışla İndirme
- 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() 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. } });
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 isteğinde bulunursanız uygulamanız kilitlenir.
Bellek sorunlarına karşı korunmak 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!"); } });
Yayın aracılığıyla indirme
Dosyayı bir akışla indirdiğinizde, veriler yüklendikçe işleyebilirsiniz.
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çeriği 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(), işlemeyi iptal etmenize veya ilerleme durumu hakkında bildirim almanıza olanak tanıyan, akış işlemcisinden sonra 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ın dosyaya çevrimdışıyken erişmesini veya dosyayı farklı bir uygulamada paylaşmasını istiyorsanız 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şlemlerinin ilerleme durumunu izlemek için indirme işlemlerine dinleyiciler ekleyebilirsiniz. Dinleyici, standart System.IProgress<T>
arayüzünü kullanır. İlerleme işaretleri 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 çeşitli nedenleri 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 alabilir ve güncelleyebilirsiniz.