Wat doet google-services.json echt?

Ik ben bezig met het toevoegen van Google Analytics- en GCM-services aan mijn huidige app.
In de handleiding voor de implementatie van beide services vraagt ​​Google de ontwikkelaar om een ​​json-bestand te genereren: google-services.json en dit in de hoofdmap van de app te plaatsen.

Ik ontdekte dat zelfs als ik dit json-bestand uit mijn app verwijder, de services nog steeds werken.

Wil je het gewoon zeker weten, waar is dit bestand eigenlijk voor? Wat wordt er gebruikt en hoe werkt het?


Antwoord 1, autoriteit 100%

Ik heb wat onderzoek gedaan naar de plug-in voor google-services en json en heb de bronnen voor deze plug-in gevonden.

Eerst eerst

De gradle-plugin google-services waarnaar verwezen wordt door classpath en met apply is alleen een build-time plug-in! Het heeft dus alleen invloed op het bouwproces van je app, maar niet op het runtime-proces!

Deze plug-in is alleen bedoeld als een snelstarthulp om Google-services snel in uw app te integreren. Het proces is duidelijk wat ingewikkeld en niet gedocumenteerd, dus Google had duidelijk moeten maken wat dit proces doet.

In feite heb ik de broncode gevonden voor de plug-inversie com.google.gms:google-services:1.4.0-beta3 en ik heb er geen specifieke verwijzing in gevonden met betrekking tot appinvites, noch heb ik een Google API voor app-uitnodigingen gevonden ! (Maar misschien gebruikt het gewoon een generiek API-project met zijn project-ID, ik heb dit niet geprobeerd)

Wat het doet

De google-services gradle-plugin zoekt naar het genoemde bestand google-services.json in uw app-module. Vervolgens zoekt het naar geconfigureerde instellingen zoals project-id’s en tracking-id’s en dergelijke, gegenereerd door de Google API-ontwikkelaarsconsole in het bestand google-services.json.
Op basis van de gevonden instellingen worden Android-bronwaarden gegenereerd in het volgende pad:

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

Bijvoorbeeld voor een debug-build van uw app:

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

Bijvoorbeeld als je de GCM-zelfstudie hebt gevolgd, zou het JSON-bestand de ID van het API-project bevatten als de volgende Android-bron:

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

Dus deze plug-in en het JSON-bestand zijn niet essentieel voor het uitvoeren of publiceren van uw app, het is slechts een snelstarthulp om enkele standaard Android-bronbestanden te genereren voor een eenvoudigere integratie van specifieke Google API-functies.

Let op in de broncode waarnaar hieronder wordt verwezen dat de plug-in voor google-services altijd die Android-bronnen genereert voor elke app-variant die is gedefinieerd in uw app/build.gradle.

Als je dat niet wilt, moet je die gegenereerde bronnen gebruiken in de app-varianten die je wilt, en de andere verwijderen. Vergeet niet de google-services plugin apply te verwijderen van app/build.gradle, anders wordt deze opnieuw gegenereerd voor alle app-varianten.

Wat het niet doet

Deze plug-in en JSON-bestand hebben GEEN directe invloed op de interne werking van genoemde Google-functies voor uw app!
Als je al oudere tutorials hebt gevolgd op developer.android.com over hoe je b.v. GCM of Google Analytics, dan hoeft u niet eens de gradle-plugin google-services of het google-services.json bestand te integreren!

Opmerking over waar ik de bronnen heb gevonden

Nadat u de google-services gradle-plug-in hebt geïntegreerd en wanneer uw project wordt gesynchroniseerd, downloadt Gradle automatisch de google-services-afhankelijkheid naar een pad dat vergelijkbaar is met dit (in Windows moet u mogelijk naar uw home/.gradle voor Linux kijken ):

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

Als u dit jar-bestand uitpakt, vindt u twee bestanden:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

die de duidelijke broncode van de gradle-plugin bevatten.

GoogleServicesPlugin.groovy

bevat de afhandeling van de app-varianten en basisdefinities van paden etc.

GoogleServicesTask.java

bevat de eigenlijke taakdefinitie, zoek naar de volgende methode om te zien wat het echt doet:

@TaskAction
public void action() throws IOException { 

Antwoord 2, autoriteit 19%

Waar is dit bestand eigenlijk voor:

google-services.jsonbevat inloggegevens voor ontwikkelaars en configuratie-instellingen die nodig zijn om te verifiëren wanneer u verbinding maakt met GoogleApiClient. Hoewel uw service goed werkt met uw testapparaat omdat het uw ontwikkelaarsaccount detecteert, maar nadat uw app openbaar is vrijgegeven, werkt deze niet zonder het json-bestand. Dus verwijder het niet.

De officiële documentatie zegt:

De applicatie bouwt een GoogleApiClient, waarin wordt gespecificeerd tot welke scopes en API’s de applicatie toegang heeft. Wanneer de GoogleApiClient verbinding maakt, is de gebruiker ingelogd.

Bekijk het gedeelte hoe het werkt.


Antwoord 3, autoriteit 2%

Voeg google-services.json toe aan uw module en voer een CLEAN en A REBUILD uit.
Er wordt een xml-bestand gegenereerd in app/build/generated/res/google-services/debug/values/values.xml met uw projecteigenschappen en u kunt er vervolgens gemakkelijk toegang toe krijgen zoals een normale xml-tekenreeks.
Voorbeeld:

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

er is een lijst met alle strings en meer informatie in google-service. json-document

Other episodes