Cloud Storage for Firebase ti consente di scaricare file da un Cloud Storage bucket fornito e gestito da Firebase in modo rapido e semplice.
Creazione di un riferimento
Per scaricare un file, prima crea un Cloud Storage riferimento al file che vuoi scaricare.
Puoi creare un riferimento aggiungendo percorsi secondari alla radice del tuo
Cloud Storage bucket 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");
Scarica file
Una volta creato un riferimento, puoi scaricare i file da Cloud Storage in quattro modi:
- Scarica da un URL
- Scarica in un array di byte
- Scarica con uno stream
- Scarica in un file locale
Il metodo che utilizzerai per recuperare i file dipende da come vuoi utilizzare i dati nel gioco.
Scarica da un URL
Se vuoi 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
Puoi 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 arresterà in modo anomalo.
Per proteggerti dai problemi di memoria, assicurati di impostare la dimensione massima su un valore 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 uno stream
Il download del file con uno stream ti consente di elaborare i dati durante il caricamento.
In questo modo hai la massima flessibilità nella gestione del download. Chiama
GetStreamAsync() e passa il tuo processore di stream come primo argomento.
Questo delegato verrà chiamato su un thread in background con uno stream che
ti consente di eseguire operazioni o calcoli intensivi di latenza, ad esempio
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 stream che
ti consentono di annullare l'operazione o di ricevere una notifica dell'avanzamento.
Scarica in un file locale
Il metodo GetFileAsync() scarica un file direttamente su un dispositivo locale. Utilizzalo se
gli utenti vogliono avere accesso al file offline o condividerlo 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 collegare listener ai download per monitorare l'avanzamento del
download. Il listener segue l'interfaccia standard System.IProgress<T>. Puoi utilizzare un'istanza della StorageProgress classe, 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."); } });
Gestisci gli errori
Esistono diversi motivi per cui possono verificarsi errori durante il download, tra cui il file non esiste o l'utente non ha l'autorizzazione per accedere al file desiderato. Per ulteriori informazioni sugli errori, consulta la sezione Gestisci gli errori della documentazione.
Passaggi successivi
Puoi anche ottenere e aggiornare i metadati dei file archiviati in Cloud Storage.