Ir para o console

Fazer o download de arquivos com o Cloud Storage para Unity

Com o Cloud Storage, os desenvolvedores fazem o download de maneira rápida e fácil dos arquivos do intervalo do Google Cloud Storage, que é fornecido e gerenciado pelo Firebase.

Criar uma referência

Para fazer o download de um arquivo, primeiro crie uma referência do Cloud Storage para o arquivo que você quer transferir.

Crie uma referência anexando caminhos filhos à raiz de armazenamento ou a partir de um URL gs:// ou https:// existente referente a um objeto no Cloud Storage.

// Create a reference with an initial file path and name
Firebase.Storage.StorageReference path_reference =
  storage.GetReference("images/stars.jpg");

// Create a reference from a Google Cloud Storage URI
Firebase.Storage.StorageReference gs_reference =
  storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
Firebase.Storage.StorageReference https_reference =
  storage.GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");

Fazer o download de arquivos

Os arquivos armazenados no Cloud Storage podem ser recuperados de quatro maneiras:

  1. Fazer o download a partir de um URL.
  2. Fazer o download para uma matriz de bytes.
  3. Fazer o download por streaming.
  4. Fazer o download para um arquivo local.

O método usado para recuperar os arquivos dependerá da forma como quer consumir dados no jogo.

Fazer o download a partir de um URL

Se você quiser usar um URL com WWW ou UnityWebRequest do Unity, chame GetDownloadUrlAsync() e receba um URL de download para um arquivo.

// Fetch the download URL
reference.GetDownloadUrlAsync().ContinueWith((Task<Uri> task) => {
  if (!task.IsFaulted && !task.IsCanceled) {
    Debug.Log("Download URL: " + task.Result());
    // ... now download the file via WWW or UnityWebRequest.
  }
});

Fazer o download para uma matriz de bytes

Faça o download do arquivo para um buffer de bytes na memória usando o método GetBytesAsync(). Este método carregará todo o conteúdo do arquivo para a memória. Caso o arquivo solicitado seja maior do que a memória disponível do app, ocorrerá uma falha. Para evitar problemas de memória, configure o tamanho máximo para um valor que possa ser processado pelo app ou use outro método de download.

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
const long maxAllowedSize = 1 * 1024 * 1024;
reference.GetBytesAsync(maxAllowedSize).ContinueWith((Task<byte[]> task) => {
  if (task.IsFaulted || task.IsCanceled) {
    Debug.Log(task.Exception.ToString());
    // Uh-oh, an error occurred!
  } else {
    byte[] fileContents = task.Result;
    Debug.Log("Finished downloading!");
  }
});

Fazer o download por streaming

O download do arquivo por streaming permite processar os dados conforme são carregados. Isso proporciona flexibilidade máxima ao lidar com seu download. Chame GetStreamAsync() e passe o próprio processador de streaming como primeiro argumento. Este delegado será chamado em segundo plano com um stream que permite executar operações ou cálculos de alto consumo de latência, como armazenar o conteúdo em 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() toma os argumentos opcionais após o processador de streaming que permite cancelar a operação ou ser notificado do andamento.

Fazer o download para um arquivo local

O método GetFileAsync() faz o download de um arquivo diretamente para um dispositivo local. Use esse método quando os usuários quiserem acessar o arquivo off-line ou compartilhá-lo em outro app.

// Create local filesystem URL
string local_url = "file:///local/images/island.jpg";

// Download to the local filesystem
reference.GetFileAsync(local_url).ContinueWith(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        Debug.Log("File downloaded.");
    }
});

Conecte listeners aos downloads para monitorar o andamento deles. O listener segue a interface System.IProgress<T> padrão. Use uma instância da classe StorageProgress para fornecer a própria Action<T> como retorno de chamada para verificação do andamento.

// Create local filesystem URL
string local_url = "file:///local/images/island.jpg";

// Start downloading a file
Task task = reference.GetFileAsync(local_file,
  new Firebase.Storage.StorageProgress <DownloadState>((DownloadState state) => {
    // called periodically during the download
    Debug.Log(String.Format(
      "Progress: {0} of {1} bytes transferred.",
      state.BytesTransferred,
      state.TotalByteCount
    ));
  }), CancellationToken.None);

task.ContinueWith(resultTask => {
  if (!resultTask.IsFaulted && !resultTask.IsCanceled) {
    Debug.Log("Download finished.");
  }
});

Como lidar com erros

Durante os downloads, é possível que erros ocorram por vários motivos. Por exemplo, o arquivo não existe ou o usuário não tem permissão para acessá-lo. Saiba mais sobre erros na seção Como lidar com erros do documento.

Próximas etapas

Também é possível receber e atualizar metadados de arquivos armazenados no Cloud Storage.