Laden Sie Dateien mit Cloud Storage für Unity herunter

Mit Cloud Storage für 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 dem Cloud-Speicher herunterladen:

  1. Von einer URL herunterladen
  2. In ein Byte-Array herunterladen
  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.

Von einer URL herunterladen

Wenn Sie eine URL mit Unitys WWW oder UnityWebRequest verwenden möchten, können Sie eine Download-URL für eine Datei erhalten, indem Sie 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.
    }
});

In ein Byte-Array herunterladen

Sie können die Datei mit der Methode GetBytesAsync() in einen Bytepuffer im Speicher 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 Sie die maximale Größe auf einen Wert festlegen, von dem Sie wissen, dass Ihre App ihn verarbeiten 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!");
    }
});

Über einen Stream herunterladen

Wenn Sie die Datei mit einem Stream herunterladen, können Sie die Daten beim Laden verarbeiten. Dadurch haben Sie 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, der Ihnen die Durchführung latenzintensiver Vorgänge oder Berechnungen wie das Speichern des Inhalts auf der Festplatte ermöglicht.

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

In eine lokale Datei herunterladen

Die GetFileAsync() Methode lädt eine Datei direkt auf ein lokales Gerät herunter. Verwenden Sie diese Option, wenn Ihre Benutzer offline auf die Datei zugreifen oder die Datei in einer anderen App teilen 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 Downloads Listener hinzufügen, 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 Fortschritts-Ticks 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.");
    }
});

Behandeln Sie Fehler

Es gibt eine Reihe von Gründen, warum beim Herunterladen Fehler auftreten können, darunter, dass die Datei nicht vorhanden ist oder der Benutzer keine Berechtigung zum Zugriff auf die gewünschte Datei hat. 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.