web-dev-qa-db-fra.com

Api_key / clé actuelle manquante avec Google Services 3.0.0 et la clé API Maps dans build.gradle

mon problème est assez similaire à api_key/clé actuelle manquante avec Google Services 3.0. mais avec un niveau de complexité supplémentaire.

J'ai mis à jour mon application ce matin en 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 la tristement célèbre 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é d'API https://developers.google.com/cloud-messaging/Android/client#get-config et y ai trouvé le champ suivant.

  "api_key": [],

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

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

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

et

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

l'erreur reste la même.

2- J'utilise gradle pour 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" />

Maintenant, cela a toujours fonctionné jusqu'à ce que je passe à Google Services 3.0.0, je ne comprends pas pourquoi cela ne fonctionne pas maintenant. Ne devrait-il pas saisir la bonne clé API du fichier build.gradle compilé et la mettre dans le manifeste?

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

Merci

35
Marco Zanetti

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

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

Voyez comment ça se passe.

EDIT: vous devez remplacer "api_key": [] (situé dans "" client ") par" api_key ": [{" current_key ":" "}]

72
Nitrodbz

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 cloud, elle récupère uniquement sa clé de serveur. (Clarification car ma réponse a été supprimée car elle était un "doublon" alors qu'elle ne l'est pas du tout).

Alors d'abord, allez dans Firebase Console, puis allez dans Paramètres du projet, puis cliquez sur l'onglet "Cloud Messaging". Regardez où il est écrit "clé du serveur" et s'il n'y a pas de clé longue affichée (pas le numéro "ID de l'expéditeur"), cliquez sur "Régénérer la clé" et une longue clé devrait maintenant s'afficher. Copiez cette clé et placez-la dans votre fichier google-services.json à: "api_key": [ {"current_key" : "key goes here"} ].

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

9
David Velasquez

Vous rencontrerez ce problème après avoir utilisé le nouvel outil de générationclasspath 'com.google.gms:google-services:3.0.0',

Recréez simplement votre "google-services.json". il sera résolu, espérons-le.

4
Sadman Samee

Si vous avez accidentellement supprimé la clé ou que vous ne parvenez pas à la récupérer, créez une nouvelle identification API ici et nommez-la exactement "Clé Android (créée automatiquement par le service Google)". Cela permettra de récupérer vos informations d'identification sur les services Google JSON.

1
droidpl

Dans Android Studio , il y a le concept des types de construction et des saveurs et vous pouvez les utiliser pour obtenir ce dont vous avez besoin. Les types de build sont différentes versions de l'application qui sont fonctionnellement identiques mais peuvent différer dans le code de débogage. Par défaut, tous les projets Android Gradle ont des types de build de débogage et de publication.

De plus, vous pouvez ajouter activité Google Maps à votre projet et Android Studio générera les fichiers nécessaires pour vous, il vous suffit d'insérer vos clés .

Puisque vous utilisez gradle, vous pouvez effectuer les opérations suivantes:

build.gradle

Android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}

AndroidManifest.xml

meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_api_key"/>

De cette façon, vous n'avez qu'un seul fichier AndroidManifest.xml et vous définissez une valeur en fonction de votre type de build.

Vous pouvez également vérifier cet espace réservé manifeste: http://tools.Android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

0

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

Peut-être avez-vous besoin de tout autre service, voyez ceci: https://stackoverflow.com/a/37358432/440881

0