Estou pensando em usar o Firebase como MBaaS, mas não consegui encontrar nenhuma solução confiável para o seguinte problema:
Gostaria de configurar dois ambientes separados do Firebase, um para desenvolvimento e outro para produção, mas não quero fazer uma cópia manual dos recursos (por exemplo, configuração remota, regras de notificação etc.) entre o ambiente de desenvolvimento e produção .
Existe alguma ferramenta ou método em que eu possa confiar? Definir regras de configuração ou notificação remota do zero pode ser uma tarefa assustadora e muito arriscada.
Alguma sugestão? Existe uma abordagem melhor do que ter dois ambientes separados?
Antes de postar outra resposta à pergunta, que explica como configurar contas separadas do Firebase: não é a pergunta, leia-a novamente. A questão é: como TRANSFERIR alterações entre contas de dev e prod separadas ou qualquer solução melhor do que copiar manualmente entre elas.
Respostas:
Como todos apontaram - você precisa de mais de um projeto / banco de dados.
Mas, para responder à sua pergunta sobre a necessidade de poder copiar configurações / dados, etc., do desenvolvimento à produção. Eu tinha exatamente a mesma necessidade. Alguns meses de desenvolvimento e teste, eu não queria copiar manualmente os dados.
Meu resultado foi fazer backup dos dados em um balde de armazenamento e restaurá-los a partir daí para o outro banco de dados. É uma maneira bem simples de fazer isso - e eu fiz um backup / restauração de banco de dados inteiro - mas você pode procurar nessa direção por uma maneira mais controlada. Eu não o usei - é muito novo - mas isso pode ser uma solução: Módulo NPM firestore-export-import
Editar : informações sobre backup / exportação / importação do Firestore aqui Cloud Exportando e importando dados do Firestore
Se você estiver usando o Firebase RTDB e não o Firestore - esta documentação pode ajudar: Backups automatizados do Firebase
Você precisará definir as permissões corretamente para permitir que o banco de dados de produção acesse o mesmo depósito de armazenamento que o seu desenvolvimento. Boa sorte.
fonte
Se você estiver usando o firebase-tools, existe um comando
firebase use
que permite configurar qual projeto você está usando parafirebase deploy
firebase use --add
trará uma lista de seus projetos, selecione um e ele solicitará um alias. A partir daí, você podefirebase use alias
efirebase deploy
vai avançar para esse projeto.No meu uso pessoal, tenho my-app e my-app-dev como projetos no console do Firebase.
fonte
No momento, não estou usando o Firebase, mas considerando-o como você. Parece que o caminho a seguir é criar um projeto completamente separado no console. Havia um post no blog recomendando isso no site antigo do Firebase, mas parece ser removido agora. https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html
Também esta discussão recomenda o mesmo: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ
fonte
Do jeito que eu fiz:
Dessa forma, não sou obrigado a manter meus JSONs.
fonte
Este post do blog descreve uma abordagem muito simples com um tipo de compilação de depuração e lançamento.
Em poucas palavras:
=> veja o post do blog para uma descrição detalhada.
Se você quiser usar diferentes tipos de build, leia este post extenso no blog oficial do firebase. Ele contém muitas informações valiosas.
Espero que ajude!
fonte
Você precisará gerenciar diferentes tipos de compilação
Siga isso
Primeiro, crie um novo projeto no console do Firebase, identifique-se como YOURAPPNAME-DEV
Clique no botão "Adicionar aplicativo Android" e crie um novo aplicativo. Nomeie como com.yourapp.debug, por exemplo. O novo arquivo google-services.json será baixado automaticamente
No diretório src do projeto, crie um novo diretório com o nome "debug" e copie o novo arquivo google-services.json aqui
No nível do módulo build.gradle, adicione este
Agora, quando você criar uma depuração, será usado o google-services.json a partir da pasta "debug" e quando você criar o modo de liberação google-services.json a partir do diretório raiz do módulo será considerado.
fonte
src
para o buildType, conforme explicado aqui developers.google.com/android/guides/…Para resolver isso, criei três projetos do Firebase, cada um com o mesmo projeto Android (ou seja, o mesmo
applicationId
sem usar oapplicationIdSuffix
sugerido por outros). Isso resultou em três arquivos google-services.json que eu armazenei no servidor de Integração Contínua (CI) como variáveis de ambiente personalizadas . Para cada estágio da construção (dev / staging / prod), usei o arquivo google-services.json correspondente.Para o projeto Firebase associado ao dev, em seu projeto Android, adicionei a impressão digital do certificado SHA de depuração. Mas, para preparação e produção, basta que o CI assine o APK.
Aqui está um despojado
.gitlab-ci.yml
que funcionou para esta configuração:Estou feliz com esta solução porque ela não se baseia nos truques de build.gradle que, acredito, são muito opacos e, portanto, difíceis de manter. Por exemplo, quando tentei as abordagens usando s
applicationIdSuffix
diferentesbuildType
, descobri que não conseguia executar testes instrumentados nem mesmo compilar quando tentei alternar tipos de compilação usandotestBuildType
. O Android parecia dar propriedades especiais àsdebug
buildType
quais eu não conseguia inspecionar para entender.Virtualmente, os scripts de CI são bastante transparentes e fáceis de manter, na minha experiência. De fato, a abordagem que descrevi funcionou: quando executei cada um dos APKs gerados pelo CI em um emulador, a etapa "Execute seu aplicativo para verificar a instalação" do console do Firebase passou de
para:
para todos os três aplicativos, como eu os iniciei um a um em um emulador.
fonte
O Firebase possui uma página que explica como configurá-lo para dev e prod
https://firebase.google.com/docs/functions/config-env
fonte
Estou atualizando esta resposta com base nas informações que acabei de encontrar.
Passo 1
No firebase.google.com, crie seus vários ambientes (por exemplo, dev, staging, prod)
mysite-dev
mysite-staging
mysite-prod
Passo 2
uma. Vá para o diretamente que você deseja que seja o padrão (por exemplo, dev)
b. Corre
firebase deploy
c. Depois de implantado, execute
firebase use --add
d. Uma opção será exibida para selecionar os diferentes projetos que você possui atualmente.
Role até o projeto que você deseja adicionar: teste do meu site e selecione-o.
e Você será solicitado a fornecer um alias para esse projeto. Digite o teste .
Execute os itens ae novamente para prod e dev, para que cada ambiente tenha um alias
Saiba em que ambiente você está
Corre
firebase use
default (mysite-dev)
* dev (mysite-dev)
staging (mysite-staging)
prod (mysite-dev)
(um dos ambientes terá um asterisco à esquerda. Esse é o local em que você está atualmente. Também será destacado em azul)
Alternar entre ambientes
Corra
firebase use staging
oufirebase use prod
para se mover entre eles.Quando estiver no ambiente desejado, execute
firebase deploy
e seu projeto será implantado lá.Aqui estão alguns links úteis ...
Referência da CLI
Implementando em vários ambientes
Espero que isto ajude.
fonte
A maneira como fazemos isso é criando diferentes arquivos de chave json para diferentes ambientes. Usamos o recurso de conta de serviço conforme recomendado pelo Google e temos um arquivo de desenvolvimento e outro para produção
fonte
Crie o projeto Tow com o Dev e o Production Environment na base do firebase Faça o download do arquivo json em thre
e configure o SDK conforme: https://firebase.google.com/docs/android/setup Ou para o Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?platform=android
Primeiro, coloque o respectivo google_services.json para cada buildType nos seguintes locais:
Nota: Aplicativo raiz / google_services.json Esse arquivo deve estar lá de acordo com as variantes de construção, copie o código json no arquivo json raiz
Agora, vamos preparar algumas tarefas gradle no build.gradle do seu aplicativo: para automatizar a movimentação do google_services.json apropriado para app / google_services.json
copie isso no arquivo app / Gradle
Ótimo - mas ter que executar manualmente essas tarefas antes de criar seu aplicativo é complicado. Queremos que a tarefa de cópia apropriada acima seja executada algum tempo antes: assembleDebug ou: assembleRelease for executado. Vamos ver o que acontece quando: assembleRelease é executado: copie este no arquivo / gradlew
Observe a tarefa: app: processReleaseGoogleServices. Esta tarefa é responsável pelo processamento do arquivo raiz google_services.json. Queremos que o google_services.json correto seja processado, portanto, devemos executar nossa tarefa de cópia imediatamente antes. Adicione isso ao seu build.gradle. Observe o anexo afterEvaluate.
copie isso no arquivo app / Gradle
Agora, a qualquer momento: app: processReleaseGoogleServices é chamado, nosso recém-definido: app: switchToRelease será chamado com antecedência. A mesma lógica para o debug buildType. Você pode executar: app: assembleRelease e a versão de lançamento google_services.json serão automaticamente copiados para a pasta raiz do seu módulo de aplicativo.
fonte
google-services.json
arquivo para a pasta raiz, se o mantiver em a pasta de sabor que está perfeitamente bem. Em vez disso,assembleRelease
você pode simplesmente invocar umaassembleTestRelease
tarefa.