Ich denke darüber nach, Firebase als MBaaS zu verwenden, konnte jedoch keine zuverlässige Lösung für das folgende Problem finden:
Ich möchte zwei separate Firebase-Umgebungen einrichten, eine für die Entwicklung und eine für die Produktion, aber ich möchte keine manuelle Kopie von Funktionen (z. B. Remote-Konfigurations-Setup, Benachrichtigungsregeln usw.) zwischen der Entwicklungs- und Produktionsumgebung erstellen .
Gibt es ein Werkzeug oder eine Methode, auf die ich mich verlassen kann? Das Einrichten von Remote-Konfigurations- oder Benachrichtigungsregeln von Grund auf kann eine entmutigende Aufgabe sein und zu riskant.
Irgendwelche Vorschläge? Gibt es einen besseren Ansatz als zwei separate Umgebungen?
Bevor Sie eine weitere Antwort auf die Frage veröffentlichen, in der erläutert wird, wie separate Firebase-Konten eingerichtet werden: Dies ist nicht die Frage. Lesen Sie sie erneut. Die Frage ist: Wie werden Änderungen zwischen separaten Entwicklungs- und Produktkonten übertragen oder eine bessere Lösung als das manuelle Kopieren zwischen diesen Konten?
Antworten:
Wie jeder betont hat, benötigen Sie mehr als ein Projekt / eine Datenbank.
Um Ihre Frage zu beantworten, ob Einstellungen / Daten usw. von der Entwicklung in die Produktion kopiert werden müssen. Ich hatte genau das gleiche Bedürfnis. Einige Monate in Entwicklung und Test wollte ich die Daten nicht manuell kopieren.
Mein Ergebnis war, die Daten in einem Speicherbereich zu sichern und von dort aus in der anderen Datenbank wiederherzustellen. Es ist ein ziemlich grober Weg, dies zu tun - und ich habe eine ganze Datenbank gesichert / wiederhergestellt -, aber Sie können möglicherweise in diese Richtung nach einem kontrollierten Weg suchen. Ich habe es nicht benutzt - es ist sehr neu - aber dies könnte eine Lösung sein: NPM-Modul Firestore-Export-Import
Bearbeiten : Firestore Backup / Export / Import Informationen hier Cloud Firestore Exportieren und Importieren von Daten
Wenn Sie Firebase RTDB und nicht Firestore verwenden, kann diese Dokumentation hilfreich sein: Firebase Automated Backups
Sie müssen die Berechtigungen korrekt festlegen, damit Ihre Produktionsdatenbank auf denselben Speicherbereich wie Ihre Entwicklung zugreifen kann. Viel Glück.
quelle
Wenn Sie Firebase-Tools verwenden, gibt es einen Befehl, mit
firebase use
dem Sie festlegen können, für welches Projekt Sie verwendenfirebase deploy
firebase use --add
Es wird eine Liste Ihrer Projekte angezeigt. Wählen Sie eines aus und Sie werden nach einem Alias gefragt. Von dort aus könnenfirebase use alias
undfirebase deploy
werden Sie zu diesem Projekt pushen.In meinem persönlichen Gebrauch habe ich meine App und meinen App-Entwickler als Projekte in der Firebase-Konsole.
quelle
Ich benutze derzeit keine Firebase, aber ich betrachte es als Sie. Es sieht so aus, als ob Sie ein völlig separates Projekt auf der Konsole erstellen müssen. Es gab einen Blogpost, der dies auf der alten Firebase-Site empfahl, der jedoch jetzt entfernt werden soll. https://web.archive.org/web/20160310115701/https://www.firebase.com/blog/2015-10-29-managing-development-environments.html
Auch diese Diskussion empfiehlt dasselbe: https://groups.google.com/forum/#!msg/firebase-talk/L7ajIJoHPcA/7dsNUTDlyRYJ
quelle
So wie ich es gemacht habe:
Auf diese Weise muss ich meine JSONs nicht warten.
quelle
Dieser Blogpost beschreibt einen sehr einfachen Ansatz mit einem Debug- und Release-Build-Typ.
In einer Nussschale:
=> Eine ausführliche Beschreibung finden Sie im Blogpost.
Wenn Sie verschiedene Build-Varianten verwenden möchten, lesen Sie diesen umfangreichen Blogpost aus dem offiziellen Firebase-Blog. Es enthält viele wertvolle Informationen.
Hoffentlich hilft das!
quelle
Sie müssen verschiedene Build-Typen verwalten
Folge dies
Erstellen Sie zunächst ein neues Projekt in der Firebase-Konsole und nennen Sie die ID YOURAPPNAME-DEV
Klicken Sie auf "Android App hinzufügen" und erstellen Sie eine neue App. Nennen Sie es zum Beispiel com.yourapp.debug. Die neue Datei google-services.json wird automatisch heruntergeladen
Erstellen Sie unter Ihrem Projekt-src-Verzeichnis ein neues Verzeichnis mit dem Namen "debug" und kopieren Sie hier die neue Datei google-services.json
Fügen Sie dies in Ihrer Modulebene build.gradle hinzu
Wenn Sie jetzt ein Debug-Build erstellen, wird google-services.json aus dem Ordner "debug" verwendet, und wenn Sie im Release-Modus erstellen, wird google-services.json aus dem Modulstammverzeichnis berücksichtigt.
quelle
src
für den buildType nach google-services.json suchen, wie hier erläutert. Developers.google.com/android/guides/…Um dies für meine Situation zu lösen, habe ich drei Firebase-Projekte mit jeweils demselben Android-Projekt erstellt (dh
applicationId
ohne dieapplicationIdSuffix
von anderen vorgeschlagenen). Dies führte zu drei google-services.json-Dateien, die ich als benutzerdefinierte Umgebungsvariablen auf meinem CI-Server (Continuous Integration) gespeichert habe . Für jede Phase des Builds (dev / staging / prod) habe ich die entsprechende Datei google-services.json verwendet.Für das mit dev verknüpfte Firebase-Projekt habe ich in seinem Android-Projekt den Fingerabdruck des Debug-SHA-Zertifikats hinzugefügt. Aber für Inszenierung und Prod habe ich nur CI die APK unterschreiben lassen.
Hier ist eine abgespeckte Version
.gitlab-ci.yml
, die für dieses Setup funktioniert hat:Ich bin mit dieser Lösung zufrieden, da sie nicht auf build.gradle-Tricks beruht, die meiner Meinung nach zu undurchsichtig und daher schwer zu warten sind. Als ich zum Beispiel die Ansätze mit
applicationIdSuffix
und mit verschiedenenbuildType
s ausprobierte, stellte ich fest, dass ich keine instrumentierten Tests ausführen oder sogar kompilieren konnte, als ich versuchte, Build-Typen mit zu wechselntestBuildType
. Android schien den Eigenschaften besondere Eigenschaften zu verleihen,debug
buildType
die ich nicht überprüfen konnte, um sie zu verstehen.Nach meiner Erfahrung sind CI-Skripte jedoch ziemlich transparent und leicht zu warten. In der Tat hat der von mir beschriebene Ansatz funktioniert: Als ich alle von CI generierten APKs auf einem Emulator ausgeführt habe, wurde der Schritt "Führen Sie Ihre App aus, um die Installation zu überprüfen" der Firebase-Konsole ausgeführt
zu:
für alle drei Apps, wie ich sie einzeln in einem Emulator gestartet habe.
quelle
Firebase hat eine Seite dazu, auf der beschrieben wird, wie man es für Entwickler und Produkte einrichtet
https://firebase.google.com/docs/functions/config-env
quelle
Ich aktualisiere diese Antwort basierend auf Informationen, die ich gerade gefunden habe.
Schritt 1
Erstellen Sie in firebase.google.com mehrere Umgebungen (z. B. dev, staging, prod).
mysite-dev
Mysite-Inszenierung
Mysite-Prod
Schritt 2
ein. Gehen Sie zu dem Standard, den Sie als Standard festlegen möchten (z. B. dev).
b. Lauf
firebase deploy
c. Nach der Bereitstellung ausführen
firebase use --add
d. Es wird eine Option angezeigt, mit der Sie aus den verschiedenen Projekten auswählen können, die Sie derzeit haben.
Scrollen Sie zu dem Projekt, das Sie hinzufügen möchten: mysite-staging , und wählen Sie es aus.
e. Sie werden dann nach einem Alias für dieses Projekt gefragt. Geben Sie Staging .
Führen Sie die Elemente ae erneut für prod und dev aus, damit jede Umgebung einen Alias hat
Wissen Sie, in welcher Umgebung Sie sich befinden
Lauf
firebase use
default (mysite-dev)
* dev (mysite-dev)
staging (mysite-staging)
prod (mysite-dev)
(In einer der Umgebungen befindet sich links davon ein Sternchen. Dies ist das Sternchen, in dem Sie sich gerade befinden. Es wird auch blau hervorgehoben.)
Wechseln Sie zwischen Umgebungen
Laufen Sie
firebase use staging
oderfirebase use prod
bewegen Sie sich zwischen ihnen.Sobald Sie sich in der gewünschten Umgebung befinden, führen Sie sie aus
firebase deploy
und Ihr Projekt wird dort bereitgestellt.Hier sind ein paar hilfreiche Links ...
CLI-Referenz
Bereitstellung in mehreren Umgebungen
Hoffe das hilft.
quelle
Die Art und Weise, wie wir dies tun, besteht darin, verschiedene JSON-Schlüsseldateien für verschiedene Umgebungen zu erstellen. Wir haben die von Google empfohlene Funktion für Dienstkonten verwendet und haben eine Entwicklungsdatei und eine andere für die Produktion
quelle
Erstellen Sie das Tow-Projekt mit Dev und Produktionsumgebung auf der Firebase. Laden Sie die JSON-Datei von thre herunter
und richten Sie das SDK gemäß https://firebase.google.com/docs/android/setup oder für Crashlytics ein: https://firebase.google.com/docs/crashlytics/get-started?platform=android
Platzieren Sie zunächst die entsprechende Datei google_services.json für jeden buildType an den folgenden Speicherorten:
Hinweis: Root-App / google_services.json Diese Datei sollte gemäß den Build-Varianten vorhanden sein. Kopieren Sie den JSON-Code in die Root-JSON-Datei
Lassen Sie uns nun einige Gradle-Aufgaben in build.gradle Ihrer App ausführen, um das Verschieben der entsprechenden Datei google_services.json nach app / google_services.json zu automatisieren
Kopieren Sie dies in die App / Gradle-Datei
Großartig - aber diese Aufgaben manuell ausführen zu müssen, bevor Sie Ihre App erstellen, ist umständlich. Wir möchten, dass die oben genannte Kopieraufgabe irgendwann ausgeführt wird: assembleDebug oder: assembleRelease wird ausgeführt. Mal sehen, was passiert, wenn: assembleRelease ausgeführt wird: Kopieren Sie dieses in die Datei / gradlew
Beachten Sie die Aufgabe: app: processReleaseGoogleServices. Diese Aufgabe ist für die Verarbeitung der Stammdatei google_services.json verantwortlich. Wir möchten, dass die korrekte Datei google_services.json verarbeitet wird, daher müssen wir unsere Kopieraufgabe sofort im Voraus ausführen. Fügen Sie dies Ihrem build.gradle hinzu. Beachten Sie das AfterEvaluate-Gehäuse.
Kopieren Sie dies in die App / Gradle-Datei
Jetzt wird jederzeit aufgerufen: app: processReleaseGoogleServices, unsere neu definierte: app: switchToRelease wird vorher aufgerufen. Gleiche Logik für das Debuggen von buildType. Sie können Folgendes ausführen: app: assembleRelease und die Release-Version google_services.json werden automatisch in den Stammordner Ihres App-Moduls kopiert.
quelle
google-services.json
Datei nicht in den Stammordner kopieren , wenn Sie sie behalten der Geschmacksordner, der vollkommen in Ordnung ist. Stattdessen könnenassembleRelease
Sie einfach eineassembleTestRelease
Aufgabe aufrufen .