web-dev-qa-db-fra.com

Que fait vraiment google-services.json?

Je travaille sur l'ajout de services Google Analytics et GCM à mon application actuelle. Dans le guide relatif à la mise en œuvre des deux services, Google demande au développeur de générer un fichier json: google-services.json et de le placer dans le répertoire racine de l'application.

J'ai trouvé que même si je supprime ce fichier JSON de mon application, les services fonctionnent toujours.

Je veux juste savoir avec certitude, à quoi sert vraiment ce fichier? Quel est son utilisation et comment ça marche?

116
Arthur Wang

J'ai enquêté un peu sur le plugin google-services et json et trouvé les sources de ce plugin.

Tout d'abord

Le gradle-plugin google-services qui est référencé par classpath et avec apply est un plugin de construction seulement! Donc, cela n'influence que le processus de construction de votre application, mais pas le processus d'exécution!

Ce plugin est uniquement conçu comme un outil d'aide à l'intégration rapide des services Google dans votre application. De toute évidence, le processus est quelque peu compliqué et non documenté. Google aurait donc dû préciser le fonctionnement de ce processus.

En fait, j'ai trouvé le code source de la version du plugin com.google.gms: google-services: 1.4.0-beta3 et n'y ai trouvé aucune référence spécifique concernant les invitations, ni aucune API Google pour les invitations à une application! (Mais peut-être utilise-t-il simplement un projet d'API générique avec son identifiant de projet, je n'ai pas essayé ceci)

Ce qu'il fait

Le plug-in gradle de google-services recherche le fichier google-services.json mentionné dans votre module d'application. Ensuite, il recherche dans le fichier google-services.json les paramètres configurés, tels que les identifiants de projet et les identifiants de suivi, et autres, générés par la console de développement de l'API Google. À partir des paramètres trouvés, Android valeurs de ressources sont générés dans le chemin suivant:

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

Par exemple, pour une construction de débogage de votre application:

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

Par exemple. Si vous avez suivi le didacticiel GCM, le fichier JSON inclurait l'ID du projet API en tant que ressource Android suivante:

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

Par conséquent, ce plugin et ce fichier JSON ne sont pas indispensables à l'exécution ou à la publication de votre application. Il s'agit simplement d'un assistant de démarrage rapide permettant de générer des fichiers de ressources Android de base pour une intégration plus aisée des fonctionnalités spécifiques de Google API.

Notez dans le code source référencé ci-dessous que le plug-in google-services génère toujours ces ressources Android pour chaque variante d'application définie dans votre application/build.gradle.

Si vous ne le souhaitez pas, vous devez utiliser les ressources générées dans les variantes d'application souhaitées et supprimer les autres. N'oubliez pas de supprimer le plugin google-services apply de app/build.gradle, sinon il sera régénéré pour toutes les variantes de l'application.

Ce qu'il ne fait pas

Ce plugin et ce fichier JSON n'influencent PAS directement le fonctionnement interne desdites fonctionnalités de Google pour votre application! Si vous avez déjà suivi des didacticiels plus anciens sur developer.Android.com sur la manière d’intégrer, par exemple. GCM ou Google Analytics, vous n'avez même pas besoin d'intégrer ni le fichier gradle-plugin google-services ni le fichier google-services.json!

Avis sur l'endroit où j'ai trouvé les sources

Une fois que vous avez intégré le plug-in Gradule de google-services et synchronisé votre projet, Gradle télécharge automatiquement la dépendance de google-services vers un chemin similaire à celui-ci (sous Windows, vous devrez peut-être consulter votre répertoire home/.gradle pour Linux):

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

Si vous extrayez ce fichier jar, vous trouverez deux fichiers:

GoogleServicesPlugin.groovy
GoogleServicesTask.Java

qui contiennent le code source brut du plugin gradle.

GoogleServicesPlugin.groovy

contient le traitement des variantes d'application et les définitions de base des chemins, etc.

GoogleServicesTask.Java

contient la définition de tâche réelle, recherchez la méthode suivante pour voir ce qu'elle fait réellement:

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

A quoi sert réellement ce fichier:

google-services.json contient les informations d'identification du développeur et les paramètres de configuration nécessaires pour la vérification lors de la connexion à GoogleApiClient. Bien que votre service fonctionne correctement avec votre périphérique de test car il détecte votre compte développeur, mais après avoir publié votre application en public, il ne fonctionnera pas sans le fichier json. Alors ne le supprime pas.

La documentation officielle dit:

L'application crée un GoogleApiClient, spécifiant les portées et les API auxquelles l'application aura accès. Lorsque GoogleApiClient se connecte, l'utilisateur est connecté.

Voir la section comment ça marche .

37
Mohammad Arman

Ajoutez google-services.json à votre module et effectuez un nettoyage et une reconstruction. Un fichier xml sera généré dans app/build/généré/res/google-services/debug/values ​​/ values.xml avec les propriétés de votre projet et vous pourrez y accéder facilement, comme une chaîne xml normale. Exemple:

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

il y a une liste avec toutes les chaînes et informations sur maman dans doc google-service.json

3
Beto Caldas