Pobieranie plików za pomocą Cloud Storage dla Unity

Cloud Storage dla 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 lub możesz utworzyć odwołanie z istniejącego Adres URL gs:// lub https:// 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 pobrać pliki z Cloud Storage na 4 sposoby.

  1. Pobierz z adresu URL
  2. Pobierz 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.

Pobierz z adresu URL

Jeśli chcesz użyć adresu URL z parametrem WWW lub UnityWebRequest Unity, uzyskać adres URL pobierania pliku, wywołując metodę 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 zapobiec problemom z pamięcią, ustaw maksymalny rozmiar na jakiś wiesz, że aplikacja poradzi sobie z zakupem aplikacji, albo użyć 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 ze 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 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.");
    }
});

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 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 mogą występować przy pobieraniu z kilku powodów. Oto niektóre z nich: jeśli plik nie istnieje lub użytkownik nie ma uprawnień dostępu do żądanego pliku. 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 Cloud Storage.