Confira tudo que foi anunciado no Firebase Summit e veja como usar o Firebase para acelerar o desenvolvimento de apps e executar os aplicativos com confiança. Saiba mais

Instale, configure e integre o Local Emulator Suite

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

O Firebase Local Emulator Suite pode ser instalado e configurado para diferentes ambientes de protótipo e teste, desde sessões únicas de prototipagem até fluxos de trabalho de integração contínua em escala de produção.

Instale o pacote de emulador local

Antes de instalar o Emulator Suite, você precisará de:

  • Node.js versão 8.0 ou superior.
  • Java JDK versão 11 ou superior.

Para instalar o pacote do emulador:

  1. Instale a Firebase CLI . Se você ainda não tiver o Firebase CLI instalado, instale-o agora . Você precisará do CLI versão 8.14.0 ou superior para usar o Emulator Suite. Você pode verificar qual versão você instalou usando o seguinte comando:
    firebase --version
  2. Caso ainda não tenha feito isso, inicialize o diretório de trabalho atual como um projeto do Firebase, seguindo as instruções na tela para especificar quais produtos usar:
    firebase init
  3. Configure o pacote do emulador. Este comando inicia um assistente de configuração que permite selecionar emuladores de interesse, fazer download dos arquivos binários do emulador correspondentes e definir as portas do emulador se os padrões não forem apropriados.
    firebase init emulators

Depois que um emulador é instalado, nenhuma verificação de atualização é realizada e nenhum download automático adicional ocorrerá até que você atualize sua versão do Firebase CLI.

Configurar pacote do emulador

Opcionalmente, você pode configurar as portas de rede dos emuladores e o caminho para as definições das regras de segurança no arquivo firebase.json :

  • Altere as portas do emulador executando os firebase init emulators ou editando o firebase.json manualmente.
  • Altere o caminho para as definições de regras de segurança editando firebase.json manualmente.

Se você não definir essas configurações, os emuladores escutarão em suas portas padrão e os emuladores Cloud Firestore, Realtime Database e Cloud Storage para Firebase serão executados com segurança de dados aberta.

Comando Descrição
emuladores de inicialização Inicie um assistente de inicialização do emulador. Identifique os emuladores a serem instalados e, opcionalmente, especifique as configurações da porta do emulador. init emulators não são destrutivos; aceitar padrões irá preservar a configuração atual do emulador.

Configuração da porta

Cada emulador se liga a uma porta diferente em sua máquina com um valor padrão preferencial.

Emulador Porta padrão
Autenticação 9099
IU do pacote do emulador 4000
Funções de nuvem 5001
Eventarc 9299
Banco de dados em tempo real 9000
Cloud Firestore 8080
Armazenamento em nuvem para Firebase 9199
Hospedagem Firebase 5000
Pub/Sub 8085

Configuração do código do projeto

Dependendo de como você invoca emuladores, você pode executar várias instâncias de um emulador usando diferentes códigos de projeto do Firebase ou várias instâncias de emulador para um determinado código de projeto. Nesses casos, as instâncias do emulador são executadas em um ambiente separado.

Geralmente, é uma boa prática definir uma ID de projeto para todas as invocações do emulador, para que a interface do usuário do Emulator Suite, diferentes emuladores de produto e todas as instâncias em execução de um emulador específico possam se comunicar corretamente em todos os casos.

O Local Emulator Suite emite avisos quando detecta vários IDs de projeto no ambiente, embora você possa substituir esse comportamento definindo a chave singleProjectMode como false em seu firebase.json .

Você pode verificar a(s) declaração(ões) de ID do projeto quanto a incompatibilidades em:

  • O projeto padrão na linha de comando. Por padrão, o ID do projeto será obtido na inicialização do projeto selecionado com firebase init ou firebase use . Para ver a lista de projetos (e ver qual está selecionado) use firebase projects:list .
  • Regras de testes unitários. A ID do projeto geralmente é especificada em chamadas para os métodos da biblioteca de teste de unidade de regras initializeTestEnvironment ou initializeTestApp .
  • A linha de comando --project sinalizador. A passagem do sinalizador --project da CLI do Firebase substitui o projeto padrão. Você precisará garantir que o valor do sinalizador corresponda ao ID do projeto nos testes de unidade e na inicialização do aplicativo.

Verifique também as configurações de ID de projeto específicas da plataforma que você definiu ao configurar suas plataformas Apple , Android e projetos da Web .

Configuração de regras de segurança

Os emuladores usarão a configuração de regras de segurança do database de dados, firestore e chaves de configuração storage em firebase.json .

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

Especificando opções Java

O emulador do Realtime Database, o emulador do Cloud Firestore e parte do emulador do Cloud Storage para Firebase são baseados em Java, que pode ser personalizado com sinalizadores JVM por meio da variável de ambiente JAVA_TOOL_OPTIONS .

