Clé d'api manquante / clé courante manquante avec Google Services 3.0.0 et clé D'API de Maps dans build.gradle
mon problème est assez similaire à api_key manquant/clé courante avec les services Google 3.0.0 , mais avec un autre niveau de complexité.
j'ai mis à jour mon application ce matin sur com.Google.GMS: google-services: 3.0.0 et tous les jeux - services 9.0.0 dépendances
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 j'obtiens l'erreur infâme
erreur: L'exécution a échoué pour la tâche': hotelsclick: processDebugGoogleServices'. > Objet api_key/current_key manquant
cela semble être dû à une clé D'API manquante dans les services google.fichier json (donc on m'a dit). J'ai 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 mettre ma clé D'API Google Maps là-dedans, Mais voici 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" }],
et
"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 ma construction de module.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 L'Androidmanifest.fichier xml j'ai
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_api_key" />
maintenant, ça a toujours marché jusqu'à ce que je mette à jour vers Google Services 3.0.0, Je ne comprends pas pourquoi cela ne fonctionne pas maintenant. Il ne devrait pas prendre la bonne clé D'API de la compilation compilée.gradle fichier et le mettre dans le manifeste?
alors ma double question est: pourquoi la récupération dynamique de la clé API ne fonctionne-t-elle plus? Et comment puis-je résoudre ce problème?
Merci
6 réponses
Avez-vous essayé de mettre un vide "current_key" 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": "" }]
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 ne fait que récupérer la clé de son serveur. (Clarification parce que ma réponse a été supprimée parce qu'elle est une "copie" alors qu'elle ne l'est pas du tout).
tout d'abord, allez sur la Console Firebase, puis allez dans les paramètres du projet, puis cliquez sur L'onglet"messagerie Cloud". Regardez où il est dit "clé du serveur" et s'il n'y a pas de clé longue affichant (pas le " Sender ID" nombre) cliquez sur "Régénérer la clé" et une clé longue devrait maintenant apparaître. Copiez cette clé et placez-la dans vos services google.dossier json: "api_key": [ {"current_key" : "key goes here"} ]
.
cette méthode m'a aidé pendant qu'aucun des autres ne travaillait, donc j'espère que cela aide quelqu'un.
ce problème que vous rencontrerez après avoir utilisé un nouvel outil de construction classpath 'com.google.gms:google-services:3.0.0'
,
il suffit de recréer vos" services google.json". il sera résolu je l'espère.
si vous avez accidentellement retiré la clé ou si vous ne pouvez pas la récupérer, créez un nouveau justificatif d'api ici et nommez-le exactement"clé Android (auto créé par Google Service)". Cela vous permettra de récupérer votre justificatif d'identité auprès de google-services json.
dans Android Studio , Il ya le concept de types de construction et les saveurs et vous pouvez les utiliser pour obtenir ce dont vous avez besoin. Les types de construction 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 Gradle Android ont des types de construction debug et release.
en outre, vous pouvez ajouter activité Google Maps à votre projet et Android Studio va générer nécessaire dossiers pour vous, vous devez seulement insérer vos clés .
puisque vous utilisez gradle, vous pouvez faire ce qui suit:
"1519160920 de construire".Grad
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 Androïdmanifest.xml et vous définissez la valeur en fonction de votre construction type.
vous pouvez aussi vérifier ce paramètre du Manifeste: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
vous devez activer la messagerie Cloud 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 need it pour cela.
peut-être que vous avez besoin d'un autre service, voir ceci: https://stackoverflow.com/a/37358432/4408810