Unity için Cloud Storage ile dosyaları indirin

Firebase için Cloud Storage, 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ştur

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

Cloud Storage paketinizin köküne alt yollar ekleyerek bir referans oluşturabilir veya Cloud Storage'daki bir nesneye referans veren mevcut bir gs:// veya https:// URL'sinden bir 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ı indir

Referansınız olduğunda Cloud Storage'dan dosyaları dört şekilde indirebilirsiniz:

  1. Bir URL'den indirin
  2. Bayt dizisine indirme
  3. Akışla İndir
  4. Yerel bir dosyaya indirin

Dosyalarınızı almak için kullanacağınız yöntem, oyununuzda verileri nasıl tüketmek istediğinize bağlı olacaktır.

Bir URL'den indirin

Unity'nin WWW veya UnityWebRequest ile bir URL kullanmak istiyorsanız GetDownloadUrlAsync() öğesini çağırarak bir 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 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ükleyecektir. Uygulamanızın kullanılabilir belleğinden daha büyük bir dosya talep ederseniz uygulamanız çökecektir. Bellek sorunlarına karşı koruma sağlamak için maksimum boyutu, uygulamanızın işleyebileceğini bildiğiniz bir boyuta 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ışla indirmek, verileri yüklendiği gibi işlemenize olanak tanır. Bu, indirme işleminizle ilgilenirken size maksimum esneklik sağlar. GetStreamAsync() öğesini çağırın ve ilk argüman olarak kendi akış işlemcinizi iletin. Bu temsilci, içeriği diske depolamak gibi yoğun gecikmeli işlemler veya hesaplamalar gerçekleştirmenize olanak tanıyan bir Akış içeren bir arka plan iş parçacığı üzerinden çağrılacaktı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 konusunda bildirim almanıza olanak tanıyan isteğe bağlı bir bağımsız değişken alır.

Yerel bir dosyaya indirin

GetFileAsync() yöntemi, dosyayı doğrudan yerel bir aygıta indirir. Kullanıcılarınız dosyaya çevrimdışıyken erişmek veya dosyayı farklı bir uygulamada paylaşmak istiyorsa 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 indirmelere dinleyiciler ekleyebilirsiniz. Dinleyici standart System.IProgress<T> arayüzünü takip eder. İlerleme onayları için geri çağrı olarak kendi Action<T> nizi 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ı İşle

Dosyanın mevcut olmaması veya kullanıcının istenen dosyaya erişim iznine sahip olmaması da dahil olmak üzere indirme sırasında hataların ortaya çıkmasının çeşitli nedenleri vardır. Hatalarla ilgili daha fazla bilgiyi dokümanların Hataları İşleme bölümünde bulabilirsiniz.

Sonraki adımlar

Ayrıca Cloud Storage'da depolanan dosyalara ilişkin meta verileri alabilir ve güncelleyebilirsiniz .