Pobieranie plików za pomocą Cloud Storage dla Unity

Aplikacja Cloud Storage for Firebase umożliwia szybkie i łatwe pobieranie pliki z: Cloud Storage udostępniane i zarządzane przez Firebase.

Tworzenie referencji

Aby pobrać plik, utwórz referencję Cloud Storage w pliku, który chcesz pobrać.

Odwołanie możesz utworzyć, dołączając ścieżki podrzędne do katalogu głównego Cloud Storage, ale możesz utworzyć plik referencyjny z istniejącego gs:// lub https:// URL odwołujący 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");

Pobieranie plików

Gdy będziesz mieć już plik referencyjny, możesz pobierać pliki z usługi Cloud Storage na 4 sposoby.

  1. Pobierz z adresu URL
  2. Pobieranie do tablicy bajtów
  3. Pobieranie ze strumieniem
  4. Pobieranie do pliku lokalnego

Metoda, której użyjesz do pobrania plików, zależy od tego, pobierają dane w grze.

Pobieranie z adresu URL

Jeśli chcesz użyć adresu URL z funkcją WWW lub UnityWebRequest w Unity, możesz uzyskać adres URL do pobrania pliku, wywołując funkcję 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żesz pobrać w buforze bajtów w pamięci za pomocą metody GetBytesAsync(). Ta metoda spowoduje wczytanie do pamięci całej zawartości pliku. Jeśli zażądasz pliku, którego rozmiar przekracza dostępną pamięć aplikacji, aplikacja ulegnie awarii. Aby uniknąć problemów z pamięcią, ustaw maksymalny rozmiar na wartość, którą aplikacja może obsłużyć, 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!");
    }
});

Pobieranie za pomocą strumienia

Pobranie pliku za pomocą strumienia umożliwia przetworzenie danych w momencie ich załadowania. Zapewnia to maksymalną elastyczność podczas pobierania plików. Zadzwoń do nas GetStreamAsync() i jako pierwszy argument przekazać własny procesor strumienia. Ten przedstawiciel zostanie wywołany w wątku w tle ze strumieniem, który umożliwia wykonywanie operacji lub obliczeń intensywnych opóźnienia, takich jak zapisując zawartość 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() przyjmuje opcjonalne argumenty za procesorem strumienia, który pozwala anulować operację lub otrzymać powiadomienie o jej postępie.

Pobieranie do pliku lokalnego

Metoda GetFileAsync() pobiera plik bezpośrednio na urządzenie lokalne. Należy go użyć, jeśli użytkownicy chcą mieć dostęp do pliku offline lub udostępniać go lub inną aplikację.

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

Aby monitorować postęp przesyłania, możesz dołączyć do pobranych plików detektory pobierz. Detektor przestrzega standardowej reguły System.IProgress<T> za pomocą prostego interfejsu online. Można również użyć instancji klasy StorageProgress, aby Twój własny Action<T> jako wywołanie zwrotne do informacji o postępach.

// 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

Błędy podczas pobierania mogą występować z różnych powodów, m.in. dlatego, że plik nie istnieje lub użytkownik nie ma do niego dostępu. Więcej informacji o błędach znajdziesz w Obsługa błędów sekcji dokumentów.

Następne kroki

Możesz też pobierać i aktualizować metadane. w przypadku plików przechowywanych w folderze Cloud Storage.