Pobieraj pliki za pomocą Cloud Storage for Unity

Cloud Storage dla Firebase umożliwia szybkie i łatwe pobieranie plików z zasobnika Cloud Storage udostępnianego i zarządzanego przez Firebase.

Utwórz odniesienie

Aby pobrać plik, najpierw utwórz odniesienie do Cloud Storage dla pliku, który chcesz pobrać.

Możesz utworzyć odniesienie, dołączając ścieżki podrzędne do katalogu głównego zasobnika Cloud Storage lub możesz utworzyć odniesienie z istniejącego adresu URL gs:// lub https:// odnoszącego się do obiektu w Cloud Storage.

// 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");

Pobierz pliki

Po uzyskaniu referencji możesz pobierać pliki z Cloud Storage na cztery sposoby:

  1. Pobierz z adresu URL
  2. Pobierz do tablicy bajtów
  3. Pobierz za pomocą strumienia
  4. Pobierz do pliku lokalnego

Metoda, której użyjesz do odzyskania plików, będzie zależeć od tego, w jaki sposób chcesz wykorzystać dane w grze.

Pobierz z adresu URL

Jeśli chcesz użyć adresu URL z WWW Unity lub UnityWebRequest , możesz uzyskać adres URL pobierania pliku, wywołując GetDownloadUrlAsync() .

// 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.
    }
});

Pobierz do tablicy bajtów

Plik można pobrać do buforu bajtów w pamięci przy użyciu metody GetBytesAsync() . Ta metoda załaduje całą zawartość pliku do pamięci. Jeśli poprosisz o plik większy niż dostępna pamięć aplikacji, aplikacja ulegnie awarii. Aby zabezpieczyć się przed problemami z pamięcią, ustaw maksymalny rozmiar na taki, jaki obsługuje Twoja aplikacja, lub użyj innej metody pobierania.

// 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!");
    }
});

Pobierz przez strumień

Pobranie pliku ze strumieniem umożliwia przetwarzanie danych w momencie ich załadowania. Zapewnia to maksymalną elastyczność w zakresie pobierania. Wywołaj funkcję GetStreamAsync() i jako pierwszy argument przekaż swój własny procesor strumieniowy. Ten delegat zostanie wywołany w wątku w tle ze strumieniem, który umożliwia wykonywanie operacji lub obliczeń wymagających dużych opóźnień, takich jak przechowywanie zawartości na dysku.

// 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() pobiera opcjonalne argumenty po procesorze strumieniowym, co pozwala anulować operację lub uzyskać powiadomienie o postępie.

Pobierz do pliku lokalnego

Metoda GetFileAsync() pobiera plik bezpośrednio na urządzenie lokalne. Użyj tej opcji, jeśli użytkownicy chcą mieć dostęp do pliku w trybie offline lub udostępnić plik w innej aplikacji.

// 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.");
    }
});

Możesz dołączyć słuchaczy do pobranych plików, aby monitorować postęp pobierania. Odbiornik korzysta ze standardowego interfejsu System.IProgress<T> . Możesz użyć instancji klasy StorageProgress , aby udostępnić własną Action<T> jako wywołanie zwrotne dla znaczników postępu.

// 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.");
    }
});

Obsługa błędów

Istnieje wiele powodów, dla których mogą wystąpić błędy podczas pobierania, na przykład nieistniejący plik lub brak uprawnień dostępu użytkownika do żądanego pliku. Więcej informacji na temat błędów można znaleźć w sekcji Obsługiwanie błędów w dokumentacji.

Następne kroki

Możesz także pobierać i aktualizować metadane plików przechowywanych w Cloud Storage.