wake-up-neo.com

Was macht google-services.json wirklich?

Ich arbeite daran, meiner aktuellen App Google Analytics- und GCM-Dienste hinzuzufügen. In der Anleitung für die Implementierung beider Services fordert Google den Entwickler auf, eine JSON-Datei zu generieren: google-services.json. Legen Sie diese im Stammverzeichnis der App ab.

Ich habe festgestellt, dass die Dienste auch dann funktionieren, wenn ich diese JSON-Datei aus meiner App lösche.

Ich möchte nur sichergehen, wofür diese Datei wirklich ist. Was ist seine Verwendung und wie funktioniert es?

116
Arthur Wang

Ich habe ein bisschen nach dem Google-Services-Plugin und JSON gesucht und die Quellen für dieses Plugin gefunden.

Das wichtigste zuerst

Das gradle-plugin google-services, auf das classpath und apply verweist, ist nur ein Build-Time-Plugin! Es beeinflusst also nur den Build-Prozess Ihrer App, nicht aber den Laufzeitprozess!

Dieses Plugin ist nur als Schnellstarthilfe zur schnellen Integration von Google-Diensten in Ihre App gedacht. Offensichtlich ist der Prozess etwas kompliziert und nicht dokumentiert, daher hätte Google klarstellen müssen, was dieser Prozess bewirkt.

Tatsächlich habe ich den Quellcode für die Plugin-Version com.google.gms: google-services: 1.4.0-beta3 gefunden und darin keine spezifischen Hinweise zu Appinvites gefunden, und ich habe auch keine Google-API für App Invites gefunden! (Aber vielleicht verwendet es nur ein generisches API-Projekt mit seiner Projekt-ID, ich habe das nicht ausprobiert.)

Was es macht

Das google-services gradle-plugin sucht in Ihrem App-Modul nach der genannten google-services.json-Datei. Dann sucht es in der google-services.json-Datei nach konfigurierten Einstellungen wie Projekt-IDs und Tracking-IDs und dergleichen, die von der Google API-Entwicklerkonsole generiert werden. Aus den gefundenen Einstellungen werden Android Ressourcenwerte in den folgenden Pfad generiert:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

Zum Beispiel für ein Debug-Build Ihrer App:

app/build/generated/res/google-services/debug/values/values.xml

Z.B. Wenn Sie dem GCM-Lernprogramm gefolgt sind, enthält die JSON-Datei die ID des API-Projekts als folgende Android-Ressource:

<string name="gcm_defaultSenderId">project-id</string>

Das Plugin und die JSON-Datei sind für das Ausführen oder Veröffentlichen Ihrer App nicht unbedingt erforderlich. Sie dienen lediglich als Schnellstarthilfe zum Generieren einiger grundlegender Android-Ressourcendateien für die einfachere Integration bestimmter Google API-Funktionen.

Beachten Sie im Quellcode, dass das Google-Services-Plugin immer diese Android-Ressourcen für jede App-Variante generiert, die in Ihrer App/build.gradle definiert ist.

Wenn Sie das nicht möchten, sollten Sie diese generierten Ressourcen in den gewünschten App-Varianten verwenden und die anderen löschen. Vergiss nicht, das Google-Services-Plugin von app/build.gradle zu entfernen, da es sonst für alle App-Varianten neu generiert wird.

Was es nicht tut

Dieses Plugin und die JSON-Datei haben KEINEN direkten Einfluss auf die Funktionsweise der genannten Google-Funktionen für Ihre App! Wenn Sie bereits ältere Tutorials auf developer.Android.com zur Integration von z. GCM oder Google Analytics, dann müssen Sie weder das gradle-plugin google-services noch die google-services.json-Datei integrieren!

Beachten Sie, wo ich die Quellen gefunden habe

Nachdem Sie das Gradle-Plugin für Google-Services integriert und Ihr Projekt synchronisiert haben, lädt Gradle die Abhängigkeit von Google-Services automatisch auf einen ähnlichen Pfad herunter (unter Windows müssen Sie möglicherweise in Ihrem Home-Verzeichnis/.gradle für Linux nachsehen):

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

Wenn Sie diese JAR-Datei extrahieren, finden Sie zwei Dateien:

GoogleServicesPlugin.groovy
GoogleServicesTask.Java

die den einfachen Quellcode des Gradle-Plugins enthalten.

GoogleServicesPlugin.groovy

enthält die Handhabung der App-Varianten und grundlegende Definitionen von Pfaden etc.

GoogleServicesTask.Java

enthält die eigentliche Aufgabendefinition, suchen Sie nach der folgenden Methode, um zu sehen, was sie wirklich tut:

@TaskAction
public void action() throws IOException { 
187
arne.jans

Wofür ist diese Datei wirklich:

google-services.json enthält Anmeldeinformationen und Konfigurationseinstellungen für Entwickler, die zum Überprüfen der Verbindung mit GoogleApiClient erforderlich sind. Obwohl Ihr Dienst mit Ihrem Testgerät einwandfrei funktioniert, da es Ihr Entwicklerkonto erkennt, funktioniert er nach der Veröffentlichung Ihrer App ohne die json-Datei nicht mehr. Also nicht löschen.

In der offiziellen Dokumentation heißt es:

Die Anwendung erstellt einen GoogleApiClient und gibt an, auf welche Bereiche und APIs die Anwendung zugreifen soll. Wenn der GoogleApiClient eine Verbindung herstellt, ist der Nutzer angemeldet.

Siehe den Abschnitt wie es funktioniert .

37
Mohammad Arman

Fügen Sie google-services.json zu Ihrem Modul hinzu und führen Sie einen CLEAN- und A REBUILD-Vorgang durch. Eine XML-Datei wird in app/build/generated/res/google-services/debug/values ​​/ values.xml mit Ihren Projekteigenschaften erstellt, und Sie können dann wie eine normale XML-Zeichenfolge problemlos darauf zugreifen. Beispiel:

String serverClientId = getString(R.string.default_web_client_id);

es gibt eine Liste mit allen Zeichenfolgen und Momre-Informationen in google-service.json doc

3
Beto Caldas