google-services.json für verschiedene ProdukteFlavors
Ich bin mit der Implementierung der neuen Google-Cloud-Messaging nach den Anleitungen aus dem Google-Entwickler-Seite hier
Habe ich erfolgreich ausführen und testen Sie es. Aber mein problem ist jetzt ich habe verschiedene productFlavors mit verschiedenen applicationId/packageName und verschiedene GCM-Projekt-Id. Die google-services.json
haben im /app/google-services.json
nicht die Aromen Ordner.
Gibt es eine Möglichkeit, um die google-services.json
config für viele verschiedene Geschmacksrichtungen?
InformationsquelleAutor der Frage gentra | 2015-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Google die Unterstützung für Varianten in version 2.0 des play-Dienste-plugin. Da diese version des
gradle plugin com.google.gms:google-services:2.0.0-alpha3
können Sie dies tun,
Version 3.0.0 des plugins sucht für die json-Datei in diesen Orten (wenn man bedenkt Sie haben eine
flavor
flavor1 und einen build gebendebug
):Dieser arbeitete für mich, auch mit flavorDimensions. Ich habe free & bezahlt in einer dimension und Mock & Prod in der anderen dimension. Ich habe auch 3 buildTypes: debug, release und Inszenierung. So sieht es in meinem Projekt für die FreeProd Geschmack:
Wie viele google-Dienste.json-Dateien ist abhängig von Ihrem Projekt, von dessen Eigenschaften, aber Sie müssen mindestens eine json-Datei, die für jedes Projekt von Google.
Wenn Sie wollen mehr details über das, was das plugin macht mit dieser json-Dateien, hier ist es:
https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720
Link zu den offiziellen docs:
https://developers.google.com/android/guides/google-services-plugin
Blog-post mit einem aktualisierten info: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
Und gehen Sie hier um zu überprüfen, die neueste version von dieses plugin: https://bintray.com/android/android-tools/com.google.gms.google-services/view
InformationsquelleAutor der Antwort Yair Kukielka
UPDATE: Die folgende Erklärung ist für ein Android-Studio-Projekt, mit einer FB-Projekt und verschiedene FB Apps im inneren, dass Projekt.
Wenn das Ziel ist, die verschiedenen JSON-Dateien für verschiedene FB Apps in verschiedenen FB-Projekte innerhalb der gleichen Android Studio Projekt (oder wenn Sie nicht wissen, was der Unterschied ist) schauen Sie hier..
Müssen Sie eine FB-App per Android-Anwendungs-ID (in der Regel der Namen des Pakets). Üblich ist, ein Anwendungs-ID, die pro Gradle build-Variante (Das ist natürlich wahrscheinlich, wenn Sie mit Gradle build-Typen und Gradle build Aromen)
Als der Google Services 3.0 und mit FB es ist nicht notwendig, um verschiedene Dateien für verschiedene Geschmacksrichtungen. Erstellen unterschiedliche Dateien für die verschiedenen Aromen werden nicht klar oder einfach im Falle Sie haben productFlavours und Build-Typen bilden mit einander.
In der gleichen Datei Sie haben alle Konfigurationen, die Sie benötigen für alle Ihre build-Typen und Aromen.
In der FB-Konsole müssen Sie eine app pro Paket-Namen. Stell dir vor, du hast 2 Aromen (dev und live) und 2 build-Typen (debug und release). Je nach config, aber es ist wahrscheinlich, dass Sie haben 4 verschiedene Paket-Namen wie:
Müssen Sie 4 verschiedene Android-Apps in der FB-Konsole. (An jeden, den Sie hinzufügen müssen, um den SHA-1 für debug und live für jeden computer, den Sie verwenden)
Herunterladen, wenn Sie die google-Dienste.json-Datei, eigentlich ist es nicht eigentlich egal, von was app, die Sie herunterladen, die alle von Ihnen enthalten die gleichen Informationen in Bezug auf alle Ihre apps.
Nun müssen Sie suchen Sie diese Datei im app-Ebene (app/).
Wenn Sie die Datei öffnen sehen Sie, dass, wenn alle Informationen enthält, die für alle, die Ihr Paket Namen.
Einen Schmerz Punkt verwenden, um das plugin. Um es zu bekommen arbeiten müssen Sie suchen Sie das plugin an der Unterseite der Datei. Damit diese Zeile..
...muss auf der Unterseite Ihrer app erstellen.gradle-Datei.
Für die meisten hier gesagt, es gilt auch für früheren Versionen als gut. Ich hatte noch nie unterschiedliche Dateien für die verschiedenen configs, aber jetzt mit der FB-Konsole ist einfacher, weil Sie eine Datei mit alles, was Sie für Sie alle configs.
InformationsquelleAutor der Antwort Sotti
Schrieb Medium post auf dieses Problem.
Hatte ein ähnliches problem (mit BuildTypes statt Geschmacksrichtungen), und fixiert es so auf.
Nehmen Vorteil von Gradle der Abhängigkeits-management-system. Ich habe zwei Aufgaben,
switchToDebug
undswitchToRelease
. Verlangen, dass jeder ZeitassembleRelease
ausgeführt, dassswitchToRelease
auch laufen. Gleiche für debug.EDIT: verwenden
processDebugFlavorGoogleServices
/processReleaseFlavorGoogleServices
Aufgabe, es zu ändern, auf einer pro-Geschmack Ebene.InformationsquelleAutor der Antwort ZakTaccardi
Nun habe ich das gleiche problem und konnte nicht die perfekte Lösung. Es ist nur ein workaround.
Ich Frage mich, wie Google nicht darüber nachdenken Aromen...? Und ich hoffe, Sie schlagen bald eine bessere Lösung.
Bin, was ich Tue:
Habe ich zwei Aromen, die in jedem stecke ich die entsprechenden google-Dienste.json :
src/flavor1/google-services.json
undsrc/flavor2/google-services.json
.Dann in gradle build kopiere ich die Datei je nach Geschmack der
app/
Verzeichnis:Einschränkung: müssen Sie ändern
myFlavor
manuell in gradle jedes mal, wenn Sie ausführen möchten, für einen anderen Geschmack (weil es hardcoded).Ich habe versucht, viele Möglichkeiten, um den aktuellen build Geschmack wie
afterEvaluate
schließen... konnte nicht eine bessere Lösung bis jetzt.Update eine Andere Lösung: eine google-Dienste.json für alle Geschmacksrichtungen:
Können Sie auch unterschiedliche Paketnamen, die für jede Geschmacksrichtung und dann in der google Entwickler-Konsole Sie nicht haben, erstellen Sie zwei verschiedene apps für jeden Geschmack, aber nur zwei verschiedene clients, der in der gleichen app.
Dann müssen Sie nur eine
google-services.json
enthält sowohl Ihre Kunden.Natürlich hängt dies davon ab, wie Sie implementieren backend Ihrer Aromen. Wenn Sie nicht getrennt, dann ist diese Lösung wird dir nicht helfen.
InformationsquelleAutor der Antwort ahmed_khan_89
Laut ahmed_khan_89's Antwort, die Sie setzen können Sie die "code kopieren" inside Produkt Aromen.
Dann müssen Sie nicht wechseln, die Einstellungen manuell.
InformationsquelleAutor der Antwort Kros C.S. Huang
google-Dienste.json-Datei ist unnötig, um Benachrichtigungen zu erhalten. Fügen Sie einfach eine variable für jeden Geschmack in deinem build.gradle-Datei:
Verwenden Sie diese variable, BuildConfig.GCM_SENDER_ID statt getString(R. string.gcm_defaultSenderId) bei der Anmeldung:
InformationsquelleAutor der Antwort divonas
Ich bin mit den google-services.json-Datei, erstellt aus hier: https://developers.google.com/mobile/add?platform=android&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging%2Fandroid%2Fclient&cntlbl=Continue%20Adding%20GCM%20Support&%3Fconfigured%3Dtrue
In der JSON-Struktur dort ist ein JSON-array mit der Bezeichnung clients. Wenn Sie mehrere Geschmacksrichtungen, fügen Sie einfach die verschiedenen Eigenschaften hier.
In meinem Projekt bin ich mit der gleichen Projekt-id und wenn ich hinzufüge, das zweite Paket-Namen in der obigen url die google liefert mir eine Datei mit mehreren clients in der json-Daten.
Sorry für das kompakte JSON-Daten. Ich konnte es nicht richtig formatiert...
InformationsquelleAutor der Antwort Mark Martinsson
Haben wir eine unterschiedliche Paketnamen für debug-builds (*.debug), so wollte ich etwas, das funktioniert, basierend auf Geschmack und buildType, ohne zu schreiben, alles Geschmack-mit in das Muster der
processDebugFlavorGoogleServices
.Ich einen Ordner erstellt mit dem Namen "google-Dienste" in jedem Geschmack, enthält sowohl die debug-version und die version der json-Datei :
In der buildTypes Abschnitt Ihrer gradle-Datei, fügen Sie diese :
Wird, kopiert das Recht json-Datei im Stammordner des app-Modul automatisch, wenn Sie schalten Sie den build-Variante.
Fügen Sie die beiden Methoden aufgerufen, um den aktuellen Geschmack und den aktuellen build geben Sie an der root-build.gradle
Ist es, Sie nicht haben, um sorgen über das entfernen/hinzufügen/ändern von Aromen aus Ihren gradle-Datei, und Sie erhalten die debug-oder release-google-Dienste.json automatisch.
InformationsquelleAutor der Antwort FallasB
FB unterstützt nun mehrere App-ids mit einem google-Dienste.json-Datei.
In diesem blog-post beschreibt es im detail.
Erstellen Sie ein übergeordnetes Projekt in Feuerstellung, dass Sie verwenden Sie für alle Ihre Varianten. Dann erstellen Sie separate Android-Anwendungen in FB unter das Projekt für jede Anwendungs-id, die Sie haben.
Wenn Sie erstellt alle Ihre Varianten, die Sie herunterladen können, eine google-Dienste.json unterstützt alle Ihre Anwendungen ids. Wenn es relevant ist, um die Daten separat (d.h. Crash-Reporting) können Sie Umschalten, dass mit einem dropdown.
InformationsquelleAutor der Antwort bMcNees
Basierend auf @ZakTaccardi Antwort, und vorausgesetzt, dass Sie nicht möchten, dass ein einziges Projekt für beide Geschmacksrichtungen, fügen Sie diese am Ende Ihrer
build.gradle
Datei:Müssen Sie die Dateien
src/staging/google-services.json
undsrc/production/google-services.json
. Ersetzen Sie die Aroma-Namen für diejenigen, die Sie verwenden.InformationsquelleAutor der Antwort bryant1410
Habe ich festgestellt, dass die google-Dienste plugin ist ziemlich nutzlos für Projekte, die Sie hinzufügen möchten GCM. Es erzeugt nur die folgende Datei fügt einfach Ihre Projekt-ID als string-Ressource:
Es scheint, dass Sie nur benötigen Sie, wenn Sie kopiert den sample code von verbatim direkt von der Cloud Messaging für Android guide. Hier ist die Beispiel-Zeile:
Lösung
Wenn Sie wollen in der Lage sein zu wechseln API-Projekte für die verschiedenen build-Typen oder Produkt-Aromen können Sie einfach definieren Sie Ihre eigenen Konstanten und wählen Sie die entsprechende man beim aufrufen der
getToken()
API.Für Produkt-Aromen
Der obige code funktioniert für das Umschalten zwischen debug und release builds. Für die Produktentwicklung Aromen definieren Sie verschiedene API-Schlüssel in einer java-Quellcode-Datei und legen Sie die Dateien in den entsprechenden Produkt-Geschmack-Verzeichnis. Referenz: Gradle Build-Varianten
InformationsquelleAutor der Antwort kjones
Keine Notwendigkeit für eine zusätzliche gradle-Skripten.
Google begonnen, hinzufügen von verschiedenen Paket-Namen, im Namen von 'android_client_info'. Es sieht aus wie unten in der google-services.json
so, folgende Schritte sind genug, um verschiedene google-services.json-Auswahl.
Dass ist es!!..
InformationsquelleAutor der Antwort Rames Palanisamy
1.) Was macht google-Dienste.json wirklich tun?
Folgen : https://stackoverflow.com/a/31598587/2382964
2.) Wie funktioniert google-Dienste.json-Datei wirkt sich auf Ihr android-studio-Projekt?
Folgen : https://stackoverflow.com/a/33083898/2382964
nur kurz für die zweite url, wenn Sie fügen Sie google-services.json in Ihrem Projekt, es muss eine automatisch generierte
google-services
Ordner fürdebug
Variante in diesem Pfad3.) Was zu tun ist, um es getan?
fügen Sie google-services in Abhängigkeit
project_level
bauen.gradle, können Sie auchversion 3.0.0
wenn Sie app_compact Bibliothek.nun in
app_level
bauen.gradle, müssen Sie an der Unterseite.4.) Wo man google-service.json-Datei in Ihrer Struktur.
Fall 1.) wenn Sie keine build_flavor setzen Sie ihn einfach im inneren
/app/google-service.json
Ordner.Fall 2.) wenn Sie mehrere build_flavor und Sie haben verschiedene-verschiedene google_services.json-Dateien in
app/src/build_flavor/google-service.json
.Fall 3.) wenn Sie mehrere build_flavor und Sie haben eine einzige google_services.json Datei in
app/google-service.json
.InformationsquelleAutor der Antwort Tushar Pandey
Dem Punkt, der die google-Dienste-plugin vereinfacht die integration der Google-Funktionen.
Da es nur eine android-Ressourcen aus der google-Dienste.json-Datei, über-kompliziert gradle-Logik negiert diesen Punkt, denke ich.
So, wenn die Google-docs nicht sagen, welche Ressourcen erforderlich sind für spezielle Google-Funktionen, würde ich vorschlagen generieren Sie die JSON-Datei für jede relevante buildtype/Geschmack, sehen, welche Ressourcen generiert das plugin und dann die Ressourcen manuell in Ihre jeweiligen src/buildtypeORflavor/res Verzeichnisse.
Löschen Sie die Verweise zu den google-Dienste-plugin und die JSON-Datei nach, und Sie fertig sind.
Detaillierte Informationen über das Innenleben des google-services-gradle-plugin-siehe meine andere Antwort:
https://stackoverflow.com/a/33083898/433421
InformationsquelleAutor der Antwort arne.jans
Vereinfachen, was @Scotti gesagt haben. Sie müssen erstellen ein Vielfaches apps mit verschiedenen Paket-name für ein bestimmtes Projekt je nach Produkt Geschmack.
Angenommen, Ihr Projekt ABC, mit verschiedenen Produkt-Aromen, X,Y, wo X ein Paket namens com.x und Y hat ein Paket namens com.y dann in der FB-Konsole, die Sie benötigen, um ein Projekt ABC, in dem Sie brauchen, um zu erstellen, 2 apps mit dem package Namen com.x und com.y. Dann müssen Sie zum download der google-Dienste.json-Datei, in der es 2 Mandanten-info-Objekte, die enthalten diese pacakges und Sie werden gut zu gehen.
Ausschnitt aus der json wäre sowas
InformationsquelleAutor der Antwort Sagar Devanga
Haben Sie viele Geschmack, also es bedeuten, dass Sie haben vielen Unterschied-Paket-id, richtig? Also, gehen Sie einfach zu der Seite, wo Sie einrichten/erstellen Sie Ihre json-Datei und config für jedes Paket den Namen. Alle wird es in json-Datei.
Ich bin sehr faul zu posten Bild jetzt, aber im Grunde:
Wenn die config-Datei, können Sie sehen, dass google zeigen Sie die Server-API-Schlüssel + Sender ID. Und es ist die gleiche für alle-Paket (Aromen)
Am Ende, Sie müssen nur nur eine json-Datei für alle Geschmacksrichtungen.
Noch eine Frage hier, dass Sie auf test, wenn Sie sich registrieren erhalten Registrierung-Token prüfen, ob der Unterschied für jeden Geschmack. Ich weiß nicht berühren, aber es denke, es sollte Unterschied. Jetzt zu spät und ich so müde 🙂 Hoffe, es hilft!
InformationsquelleAutor der Antwort Lạng Hoàng
Hey Freunde sieht auch für die Namen verwenden, nur Kleinbuchstaben, dann ist u nicht bekommen, diese Fehler
InformationsquelleAutor der Antwort Divyesh Jani
AKTUALISIERT:
In Bezug auf die FB-setup mit build-Varianten, entnehmen Sie bitte dieser blog die ausführliche Anleitung.
InformationsquelleAutor der Antwort KayAnn
Ich bin derzeit mit zwei GCM-Projekt-Id in der gleichen app-Paket. Ich legte die google-service.json meiner ersten GCM-Projekt, aber ich Wechsel von der ersten in die zweite wechseln nur die SENDER_ID:
(An diesem Punkt denke ich, dass die google-Dienste.json ist nicht verpflichtend )
InformationsquelleAutor der Antwort ariostoi
Inspiriert von @ahmed_khan_89 Antwort oben. Wir können direkt zu halten, wie dies in gradle-Datei.
InformationsquelleAutor der Antwort Noundla
Legen Sie Ihre "google-Dienste.json" - Datei unter app/src/Aromen bzw.
dann bauen.gradle der app, unter android fügen Sie folgenden code
InformationsquelleAutor der Antwort Sameer Khader
In der Tat, juste eine google-Dienste.json in
MyApp/app/
Verzeichnis ist gut, keine Notwendigkeit für zusätzliche Skript mitcom.google.gms:google-services:3.0.0
. Aber seien Sie vorsichtig, um die Datei zu löschengoogle-services.json
aus dem app-VerzeichnisMyApp/app/src/flavor1/res/
um den Fehler zu vermeiden geben SieExecution failed for task ':app:processDebugGoogleServices'. > No matching client found for package
InformationsquelleAutor der Antwort gigeos