Was macht google-services.json wirklich?

Ich arbeite daran, Google Analytics und GCM-Dienste zu meiner aktuellen App hinzuzufügen. Im Leitfaden für die Implementierung beider Dienste fordert google den Entwickler auf, eine JSON-Datei zu erstellen: google-services.json und in das Stammverzeichnis der App einzufügen.

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

Ich will nur sicher wissen, wofür diese Datei wirklich ist? Wie funktioniert es und wie funktioniert es?

   

Ich habe ein wenig über das google-services plugin und json nachgeforscht und die Quellen zu diesem Plugin gefunden.

Das wichtigste zuerst

Das Gradle-Plugin google-services, auf das classpath und apply referenzieren, ist nur ein Build-Time-Plugin! Es beeinflusst also nur den Buildprozess Ihrer App, nicht aber den Laufzeitprozess!

Dieses Plugin ist nur als Schnellstarthilfe gedacht, um Google-Dienste schnell in Ihre App zu integrieren. Offensichtlich ist der process etwas verworren und nicht dokumentiert, also sollte Google klar gemacht haben, was dieser process bewirkt.

In der Tat fand ich den Quellcode für die Plugin-Version com.google.gms: google-services: 1.4.0-beta3 und fand weder einen bestimmten Hinweis in Bezug auf appinvites noch fand ich eine Google API für App-Einladungen! (Aber vielleicht verwendet es nur ein generisches API-Projekt mit seiner Projekt-ID, ich habe das nicht versucht)

Was es macht

Das google-services gradle-plugin sucht in Ihrem App-Modul nach der erwähnten google-services.json Datei. Dann sucht es nach konfigurierten Einstellungen wie Projekt-IDs und Tracking-IDs und solchen, die von der Google API-Entwicklerkonsole in der Datei google-services.json 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 einen Debug-Build Ihrer App:

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

Wenn Sie beispielsweise dem GCM-Lernprogramm folgen, enthält die JSON-Datei die API-Projekt-ID als folgende Android-Ressource:

 project-id 

Damit dieses Plug-in und diese JSON-Datei nicht unbedingt zum Ausführen oder Veröffentlichen Ihrer App benötigt werden, ist es nur ein Schnellstart-Helfer, um einige grundlegende Android-Ressourcendateien zu generieren, um die Integration bestimmter Google API-functionen zu erleichtern.

Beachten Sie, dass das google-services-plugin im Quellcode immer diese android-resourcen 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 aus app / build.gradle zu entfernen, sonst wird es für alle App-Varianten neu generiert.

Was es nicht tut

Dieses Plugin und diese JSON-Datei beeinflussen NICHT direkt die functionsweise dieser Google-functionen für Ihre App! Wenn Sie bereits ältere Tutorials auf developer.android.com über die Integration von zB GCM oder Google Analytics gelesen haben, brauchen Sie nicht einmal das grodle-Plugin google-services oder die google-services.json-Datei zu integrieren!

Beachten Sie, wo ich die Quellen gefunden habe

Nachdem Sie das google-services gradle-plugin integriert haben, lädt Gradle bei der Synchronisierung Ihres Projekts automatisch die Google-Services-Abhängigkeit in einen ähnlichen Pfad (unter Windows müssen Sie möglicherweise nach Hause / .gradle für Linux suchen):

 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 

welche 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 Taskdefinition, suchen Sie nach der folgenden Methode, um zu sehen, was sie wirklich tut:

 @TaskAction public void action() throws IOException { 

Was ist diese Datei wirklich für:

google-services.json enthält die Entwickleranmeldeinformationen und Konfigurationseinstellungen, die zur Überprüfung der Verbindung mit GoogleApiClient erforderlich sind. Obwohl Ihr Dienst mit Ihrem Testgerät gut funktioniert, da er Ihr Entwicklerkonto erkennt, aber nach der Freigabe Ihrer App in der Öffentlichkeit, wird es ohne die JSON-Datei nicht funktionieren. Also lösche es nicht.

Die offizielle Dokumentation sagt:

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

Sehen Sie, wie es funktioniert .

Fügen Sie google-services.json zu Ihrem Modul hinzu und führen Sie ein CLEAN und ein REBUILD durch. Eine XML-Datei wird in app / build / generated / res / google-services / debug / values ​​/ values.xml mit Ihren Projekteigenschaften erzeugt und Sie können dann wie normale xml string einfach auf sie zugreifen. Beispiel:

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

Es gibt eine Liste mit allen Strings und Momre-Informationen in google-service.json doc