Por exemplo, se ocorrerem erros relacionados ao espaço de heap Java, você poderá aumentar o tamanho máximo de heap Java para 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Vários sinalizadores podem ser especificados entre aspas separados por espaços, como JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . As sinalizações afetam apenas os componentes baseados em Java dos emuladores e não afetam outras partes da Firebase CLI, como a IU do Emulator Suite.

Iniciar emuladores

Você pode iniciar os emuladores para serem executados até serem encerrados manualmente ou para serem executados durante um script de teste designado e, em seguida, desligados automaticamente.

Comando Descrição
emuladores: iniciar Inicie os emuladores dos produtos Firebase configurados em firebase.json . Os processos do emulador continuarão em execução até que sejam explicitamente interrompidos. Chamar emulators:start baixará os emuladores para ~/.cache/firebase/emulators/ se eles ainda não estiverem instalados.
Bandeira Descrição
--only Opcional. Limite quais emuladores são iniciados. Forneça uma lista separada por vírgulas de nomes de emuladores, especificando um ou mais de 'auth', 'database', 'firestore', 'functions', 'hosting' ou 'pubsub'.
--inspect-functions debug_port Opcional. Use com o emulador do Cloud Functions para ativar a depuração do ponto de interrupção de funções na porta especificada (ou na porta padrão 9229, se o argumento for omitido). Observe que quando esse sinalizador é fornecido, o emulador do Cloud Functions alterna para um modo de execução serializado especial no qual as funções são executadas em um único processo, em ordem sequencial (FIFO); isso simplifica a depuração de função, embora o comportamento seja diferente da execução paralela de vários processos de funções na nuvem.
--export-on-exit= Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Instrua os emuladores a exportarem dados para um diretório quando ocorrer o desligamento, conforme descrito para o comando emulators:export . O diretório de exportação pode ser especificado com este sinalizador: firebase emulators:start --export-on-exit=./saved-data . Se --import for usado, o caminho de exportação será o mesmo; por exemplo: firebase emulators:start --import=./data-path --export-on-exit . Por último, se desejar, passe diferentes caminhos de diretório para os sinalizadores --import e --export-on-exit .
--import= import_directory Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importe dados salvos usando a opção de inicialização --export-on-exit ou o comando emulators:export para uma instância do emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage para Firebase em execução. Quaisquer dados atualmente na memória do emulador serão sobrecarregados.
emuladores: exec scriptpath Execute o script em scriptpath após iniciar os emuladores dos produtos Firebase configurados em firebase.json . Os processos do emulador serão interrompidos automaticamente quando o script terminar de ser executado.
Bandeira Descrição
--only Opcional. Limite quais emuladores são iniciados. Forneça uma lista separada por vírgulas de nomes de emuladores, especificando um ou mais de 'firestore', 'database', 'functions', 'hosting' ou 'pubsub'.
--inspect-functions debug_port Opcional. Use com o emulador do Cloud Functions para ativar a depuração do ponto de interrupção de funções na porta especificada (ou na porta padrão 9229, se o argumento for omitido). Observe que quando esse sinalizador é fornecido, o emulador do Cloud Functions alterna para um modo de execução serializado especial no qual as funções são executadas em um único processo, em ordem sequencial (FIFO); isso simplifica a depuração de função, embora o comportamento seja diferente da execução paralela de vários processos de funções na nuvem.
--export-on-exit= Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Instrua os emuladores a exportarem dados para um diretório quando ocorrer o desligamento, conforme descrito para o comando emulators:export . O diretório de exportação pode ser especificado com este sinalizador: firebase emulators:start --export-on-exit=./saved-data . Se --import for usado, o caminho de exportação será o mesmo; por exemplo: firebase emulators:start --import=./data-path --export-on-exit . Por último, se desejar, passe diferentes caminhos de diretório para os sinalizadores --import e --export-on-exit .
--import= import_directory Opcional. Use com o emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage for Firebase. Importe dados salvos usando a opção de inicialização --export-on-exit ou o comando emulators:export para uma instância do emulador Authentication, Cloud Firestore, Realtime Database ou Cloud Storage para Firebase em execução. Quaisquer dados atualmente na memória do emulador serão substituídos.
--ui Opcional. Execute a interface do usuário do emulador durante a execução.

O método firebase emulators:exec geralmente é mais apropriado para fluxos de trabalho de integração contínua.

Exportar e importar dados do emulador

Você pode exportar dados dos emuladores Authentication, Cloud Firestore, Realtime Database e Cloud Storage for Firebase para usar como um conjunto de dados de linha de base comum e compartilhável. Esses conjuntos de dados podem ser importados usando o sinalizador --import , conforme descrito acima.

emuladores: exportação export_directory

