GoogleService n'a pas pu s'initialiser

113

J'utilise google Maps dans mon application Android. J'ai créé la clé et ajouté les autorisations nécessaires dans le fichier manifeste. Mais bientôt je lance l'application, je reçois ce message dans le débogueur:

Échec de l'initialisation de GoogleService, état: 10, ressource attendue manquante: «R.string.google_app_id» pour l'initialisation des services Google. Les causes possibles sont l'absence du plug-in google-services.json ou com.google.gms.google-services gradle.

Je ne suis pas sûr de ce qui ne va pas. La carte fonctionne bien et je peux l'utiliser sans aucun problème. Mon fichier gradle a cette entrée:

compilez "com.google.android.gms: play-services: 8.4.0"

De quoi se plaint-il et comment puis-je l'atténuer?

Zach
la source
est-ce dans votre manifeste: <meta-data android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue
Regardez l'étape 2: développeurs.google.com
identity
J'ai essayé les deux mais toujours le même message!
Zach
1
L'APK de votre appareil est-il mis à jour?
Abhigyan
Aucune de ces solutions ne fonctionnait, mais la mise à jour de l'APK Services semblait faire l'affaire!
midoriha_senpai

Réponses:

38

Vous devez placer le fichier de configuration ( google-services.json) généré par developer.google.com , comme mentionné dans la 2ème étape de la documentation officielle ici

Le processus est simple

  1. Vous pouvez sélectionner votre projet ou en créer un nouveau.
  2. Ensuite, après avoir sélectionné les services souhaités (dans ce cas, le service de cartes), vous pouvez générer le fichier de configuration.

    Pour les personnes qui ont migré vers les projets Firebase, ils peuvent obtenir la même chose en accédant à Firebase Console , en sélectionnant votre projet et sous Paramètres, vous trouverez le fichier de configuration.

  3. Ensuite, comme indiqué à l'étape 3 de la documentation officielle ici

    Copiez le google-services.jsonfichier que vous venez de télécharger dans le répertoire app / ou mobile / de votre Android

PS: Pour les personnes qui votent contre cette réponse, veuillez laisser un commentaire expliquant pourquoi vous ne votez pas.

Nishant.
la source
6
Avons-nous réellement besoin de cela dans nos applications avec la nouvelle version des services Google Play? Ou est-ce uniquement pour la connexion à Google? Cela semble étrange que les journaux me lancent des erreurs comme si j'en avais besoin, mais je pourrais pas
RED_
2
@Radix ... Je suis allé sur le lien que vous avez partagé, mais il m'a demandé de m'inscrire à Google Sign In ou à Google Cloud Messaging ... rien sur la carte. Une idée? De plus, copier ce fichier json juste sous / app est un peu étrange ... pouvez-vous clarifier? Merci beaucoup!
Johnny Wu le
2
Nous avions déjà le google-services.json dans notre application, mais nous avons dû le recréer lors de la mise à niveau vers la 8.4.0.
Roy Solberg
1
même problème, l'ajout de google-services.json n'a pas aidé, chose étrange qu'il ne voit pas mon gcm déjà activé et veut créer à chaque fois sa propre clé de serveur
Andrew V.
11
Voir la réponse correcte ici du chef de produit de Google: stackoverflow.com/questions/34365369/…
Ahmed Mounir
52

[De Product Manager @ Google]

Vous pouvez résoudre ce problème en téléchargeant et en copiant le google-services.jsonfichier de votre application Android en suivant les étapes ci-dessous:

  • Sélectionnez le nom de votre application / projet et le nom du pack Android à partir de ce lien et cliquez sur Continue to Choose and configure services.
  • Cliquez sur Continue to Generate Configuration files.
  • Téléchargez google-services.jsonet copiez le fichier dans le répertoire du module app/ou mobile/de votre projet Android.

Si vous avez déjà importé votre projet Google dans Firebase, vous pouvez obtenir le google-services.json mis à jour à partir de la console Firebase sous Paramètres du projet.

NE COPIEZ PAS le PROJECT_NUMBER comme suggéré par l'une des autres réponses car le google_app_id fait référence à votre application dans un projet et non au projet lui-même.

Sriram
la source
1
Pour les personnes qui utilisent le plugin gradle-experimental, google-services.json ne prendra pas effet directement. Veuillez consulter stackoverflow.com/a/38097895/457137 pour une solution de contournement.
zevoid
Pourquoi est-il obligatoire d'inclure le fichier json? Pourquoi ne puis-je pas fournir l'ID au moment de l'exécution dans le code?
der_michael
Le fichier va dans le répertoire / app , pas dans le répertoire de niveau supérieur?
IgorGanapolsky
11

Dans mon cas, la cause de cette erreur était que le plugin Google Services pour Gradle et la bibliothèque Play Services étaient des versions incompatibles. Instructions pour les versions compatibles:

1) Ajoutez la dépendance à votre build.gradle au niveau du projet:

classpath 'com.google.gms:google-services:1.5.0-beta2'

2) Ajoutez le plugin à votre build.gradle au niveau de l'application:

apply plugin: 'com.google.gms.google-services'

