Pobieranie plików za pomocą Cloud Storage dla Unity

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

Tworzenie referencji

Aby pobrać plik, najpierw utwórz Cloud Storageodwołanie do pliku, który chcesz pobrać.

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

Pobieranie plików

Po uzyskaniu dostępu do materiałów referencyjnych możesz pobrać pliki z Cloud Storage na 4 sposoby:

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

Metoda pobierania plików zależy od tego, jak chcesz wykorzystywać dane w grze.

Pobieranie z adresu URL

Jeśli chcesz użyć adresu URL z funkcjami WWW lub UnityWebRequest Unity, możesz uzyskać adres URL pobierania 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.
    }
});

Pobieranie do tablicy bajtów

Możesz pobrać plik do bufora bajtów w pamięci za pomocą metody GetBytesAsync(). Ta metoda wczyta całą zawartość pliku do pamięci. Jeśli zażądasz pliku większego niż dostępna pamięć aplikacji, aplikacja ulegnie awarii. Aby zapobiec problemom z pamięcią, ustaw maksymalny rozmiar na wartość, z którą Twoja aplikacja sobie poradzi, 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 przetwarzanie danych w miarę ich wczytywania. Zapewnia to maksymalną elastyczność podczas pobierania. Wywołaj funkcję Call GetStreamAsync() i przekaż własny procesor strumieniowy jako pierwszy argument. Ten delegat zostanie wywołany w wątku w tle ze strumieniem, który umożliwia wykonywanie operacji lub obliczeń wymagających dużej ilości czasu, np. zapisywanie 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() przyjmuje argumenty opcjonalne po procesorze strumienia, które umożliwiają anulowanie operacji lub otrzymywanie powiadomień o postępach.

Pobieranie 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ć go 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ć do pobierania odbiorniki, aby monitorować postęp pobierania. Obiekt nasłuchujący jest zgodny ze standardowym interfejsem System.IProgress<T>. Możesz użyć instancji klasy StorageProgress, aby podać własną funkcję 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

Błędy pobierania mogą wystąpić z różnych powodów, np. z powodu braku pliku lub braku uprawnień użytkownika do uzyskania dostępu do wybranego pliku. Więcej informacji o błędach znajdziesz w sekcji Obsługa błędów w dokumentacji.

Następne kroki

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