Autenticação, Cloud Firestore, Realtime Database ou Cloud Storage para emulador Firebase . Exporte dados de uma instância do emulador do Cloud Firestore, Realtime Database ou Cloud Storage para Firebase em execução. O export_directory especificado será criado se ainda não existir. Se o diretório especificado existir, você será solicitado a confirmar se os dados de exportação anteriores devem ser substituídos. Você pode pular este prompt usando o sinalizador --force . O diretório de exportação contém um arquivo de manifesto de dados, firebase-export-metadata.json .

Você pode instruir os emuladores a exportar dados automaticamente quando forem desligados usando os --export-on-exit descritos acima.

Integre com seu sistema de CI

Executando imagens do Emulator Suite em contêiner

A instalação e configuração do Emulator Suite com contêineres em uma configuração típica de CI é simples.

Há algumas questões a serem observadas:

  • Os arquivos JAR são instalados e armazenados em cache em ~/.cache/firebase/emulators/ .

    • Você pode adicionar esse caminho à configuração de cache do CI para evitar downloads repetidos.
  • Se você não tiver um arquivo firebase.json em seu repositório, deverá adicionar um argumento de linha de comando ao comando emulators:start ou emulators:exec para especificar quais emuladores devem ser iniciados. Por exemplo,
    --only functions,firestore .

Gerar um token de autenticação (somente emulador de hospedagem)

Se seus fluxos de trabalho de integração contínua dependem do Firebase Hosting , você precisará fazer login usando um token para executar firebase emulators:exec . Os outros emuladores não requerem login.

Para gerar um token, execute firebase login:ci em seu ambiente local; isso não deve ser executado a partir de um sistema CI. Siga as instruções para autenticar. Você só precisa realizar esta etapa uma vez por projeto, pois o token será válido em todas as compilações. O token deve ser tratado como uma senha; certifique-se de que seja mantido em segredo.

Se seu ambiente de CI permite especificar variáveis ​​de ambiente que podem ser usadas nos scripts de compilação, basta criar uma variável de ambiente chamada FIREBASE_TOKEN , com o valor sendo a string do token de acesso. A Firebase CLI selecionará automaticamente a variável de ambiente FIREBASE_TOKEN e os emuladores serão iniciados corretamente.

Como último recurso, você pode simplesmente incluir o token em seu script de compilação, mas certifique-se de que partes não confiáveis ​​não tenham acesso. Para essa abordagem codificada, você pode adicionar --token "YOUR_TOKEN_STRING_HERE" ao comando firebase firebase emulators:exec .

Use a API REST do hub do emulador

Listar emuladores em execução

Para listar os emuladores atualmente em execução, envie uma solicitação GET para o ponto de extremidade /emulators do Hub do Emulador.

curl localhost:4400/emulators

O resultado será um objeto JSON listando todos os emuladores em execução e sua configuração de host/porta, por exemplo:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Ativar/Desativar acionadores de função em segundo plano

Em algumas situações, você precisará desabilitar temporariamente a função local e os acionadores de extensão. Por exemplo, você pode querer excluir todos os dados no emulador do Cloud Firestore sem acionar nenhuma função onDelete em execução nos emuladores Cloud Functions ou Extensions.

Para desabilitar temporariamente os gatilhos de função local, envie uma solicitação PUT para o ponto de extremidade /functions/disableBackgroundTriggers do Hub do emulador.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

O resultado será um objeto JSON detalhando o estado atual.

{
  "enabled": false
}

Para habilitar acionadores de função local depois que eles foram desabilitados, envie uma solicitação PUT para o ponto de extremidade /functions/enableBackgroundTriggers do Hub do Emulador.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

O resultado será um objeto JSON detalhando o estado atual.

{
  "enabled": true
}

Integrações do SDK do emulador

As tabelas nesta seção indicam quais emuladores são compatíveis com SDKs de cliente e administrador. Futuro significa que o suporte ao emulador está planejado, mas ainda não está disponível.

Disponibilidade do SDK do cliente

Android Plataformas da Apple Rede IU do Firebase
Android
IU do Firebase
iOS
IU do Firebase
Rede
Banco de dados em tempo real 19.4.0 7.2.0 8.0.0 6.4.0 Futuro N / D
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Futuro N / D
Autenticação 20.0.0 7.0.0 8.0.0 7.0.0 Futuro 4.7.2
Armazenamento em nuvem para Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 N / D
Funções de nuvem 19.1.0 7.2.0 8.0.0 N / D N / D N / D
Hospedagem N / D N / D N / D N / D N / D N / D
Extensões N / D N / D N / D N / D N / D N / D

Disponibilidade do SDK do administrador

Java Pitão Vai
Banco de dados em tempo real 8.6.0 6.10.0 2.18.0 Futuro
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Autenticação 9.3.0 7.2.0 5.0.0 4.2.0
Armazenamento em nuvem para Firebase 9.8.0 Futuro Futuro Futuro
Funções de nuvem N / D N / D N / D N / D
Hospedagem N / D N / D N / D N / D
Extensões N / D N / D N / D N / D