3) Si vous utilisez Android Studio, voici la chaîne à ajouter à la section des dépendances du fichier build.gradle de votre application:

dependencies {
  compile "com.google.android.gms:play-services:8.3.0"
}

Source: https://developers.google.com/cloud-messaging/android/client

13rac1
la source
1
Merci, mais cela n'a pas fonctionné pour moi - Android Studio insiste sur le fait que le fichier google-services.json est également installé, même si j'ai pensé que ce n'était pas nécessaire si vous suiviez les trois étapes ci-dessus, lesquelles devraient remplacer la nécessité du fichier? Ce qui m'amène à me demander: pourquoi ai-je besoin d'un système de connexion utilisateur Google si je ne fournis que des cartes de base?
iaindownie le
1
Ma solution n'était pas répertoriée, j'ai donc répondu à la question pour donner aux gens une autre solution potentielle à ce problème. Dans votre cas, des bibliothèques supplémentaires peuvent être installées. Essayez uniquement d'utiliser lecom.google.android.gms:play-services-maps:8.4.0
13rac1
@eosrei, en utilisant uniquement com.google.android.gms: play-services-maps: 8.4.0 a fonctionné pour moi, merci!
akshay7692
4

J'ai rencontré le même problème et je l'ai résolu en suivant la solution officielle .

Voici les étapes:

  1. récupérez le fichier google-services.jsonde configuration à partir de ce lien .

  2. Copiez le google-services.jsonfichier que vous venez de télécharger dans le répertoire app / ou mobile / de votre projet Android Studio.

  3. Ajoutez la dépendance à votre build.gradle au niveau du projet:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. Ajoutez le plugin à votre build.gradle au niveau de l'application:

    apply plugin: 'com.google.gms.google-services'
  5. Ajoutez cette dépendance à votre build.gradle au niveau de l'application:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
Volonté
la source
1
Je pense qu'il vaut mieux utiliser com.google.gms: google-services: 1.5.0 car c'est mieux que la version bêta pour supprimer certaines erreurs imprévisibles dans votre application.
Andrew V.
@AndrewV. Oui je suis d'accord. La version "1.5.0-beta2" a été copiée à partir du lien que j'ai donné ci-dessus.
Sera le
1

Pour ceux qui sont confrontés à ce problème même après avoir correctement configuré les services de lecture et placé le google-services.jsonfichier dans un project/appdossier, la solution réelle consiste à

Build > Rebuild Project

Peut-être en raison du fait que les chaînes du fichier json ne sont pas intégrées aux ressources compilées tant qu'une reconstruction complète n'est pas effectuée.

anandbibek
la source
1

Pour Xamarin / Visual Studio Mac, je devais ajouter ceci au bas de mon Droid.csproj

<Target Name="ProcessGoogleServicesJson" Condition=" '@(GoogleServicesJson)' != '' AND '$(AndroidApplication)' == 'True' AND '$(DesignTimeBuild)' != 'True'" BeforeTargets="$(ProcessGoogleServicesJsonBeforeTargets)" AfterTargets="$(ProcessGoogleServicesJsonAfterTargets)">
<Message Text="Using ProcessGoogleServicesJson override" Importance="high" />
<ProcessGoogleServicesJson GoogleServicesJsons="@(GoogleServicesJson)" IntermediateOutputPath="$(IntermediateOutputPath)" MonoAndroidResDirIntermediate="$(MonoAndroidResDirIntermediate)" AndroidPackageName="$(_AndroidPackage)">
    <Output ItemName="_AndroidResourceDest" TaskParameter="GoogleServicesGeneratedResources" />
    <Output ItemName="FileWrites" TaskParameter="GoogleServicesGeneratedResources" />
</ProcessGoogleServicesJson>
<ItemGroup>
    <FileWrites Include="$(IntermediateOutputPath)\ProcessGoogleServicesJson.stamp" />
</ItemGroup>

https://github.com/xamarin/GooglePlayServicesComponents/issues/64

stepheaw
la source
0

J'ai eu le même problème à l'époque. A été en mesure de le résoudre en utilisant uniquement la bibliothèque de services de jeu nécessaire, qui dans mon cas GCM.

Au lieu de com.google.android.gms:play-services:8.4.0, j'utilise com.google.android.gms:play-services-gcm:8.4.0. Voir ici pour plus d'informations; cela résout également le problème du multidex.

Ensuite, j'ai appliqué à la fois l'approche de @Radix et de @ Alexander pour supprimer le message que GCM a été sorti dans le logcat concernant le google-services.json.

emen
la source
0

Vous pouvez modifier le versionCodeet versionNamede votre application dans votre fichier Gradle.

F. Milliard
la source
0

Une solution rapide j'ai utilisée consiste à désactiver la signature. Si vous ne souhaitez pas créer de code de production, vous pouvez définir votre variante de construction sur debug, localOldDebug ou localDebug.

Cliquez sur Build Variants en bas à gauche dans Android Studio.

comment désactiver-généré-signé-apk-android-studio

Dudas
la source
pourrait poser une question en commentaire
jjj
-2

J'ai juste une autre solution que je supprime accidentellement

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

Ajoutez ceci et travaillez, c'est pour une nouvelle solution

Cazs
la source