Conecte seu aplicativo ao emulador do Cloud Storage para Firebase

Antes de conectar seu aplicativo ao emulador do Cloud Storage para Firebase, entenda o fluxo de trabalho geral do Firebase Local Emulator Suite e instale e configure o Local Emulator Suite e revise seus comandos da CLI .

Escolha um projeto do Firebase

O Firebase Local Emulator Suite emula produtos para um único projeto do Firebase.

Para selecionar o projeto a ser usado, antes de iniciar os emuladores, na CLI, execute firebase use em seu diretório de trabalho. Ou você pode passar o sinalizador --project para cada comando do emulador.

O Local Emulator Suite oferece suporte à emulação de projetos reais do Firebase e projetos de demonstração .

Tipo de projeto Características Use com emuladores
Real

Um projeto real do Firebase é aquele que você criou e configurou (provavelmente por meio do console do Firebase).

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

Ao trabalhar com projetos reais do Firebase, você pode executar emuladores para qualquer um ou todos os produtos compatíveis.

Para quaisquer produtos que você não esteja emulando, seus aplicativos e código interagirão com o recurso ativo (instância de banco de dados, depósito de armazenamento, função, etc.).

Demonstração

Um projeto de demonstração do Firebase não tem configuração real do Firebase nem recursos ativos. Esses projetos geralmente são acessados ​​por meio de codelabs ou outros tutoriais.

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

Ao trabalhar com projetos de demonstração do Firebase, seus aplicativos e códigos interagem apenas com emuladores . Se o seu aplicativo tentar interagir com um recurso para o qual um emulador não está em execução, esse código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Os benefícios incluem:

  • Configuração mais fácil, pois você pode executar os emuladores sem nunca criar um projeto Firebase
  • Maior segurança, pois se o seu código invocar acidentalmente recursos não emulados (de produção), não há chance de alteração de dados, utilização e cobrança
  • Melhor suporte offline, já que não há necessidade de acesso à internet para baixar a configuração do seu SDK.

Instrumente seu aplicativo para conversar com os emuladores

Android, plataformas Apple e SDKs da Web

Defina a configuração no aplicativo ou as classes de teste para interagir com o emulador do Cloud Storage para Firebase da seguinte maneira.

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);
Rápido
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web modular API

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 namespaced API

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 adicional é 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 trabalham juntos automaticamente.

SDKs de administrador

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 é definida:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Observe que o emulador do Cloud Functions reconhece automaticamente o emulador do Cloud Storage para Firebase. Portanto, você pode pular esta etapa ao testar integrações entre o Cloud Functions e os emuladores do Cloud Storage para Firebase. A variável de ambiente será definida automaticamente para o SDK Admin no Cloud Storage para Firebase.

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

SDK administrativo do 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 básico de dados para usar em seus testes de unidade ou fluxos de trabalho de integração contínua e, em seguida, exporte-os para serem compartilhados entre a equipe.

firebase emulators:export ./dir

Nos testes, na inicialização do emulador, importe os dados da linha de base.

firebase emulators:start --import=./dir

Você pode instruir o emulador a exportar dados no desligamento, especificando um caminho de exportação ou simplesmente usando o caminho passado para o sinalizador --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 obter mais informações, consulte a referência do comando do emulador .

Como o emulador do Cloud Storage para Firebase difere da produção

Para testar aplicativos 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 regulares do Firebase (plataformas Web, Android e Apple).

Existem limitações para testar aplicativos 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 (carregar ou excluir arquivos, obter e definir metadados) também é implementado para uso nos SDKs Admin, mas nada além disso não é. Exclusões notáveis ​​estão listadas abaixo.

Diferenças do Google Cloud Storage

O produto Cloud Storage para Firebase, incluindo o emulador de armazenamento, fornece um subconjunto de funcionalidades do Google Cloud Storage (GCS) com foco em objetos de armazenamento que são muito úteis para desenvolver aplicativos do Firebase. O Cloud Storage para Firebase difere do GCS nos seguintes aspectos:

  • Atualmente, o Cloud Storage para Firebase não é compatível com APIs Bucket para criar, listar, receber ou excluir buckets de armazenamento.
  • Na API Google Cloud Storage Objects , os seguintes métodos são suportados: copy , delete , get , insert , list , patch , rewrite , update .

Nuvem IAM

O Firebase Emulator Suite não tenta replicar ou 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, portanto, as permissões, o emulador não é configurável e usará a conta disponível globalmente na sua máquina de desenvolvedor. semelhante a executar um script local diretamente.

Notificações do Pub/Sub

O emulador do Cloud Storage para Firebase não se integra ao emulador do Cloud Pub/Sub e, portanto, não oferece suporte à criação de canais/notificações para alterações de objetos de armazenamento. Recomendamos usar os gatilhos do Cloud Functions Storage diretamente.

Metadados em nível de bucket

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

Qual o proximo?