34

Mein Problem ist ziemlich ähnlich zu Missing api_key/current key with Google Services 3.0.0, aber mit einem weiteren Komplexitätsgrad.Fehlender api_key/aktueller Schlüssel mit Google Services 3.0.0 und Google Maps-API-Schlüssel in build.gradle

ich meine app heute morgen com.google.gms aktualisiert: google-Dienstleistungen: 3.0.0 und alle Play-Dienste 9.0.0 Abhängigkeiten

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' 

Jetzt bekomme ich den berüchtigten Fehler

Error:Execution failed for task ':hotelsclick:processDebugGoogleServices'. > Missing api_key/current_key object

Dies scheint aufgrund eines fehlenden API-Schlüssels in der Datei google-services.json (so wurde mir gesagt). Ich habe einen neuen API-Schlüssel von https://developers.google.com/cloud-messaging/android/client#get-config bekommen und das folgende Feld darin gefunden.

"api_key": [], 

Ich denke, ich sollte dort meine Google Maps-API-Schlüssel setzen, aber hier kommt es das doppelte Problem ich erlebe:

1-, wenn ich versuche, und innerhalb dieses Feld den Schlüssel setzen, es funktioniert nicht. Ich habe versucht, mit beiden

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

und

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

der Fehler gleich bleibt.

2- Ich habe Gradle verwendet, um dynamisches Bauen zu verwenden. Ich habe folgend in meinem Modul 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' 
    } 
} 

In der AndroidManifest.xml Datei Ich habe

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

Nun ist es immer arbeitet worden, bis ich auf Google-Dienste 3.0.0 aktualisiert, I verstehe nicht, warum es jetzt nicht funktioniert. Sollte es nicht den richtigen API-Schlüssel aus der kompilierten build.gradle-Datei holen und in das Manifest einfügen?

Also meine doppelte Frage ist: Warum funktioniert das dynamische API-Schlüsselholen nicht mehr? Und wie kann ich das beheben?

Danke

+0

Ich ersetzte manuell alle 'api_key' Objekte durch' "api_key": [{"current_key": "your_key_here"}] 'und der Fehler verschwand. Ich denke, etwas stimmt nicht mit dem Konfigurationsdateigenerator. –

+0

hat nicht für mich funktioniert -.- –

Antwort

66

Haben Sie eine leere "current_key" versucht, setzen sich wie folgt:

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

Sehen Sie, wie das geht.

+0

ja, ich habe es versucht. Funktioniert nicht: -/ –

+0

Ich habe versucht und funktioniert – Plugie

+0

Woot! Funktioniert bei mir. Eine temporäre Lösung, die es mir aber ermöglicht zu bauen. Scheint so, als könnten diese Updates mit so vielen verschiedenen Abhängigkeiten und Teilen so schwierig sein. – Booger

4

Dieses Problem, das Sie nach der Verwendung von neuem Build-Tool classpath 'com.google.gms:google-services:3.0.0',

einfach erstellen Sie Ihre "google-services.json" konfrontiert sein werden. es wird hoffentlich gelöst werden.

+2

habe ich natürlich versucht. Funktioniert nicht. –

0

Sie müssen Cloud Messaging aktivieren, auch wenn Sie es nicht verwenden und eine neue JSON-Datei generieren. Wenn Sie Cloud Messaging aktivieren, benötigen Sie den API-Schlüssel dafür.

Vielleicht brauchen Sie einen anderen Dienst, sehen: https://stackoverflow.com/a/37358432/4408810

+0

aber das gibt Ihnen einen Server-API-Schlüssel, der nicht das ist, was Sie in die JSON-Datei einfügen sollten.Und ich tat das gleiche aktiviert gcm, aber es gab keine api_key drin – Nitrodbz

+0

Ja, ich weiß nicht warum, aber in meinem Fall, wenn Cloud Messaging aktivieren ich diesen API-Schlüssel in JSON-Datei. –

+0

Ich habe den API-Schlüssel in der JSON-Datei erhalten, indem ich die Cloud Messaging API aktiviert habe. Der api_key-Eintrag wurde gefüllt. "api_key": [{ "current_key": "the_api_key" } aber immer noch nicht funktioniert. Ich weiß nicht wirklich, was daran falsch ist ... –

0

In Android Studio, gibt es das Konzept der Build-Typen und Aromen und Sie können diese verwenden, zu bekommen, was Sie brauchen.Build-Typen sind verschiedene Versionen der App, die funktional identisch sind, sich aber im Debugging-Code unterscheiden können. Standardmäßig haben alle Android Gradle-Projekte Debug- und Release-Build-Typen.

Zusätzlich können Sie Google Maps activity zu Ihrem Projekt hinzufügen und Android Studio wird die notwendigen Dateien für Sie generieren, Sie müssen nur Ihre keys einfügen.

Da Sie gradle verwenden, können Sie wie folgt vorgehen:

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"/> 

Auf diese Weise haben Sie nur eine AndroidManifest.xml, und Sie legen den Wert basierend auf Ihrem Build-Typ fest.

Sie können auch dieses Manifest Platzhalter überprüfen: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

+0

Danke d.datul, genau das habe ich gemacht :-) Und es hat immer bis gestern geklappt. Ich fange an zu vermuten, dass der API-Key ich bekomme den Fehler über ist nicht die GoogleMaps, sondern eine andere, vielleicht die Cloud Messaging (obwohl ich nicht mit Cloud-Messaging). Wie Sie in den anderen Kommentaren sehen können, habe ich eine neue JSON-Datei mit der Google Messaging-API erstellt, die aber nicht funktioniert hat. –

1

Wenn Sie den Schlüssel versehentlich entfernt oder man kann es nicht schaffen wieder ein neues api Credential here und nennen Sie es genau „Android-Taste (Auto von Google-Service erstellt) ". Dadurch werden Ihre Anmeldeinformationen an den Google-Services-JSON zurückgegeben.

6

Ich konnte dieses Problem mit diesen Schritten lösen, die hier nicht beantwortet werden. Diese Antwort aktiviert KEINE Cloud Messaging, es ruft nur seinen Serverschlüssel ab. (Klarstellung, weil meine Antwort als "Duplikat" gelöscht wurde, wenn sie überhaupt nicht vorhanden ist).

Gehen Sie zuerst zur Firebase-Konsole und gehen Sie dann zu Projekteinstellungen und klicken Sie dann auf den Tab "Cloud Messaging". Schauen Sie, wo "server key" steht und wenn kein langer Schlüssel angezeigt wird (nicht die "Sender ID" Nummer), klicken Sie auf "Regenerate Key" und ein langer Schlüssel sollte nun angezeigt werden. Kopieren Sie diesen Schlüssel und legen Sie ihn in Ihre google-services.json-Datei unter: "api_key": [ {"current_key" : "key goes here"} ].

Diese Methode half mir, während keiner der anderen funktionierte, also hoffentlich hilft das jemand.

Verwandte Themen