Scarica file con Cloud Storage for Unity

Cloud Storage for Firebase ti consente di scaricare file in modo rapido e semplice da un bucket Cloud Storage fornito e gestito da Firebase.

Crea un riferimento

Per scaricare un file, crea innanzitutto un riferimento Cloud Storage per il file che desideri scaricare.

Puoi creare un riferimento aggiungendo percorsi secondari alla radice del tuo bucket Cloud Storage oppure puoi creare un riferimento da un URL gs:// o https:// esistente che fa riferimento a un oggetto in 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");

Scaricare files

Una volta ottenuto un riferimento, puoi scaricare file da Cloud Storage in quattro modi:

  1. Scarica da un URL
  2. Scarica in un array di byte
  3. Scarica con uno streaming
  4. Scarica in un file locale

Il metodo che utilizzerai per recuperare i tuoi file dipenderà da come desideri utilizzare i dati nel tuo gioco.

Scarica da un URL

Se desideri utilizzare un URL con WWW o UnityWebRequest di Unity, puoi ottenere un URL di download per un file chiamando 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.
    }
});

Scarica in un array di byte

È possibile scaricare il file in un buffer di byte in memoria utilizzando il metodo GetBytesAsync() . Questo metodo caricherà l'intero contenuto del file in memoria. Se richiedi un file più grande della memoria disponibile dell'app, l'app si bloccherà. Per proteggerti da problemi di memoria, assicurati di impostare la dimensione massima su qualcosa che sai che la tua app può gestire o utilizza un altro metodo di download.

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

Scarica tramite un flusso

Il download del file con uno stream consente di elaborare i dati non appena vengono caricati. Questo ti dà la massima flessibilità quando gestisci il tuo download. Chiama GetStreamAsync() e passa il tuo processore di flusso come primo argomento. Questo delegato verrà chiamato su un thread in background con un flusso che consente di eseguire operazioni o calcoli ad alta latenza, come l'archiviazione dei contenuti su disco.

// 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() accetta argomenti facoltativi dopo il processore di flusso che consentono di annullare l'operazione o ricevere una notifica di avanzamento.

Scarica in un file locale

Il metodo GetFileAsync() scarica un file direttamente su un dispositivo locale. Utilizzalo se i tuoi utenti desiderano avere accesso al file mentre sono offline o condividere il file in un'altra app.

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

Puoi allegare ascoltatori ai download per monitorare l'avanzamento del download. Il listener segue l'interfaccia System.IProgress<T> standard. Puoi utilizzare un'istanza della classe StorageProgress per fornire la tua Action<T> come callback per i tick di avanzamento.

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

Gestire gli errori

Esistono diversi motivi per cui potrebbero verificarsi errori durante il download, incluso il file inesistente o l'utente che non dispone dell'autorizzazione per accedere al file desiderato. Ulteriori informazioni sugli errori sono disponibili nella sezione Gestione degli errori della documentazione.

Prossimi passi

Puoi anche ottenere e aggiornare i metadati per i file archiviati in Cloud Storage.