Laden Sie Dateien mit Cloud Storage for Unity herunter

Mit Cloud Storage for Firebase können Sie schnell und einfach Dateien aus einem von Firebase bereitgestellten und verwalteten Cloud Storage- Bucket herunterladen.

Erstellen Sie eine Referenz

Um eine Datei herunterzuladen, erstellen Sie zunächst einen Cloud Storage-Verweis auf die Datei, die Sie herunterladen möchten.

Sie können eine Referenz erstellen, indem Sie untergeordnete Pfade an das Stammverzeichnis Ihres Cloud Storage-Buckets anhängen, oder Sie können eine Referenz aus einer vorhandenen gs:// oder https:// URL erstellen, die auf ein Objekt in Cloud Storage verweist.

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

Dateien herunterladen

Sobald Sie eine Referenz haben, können Sie Dateien auf vier Arten aus Cloud Storage herunterladen:

  1. Herunterladen von einer URL
  2. Laden Sie in ein Byte-Array herunter
  3. Mit einem Stream herunterladen
  4. In eine lokale Datei herunterladen

Die Methode, die Sie zum Abrufen Ihrer Dateien verwenden, hängt davon ab, wie Sie die Daten in Ihrem Spiel nutzen möchten.

Herunterladen von einer URL

Wenn Sie eine URL mit WWW oder UnityWebRequest von Unity verwenden möchten, können Sie eine Download-URL für eine Datei abrufen, indem GetDownloadUrlAsync() aufrufen.

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

Laden Sie in ein Byte-Array herunter

Sie können die Datei mit der GetBytesAsync() Methode in einen Bytepuffer im Arbeitsspeicher herunterladen. Diese Methode lädt den gesamten Inhalt Ihrer Datei in den Speicher. Wenn Sie eine Datei anfordern, die größer ist als der verfügbare Speicher Ihrer App, stürzt Ihre App ab. Stellen Sie zum Schutz vor Speicherproblemen sicher, dass die maximale Größe auf einen Wert eingestellt ist, von dem Sie wissen, dass Ihre App damit umgehen kann, oder verwenden Sie eine andere Download-Methode.

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

Download über einen Stream

Durch das Herunterladen der Datei mit einem Stream können Sie die Daten beim Laden verarbeiten. Dies gibt Ihnen maximale Flexibilität im Umgang mit Ihrem Download. Rufen Sie GetStreamAsync() auf und übergeben Sie Ihren eigenen Stream-Prozessor als erstes Argument. Dieser Delegat wird in einem Hintergrundthread mit einem Stream aufgerufen, mit dem Sie latenzintensive Vorgänge oder Berechnungen ausführen können, z. B. das Speichern des Inhalts auf der Festplatte.

// 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() nach dem Stream-Prozessor ein optionales Argument, mit dem Sie den Vorgang abbrechen oder sich über den Fortschritt benachrichtigen lassen können.

In eine lokale Datei herunterladen

Die GetFileAsync() Methode lädt eine Datei direkt auf ein lokales Gerät herunter. Verwenden Sie dies, wenn Ihre Benutzer offline auf die Datei zugreifen oder die Datei in einer anderen App freigeben möchten.

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

Sie können Listener an Downloads anhängen, um den Fortschritt des Downloads zu überwachen. Der Listener folgt der Standardschnittstelle System.IProgress<T> . Sie können eine Instanz der StorageProgress -Klasse verwenden, um Ihre eigene Action<T> als Rückruf für Fortschrittsticks bereitzustellen.

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

Fehler behandeln

Es gibt eine Reihe von Gründen, warum beim Herunterladen Fehler auftreten können, einschließlich der Datei, die nicht vorhanden ist, oder des Benutzers, der keine Berechtigung hat, auf die gewünschte Datei zuzugreifen. Weitere Informationen zu Fehlern finden Sie im Abschnitt Fehler behandeln der Dokumentation.

Nächste Schritte

Sie können auch Metadaten für Dateien abrufen und aktualisieren , die in Cloud Storage gespeichert sind.