Conectar o app ao emulador do Cloud Storage para Firebase

Antes de conectar seu app ao emulador do Cloud Storage para Firebase, você precisa entender o fluxo de trabalho geral do Pacote de emuladores locais do Firebase, instalar e configurar o Pacote de emuladores locais e analisar os comandos da CLI.

Escolher um projeto do Firebase

O Pacote de emuladores locais do Firebase emula produtos para um único projeto.

Na CLI, execute firebase use no diretório de trabalho antes de iniciar os emuladores para selecionar o projeto a ser usado. Como opção, é possível transmitir a flag --project para cada comando do emulador.

O Pacote de emuladores locais oferece suporte à emulação de projetos reais e de demonstração do Firebase.

Tipo de projeto Recursos Usar com emuladores
Real

Um projeto real do Firebase é aquele que você criou e configurou (provavelmente pelo Console do Firebase).

Os projetos reais têm recursos ativos, como instâncias de banco de dados, buckets de armazenamento, funções ou qualquer outro recurso configurado para o projeto do Firebase.

Ao trabalhar com projetos reais do Firebase, é possível executar emuladores para qualquer um ou todos os produtos suportados.

Para todos os produtos que você não estiver emulando, os apps e o código interagem com recursos ativos, como o banco de dados, o bucket de armazenamento, a função etc.

Demonstração

Um projeto de demonstração do Firebase não tem configuração real nem recursos ativos. Em geral, esses projetos são acessados usando codelabs ou outros tutoriais.

Os IDs dos projetos de demonstração têm o prefixo demo-.

Ao trabalhar com projetos de demonstração do Firebase, os apps e códigos interagem apenas com emuladores. Se o app tentar interagir com um recurso em que um emulador não esteja em execução, o código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Alguns dos benefícios são:

  • Configuração mais fácil, já que é possível executar os emuladores sem precisar criar um projeto do Firebase
  • Mais segurança, já que, se o código invocar acidentalmente recursos não emulados (produção), não haverá chance de alteração, uso e faturamento de dados
  • Melhor suporte off-line, já que não é necessário acessar a Internet para fazer o download da configuração do SDK

Instrua o app a se comunicar com os emuladores

SDKs do Android, da Apple e da Web

Defina a configuração no app ou as classes de teste para interagir com o emulador do Cloud Storage para Firebase conforme mostrado a seguir.

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val storage = Firebase.storage
storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseStorage storage = FirebaseStorage.getInstance();
storage.useEmulator("10.0.2.2", 9199);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web

const { getStorage, connectStorageEmulator } = require("firebase/storage");

const storage = getStorage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  connectStorageEmulator(storage, "127.0.0.1", 9199);
} 

Web

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

Nenhuma configuração extra é necessária para testar funções do Cloud acionadas por eventos do Cloud Storage para Firebase usando o emulador. Quando os emuladores do Cloud Storage para Firebase e do Cloud Functions estão em execução, eles automaticamente funcionam juntos.

SDKs Admin

Os SDKs Admin do Firebase se conectam automaticamente ao emulador do Cloud Storage para Firebase quando a variável de ambiente FIREBASE_STORAGE_EMULATOR_HOST está definida:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

O emulador do Cloud Functions reconhece automaticamente o emulador do Cloud Storage para Firebase. Dessa forma, é possível pular esta etapa ao testar integrações entre os emuladores do Cloud Functions e do Cloud Storage para Firebase. A variável de ambiente é definida automaticamente para o SDK Admin no Cloud Storage para Firebase.

Se você quiser que o código do SDK Admin se conecte a um emulador compartilhado em execução em outro ambiente, especifique o mesmo ID do projeto definido usando a CLI do Firebase. É possível transmitir um ID do projeto para initializeApp diretamente ou definir a variável de ambiente GCLOUD_PROJECT.

SDK Admin para Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variável de ambiente
export GCLOUD_PROJECT="your-project-id"

Importar e exportar dados

O banco de dados e os emuladores do Cloud Storage para Firebase permitem exportar dados de uma instância do emulador em execução. Defina um conjunto de dados de referência para usar nos testes de unidade ou nos fluxos de trabalho de integração contínua e o exporte para que seja compartilhado com a equipe.

firebase emulators:export ./dir

Em testes, na inicialização do emulador, importe os dados de referência.

firebase emulators:start --import=./dir

Instrua o emulador a exportar dados no desligamento, especificando um caminho de exportação ou simplesmente usando o caminho transmitido para a flag --import.

firebase emulators:start --import=./dir --export-on-exit

Essas opções de importação e exportação de dados também funcionam com o comando firebase emulators:exec. Para saber mais, consulte a referência de comandos do emulador.

Qual é a diferença entre o emulador do Cloud Storage para Firebase e a produção?

Para testar apps clientes, o emulador do Cloud Storage para Firebase se alinha à produção quase perfeitamente em relação à área de superfície da API do Firebase. Espera-se que todos os comandos do Firebase funcionem entre os SDKs normais do Firebase (plataformas da Web, Android e Apple).

Existem limitações para o teste de apps do lado do servidor. Os SDKs Admin do Firebase usam a superfície da API Google Cloud, e nem todos os endpoints dessa API são emulados. Como regra geral, tudo o que pode ser feito nos SDKs do cliente (upload ou exclusão de arquivos, recebimento e configuração de metadados) também é implementado para uso pelos SDKs Admin, mas qualquer tarefa fora isso não é implementado. As exclusões importantes estão listadas abaixo.

Diferenças do Google Cloud Storage

O produto Cloud Storage para Firebase, incluindo o emulador do Storage, oferece um subconjunto de funcionalidades do Google Cloud Storage (GCS) com foco em objetos de armazenamento úteis para desenvolver apps do Firebase. Confira as diferenças entre o Cloud Storage para Firebase e o GCS:

  • No momento, o Cloud Storage para Firebase não tem suporte a APIs Bucket para criar, listar, receber ou excluir buckets de armazenamento.
  • A partir da API de objetos do Google Cloud Storage, os métodos a seguir têm suporte: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

O Pacote do emuladores do Firebase não tenta replicar nem respeitar qualquer comportamento relacionado ao IAM para execução. Os emuladores aderem às regras de segurança do Firebase fornecidas, mas em situações em que o IAM normalmente seria usado, por exemplo, para definir o Cloud Functions que invoca a conta de serviço e as permissões, o emulador não é configurável e usará a conta disponível globalmente na máquina de desenvolvimento, semelhante à execução direta de um script local.

Notificações do Pub/Sub

O emulador do Cloud Storage para Firebase não se integra ao emulador do Cloud Pub/Sub. Dessa forma, ele não permite criar canais/notificações para alterações nos objetos de armazenamento. Recomendamos o uso direto de gatilhos do Cloud Storage no Cloud Functions.

Metadados no nível do bucket

O emulador do Cloud Storage para Firebase não oferece suporte a nenhuma configuração de bucket, incluindo a classe de armazenamento, a configuração do CORS, os rótulos ou as políticas de retenção. O Firebase pretende melhorar esse suporte ao longo do tempo.

A seguir