J'envisage d'utiliser Firebase comme MBaaS, mais je n'ai pas trouvé de solution fiable au problème suivant:
Je voudrais configurer deux environnements Firebase séparés, un pour le développement et un pour la production, mais je ne veux pas faire de copie manuelle des fonctionnalités (par exemple, configuration de la configuration à distance, règles de notification, etc.) entre l'environnement de développement et de production .
Existe-t-il un outil ou une méthode sur lequel je peux compter? La configuration à distance de règles de configuration ou de notification à partir de zéro peut être une tâche ardue et trop risquée.
Aucune suggestion? Y a-t-il une meilleure approche que d'avoir deux environnements séparés?
Avant de poster une autre réponse à la question qui explique comment configurer des comptes Firebase séparés: ce n'est pas la question, relisez-la. La question est: comment TRANSFÉRER les modifications entre des comptes de développement et de production séparés ou toute meilleure solution que de copier manuellement entre eux.
Réponses:
Comme tout le monde l'a souligné, vous avez besoin de plus d'un projet / base de données.
Mais pour répondre à votre question concernant la nécessité de pouvoir copier les paramètres / données, etc. du développement à la production. J'avais exactement le même besoin. Quelques mois de développement et de test, je ne voulais pas copier manuellement les données.
Mon résultat était de sauvegarder les données dans un compartiment de stockage, puis de les restaurer à partir de là dans l'autre base de données. C'est une façon assez grossière de le faire - et j'ai fait une sauvegarde / restauration complète de la base de données - mais vous pourrez peut-être regarder dans cette direction pour une manière plus contrôlée. Je ne l'ai pas utilisé - c'est très nouveau - mais cela pourrait être une solution: Module NPM firestore-export-import
Edit : Firestore backup / export / import info here Cloud Firestore Exporting and Importing Data
Si vous utilisez Firebase RTDB et non Firestore, cette documentation peut vous aider: Firebase Automated Backups
Vous devrez définir correctement les autorisations pour permettre à votre base de données de production d'accéder au même compartiment de stockage que votre développement. Bonne chance.
la source
Si vous utilisez firebase-tools, il existe une commande
firebase use
qui vous permet de définir le projet que vous utilisez pourfirebase deploy
firebase use --add
fera apparaître une liste de vos projets, sélectionnez-en un et il vous demandera un alias. De là, vous pouvezfirebase use alias
etfirebase deploy
pousserez vers ce projet.Dans mon utilisation personnelle, j'ai my-app et my-app-dev en tant que projets dans la console Firebase.
la source
Je n'utilise pas Firebase actuellement, mais je le considère comme vous. On dirait que la solution consiste à créer un projet complètement séparé sur la console. Il y avait un article de blog recommandant cela sur l'ancien site Firebase, qui semble être supprimé maintenant. https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html
Aussi cette discussion recommandant la même chose: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ
la source
La façon dont je l'ai fait:
De cette façon, je ne suis pas obligé de maintenir mes JSON.
la source
Cet article de blog décrit une approche très simple avec un type de version de débogage et de publication.
En un mot:
=> voir le blog pour une description détaillée.
Si vous souhaitez utiliser différentes saveurs de build, lisez ce blog complet sur le blog officiel de firebase. Il contient de nombreuses informations précieuses.
J'espère que cela pourra aider!
la source
Vous devrez gérer différents types de build
Suivez ceci
Tout d'abord, créez un nouveau projet sur la console Firebase, nommez l'id comme YOURAPPNAME-DEV
Cliquez sur le bouton "Ajouter une application Android" et créez une nouvelle application. Nommez-le com.yourapp.debug, par exemple. Le nouveau fichier google-services.json sera téléchargé automatiquement
Dans le répertoire src de votre projet, créez un nouveau répertoire avec le nom "debug" et copiez le nouveau fichier google-services.json ici
Dans votre module build.gradle, ajoutez ceci
Maintenant, lorsque vous construisez une compilation de débogage, google-services.json à partir du dossier "debug" sera utilisé et lorsque vous construirez en mode version, google-services.json à partir du répertoire racine du module sera pris en compte.
la source
src
for the buildType comme expliqué ici developer.google.com/android/guides/...Pour résoudre ce problème dans ma situation, j'ai créé trois projets Firebase, chacun avec le même projet Android (c'est-à-dire le même
applicationId
sans utiliser lesapplicationIdSuffix
suggestions des autres). Cela a abouti à trois fichiers google-services.json que j'ai stockés sur mon serveur d'intégration continue (CI) en tant que variables d'environnement personnalisées . Pour chaque étape de la construction (dev / staging / prod), j'ai utilisé le fichier google-services.json correspondant.Pour le projet Firebase associé à dev, dans son projet Android, j'ai ajouté l'empreinte du certificat de débogage SHA. Mais pour la préparation et la production, je demande simplement à CI de signer l'APK.
Voici un dépouillé
.gitlab-ci.yml
qui a fonctionné pour cette configuration:Je suis satisfait de cette solution car elle ne repose pas sur des astuces build.gradle que je trouve trop opaques et donc difficiles à maintenir. Par exemple, lorsque j'ai essayé les approches utilisant
applicationIdSuffix
et différentsbuildType
s, j'ai constaté que je ne pouvais pas exécuter de tests instrumentés ni même compiler lorsque j'essayais de changer de type de construction en utilisanttestBuildType
. Android semblait donner des propriétés spéciales audebug
buildType
que je ne pouvais pas inspecter pour comprendre.Pratiquement, les scrips CI sont assez transparents et faciles à maintenir, d'après mon expérience. En effet, l'approche que j'ai décrite a fonctionné: lorsque j'ai exécuté chacun des APK générés par CI sur un émulateur, l'étape «Exécutez votre application pour vérifier l'installation» de la console Firebase est passée de
à:
pour les trois applications lorsque je les ai démarrées une par une dans un émulateur.
la source
Firebase a une page à ce sujet qui explique comment le configurer pour le développement et la production
https://firebase.google.com/docs/functions/config-env
la source
Je mets à jour cette réponse en fonction des informations que je viens de trouver.
Étape 1
Dans firebase.google.com, créez vos multiples environnements (par exemple, dev, staging, prod)
mysite-dev
mise en scène de mysite
mysite-prod
Étape 2
une. Déplacez-vous directement vers celui que vous voulez être votre valeur par défaut (c.-à-d. Dev)
b. Courir
firebase deploy
c. Une fois déployé, exécutez
firebase use --add
ré. Une option apparaîtra pour sélectionner parmi les différents projets que vous avez actuellement.
Faites défiler jusqu'au projet que vous souhaitez ajouter: mysite-staging , et sélectionnez-le.
e. Il vous sera alors demandé un alias pour ce projet. Entrez la mise en scène .
Exécutez à nouveau les éléments ae pour prod et dev, afin que chaque environnement ait un alias
Sachez dans quel environnement vous vous trouvez
Courir
firebase use
default (mysite-dev)
* dev (mysite-dev)
staging (mysite-staging)
prod (mysite-dev)
(l'un des environnements aura un astérisque à gauche. C'est celui dans lequel vous vous trouvez actuellement. Il sera également surligné en bleu)
Basculer entre les environnements
Courez
firebase use staging
oufirebase use prod
pour vous déplacer entre eux.Une fois que vous êtes dans l'environnement souhaité, exécutez
firebase deploy
et votre projet y sera déployé.Voici quelques liens utiles ...
Référence CLI
Déploiement dans plusieurs environnements
J'espère que cela t'aides.
la source
La façon dont nous le faisons est de créer différents fichiers de clé json pour différents environnements. Nous avons utilisé la fonctionnalité de compte de service comme recommandé par Google et avons un fichier de développement et un autre pour la production
la source
Créez le projet Tow avec l'environnement de développement et de production sur la base de feu Téléchargez le fichier json à partir de trois
et configurez le SDK selon: https://firebase.google.com/docs/android/setup Ou pour Crashlytics: https://firebase.google.com/docs/crashlytics/get-started?platform=android
Tout d'abord, placez le google_services.json respectif pour chaque buildType aux emplacements suivants:
Remarque: Root app / google_services.json Ce fichier devrait être là selon les variantes de construction copiez le code json dans le fichier json racine
Maintenant, passons en revue certaines tâches de gradle dans votre: app's build.gradle pour automatiser le déplacement du google_services.json approprié vers app / google_services.json
copiez-le dans le fichier app / Gradle
Excellent - mais il est fastidieux de devoir exécuter manuellement ces tâches avant de créer votre application. Nous voudrions que la tâche de copie appropriée ci-dessus soit exécutée quelque temps avant: assembleDebug ou: assembleRelease est exécuté. Voyons ce qui se passe lorsque: assembleRelease est exécuté: copiez celui-ci dans le fichier / gradlew
Notez la tâche: app: processReleaseGoogleServices. Cette tâche est responsable du traitement du fichier racine google_services.json. Nous voulons que le google_services.json correct soit traité, nous devons donc exécuter notre tâche de copie immédiatement avant. Ajoutez ceci à votre build.gradle. Notez l'afterEvaluate englobant.
copiez-le dans le fichier app / Gradle
Désormais, à tout moment: app: processReleaseGoogleServices est appelé, notre nouveau: app: switchToRelease sera appelé au préalable. Même logique pour le buildType de débogage. Vous pouvez exécuter: app: assembleRelease et la version de sortie google_services.json sera automatiquement copiée dans le dossier racine de votre module d'application.
la source
google-services.json
fichier dans le dossier racine, si vous le gardez dans le dossier de saveur qui est parfaitement bien. Au lieu de cela,assembleRelease
vous pouvez simplement appeler uneassembleTestRelease
tâche.