35 votes

Clé api_key/current manquante avec Google Services 3.0.0 et clé API Maps dans build.gradle

Mon problème est assez similaire à Clé api_key/current manquante avec Google Services 3.0.0 mais avec un niveau de complexité supplémentaire.

J'ai mis à jour mon application ce matin avec com.google.gms:google-services:3.0.0 et toutes les dépendances de play-services 9.0.0.

compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-ads:9.0.0'
compile 'com.google.android.gms:play-services-identity:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'

Maintenant je reçois l'infâme erreur

Erreur:L'exécution a échoué pour la tâche ':hotelsclick:processDebugGoogleServices'. > Objet api_key/current_key manquant

Cela semble être dû à une clé API manquante dans le fichier google-services.json (c'est ce qu'on m'a dit). J'ai obtenu une nouvelle clé API de https://developers.google.com/cloud-messaging/Android/client#get-config et y a trouvé le champ suivant.

  "api_key": [],

Je suppose que je devrais y mettre ma clé API Google Maps, mais voilà le double problème que je rencontre :

1- si j'essaie de mettre la clé dans ce champ, ça ne marche pas. J'ai essayé avec les deux

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],

y

  "api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"],

l'erreur reste la même.

2- J'ai utilisé gradle afin d'utiliser la construction dynamique. J'ai mis ce qui suit dans mon module build.gradle :

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        debuggable false
        resValue "string", "google_maps_api_key", "ABCDEFGHILMNO... my maps release API key"
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        zipAlignEnabled true
    }
    debug {
        resValue "string", "google_maps_api_key", "ZNTMRNCDNR... my google maps debug API key"
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}

Dans le fichier Androidmanifest.xml, j'ai

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_api_key" />

Cela a toujours fonctionné jusqu'à la mise à jour de Google Services 3.0.0. Je ne comprends pas pourquoi cela ne fonctionne pas maintenant. Ne devrait-il pas récupérer la bonne clé d'API à partir du fichier build.gradle compilé et la placer dans le manifeste ?

Ma double question est donc la suivante : pourquoi la récupération dynamique des clés API ne fonctionne-t-elle plus ? Et comment puis-je résoudre ce problème ?

Merci.

0 votes

J'ai remplacé manuellement toutes les api_key des objets avec "api_key":[{"current_key":"your_key_here"}] et l'erreur a disparu. Je suppose qu'il y a un problème avec le générateur de fichiers de configuration.

0 votes

Ça n'a pas marché pour moi -.-

73voto

Nitrodbz Points 144

Avez-vous essayé de mettre un "current_key" vide comme suit :

"api_key": [{ "current_key": "" }]

On verra comment ça se passe.

EDIT : Vous devriez remplacer "api_key" : [] (situé dans "client" ) avec "api_key" : [{"current_key" : "" }]

0 votes

Woot ! Ça marche pour moi. Une solution temporaire, mais qui me permet de construire. Il semble que ces mises à jour peuvent être si délicates avec tant de dépendances et de pièces différentes.

0 votes

Pour obtenir l'api_key, vous devrez probablement importer votre projet google dans firebase à partir du lien ci-dessous. De là, vous pouvez créer un fichier google_services.json. console.firebase.google.com

0 votes

@Nitrodbz vous aviez raison, ça marche. J'avais juste besoin d'effectuer un nettoyage/reconstruction après l'avoir ajouté, une simple construction n'était pas suffisante. Merci beaucoup !

9voto

David Velasquez Points 1281

J'ai pu résoudre ce problème avec ces étapes qui ne sont pas répondues ici. Cette réponse n'active PAS la messagerie en nuage, elle récupère seulement sa clé de serveur. (Je précise que ma réponse a été supprimée parce qu'elle était un "doublon" alors qu'elle ne l'est pas du tout).

Donc, tout d'abord, allez dans la console Firebase, puis allez dans les paramètres du projet, et ensuite cliquez sur l'onglet "Cloud Messaging". Regardez où il est écrit "server key" et s'il n'y a pas de clé longue affichée (pas le numéro "Sender ID"), cliquez sur "Regenerate Key" et une clé longue devrait maintenant apparaître. Copiez cette clé et placez-la dans votre fichier google-services.json à l'adresse suivante : "api_key": [ {"current_key" : "key goes here"} ] .

Cette méthode m'a aidé alors qu'aucune autre ne fonctionnait, alors j'espère que cela aidera quelqu'un.

0 votes

Cela a marché ! !! je me demande si le problème disparaît si vous ajoutez d'abord la base de données ?

4voto

Sadman Samee Points 51

Le problème que vous rencontrerez après avoir utilisé le nouvel outil de construction. classpath 'com.google.gms:google-services:3.0.0' ,

Recréez simplement votre "google-services.json". Le problème sera résolu si tout va bien.

1voto

Feantury Points 301

Si vous avez accidentellement supprimé la clé ou si vous ne pouvez pas la récupérer, créez un nouveau justificatif d'accès. ici et nommez-le exactement "Clé Android (auto créée par le service Google)". Cela permettra de récupérer votre créance dans le json de google-services.

0voto

Rafael Gutiérrez Points 441

Vous devez activer la messagerie en nuage, même si vous ne l'utilisez pas, et générer un nouveau fichier json. Lorsque vous activez Cloud Messaging, vous obtenez la clé API nécessaire.

Si vous avez besoin d'un autre service, voyez ceci : https://stackoverflow.com/a/37358432/4408810

0 votes

Mais cela vous donne une clé api du serveur qui n'est pas ce que vous devriez mettre dans le fichier json. Et j'ai fait la même chose en activant gcm mais il n'y avait pas de clé api_key dedans.

0 votes

Oui, je ne sais pas pourquoi, mais dans mon cas, lorsque j'active la messagerie en ligne, j'obtiens cette clé API dans le fichier JSON.

0 votes

J'ai obtenu la clé API dans le fichier JSON en activant l'API de messagerie en nuage. L'entrée api_key a été remplie. "api_key" : [ { "current_key" : "the_api_key" } mais cela ne fonctionne toujours pas. Je ne sais pas vraiment ce qui ne va pas...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X