34

il mio problema è abbastanza simile a Missing api_key/current key with Google Services 3.0.0 ma con un ulteriore livello di complessità.Manca api_key/chiave corrente con Google Services 3.0.0 e chiave API Maps in build.gradle

ho aggiornato il mio app di questa mattina a com.google.gms: Google-servizi: 3.0.0 e tutti i play-servizi 9.0.0 dipendenze

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' 

Ora ho l'errore famigerato

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

Questo sembra essere dovuto a una chiave API mancante nel file google-services.json (così mi è stato detto). Ho ricevuto una nuova chiave API da https://developers.google.com/cloud-messaging/android/client#get-config e ho trovato il seguente campo.

"api_key": [], 

Penso che dovrei mettere la mia chiave API di Google Maps in là, ma qui si tratta del numero doppio che sto vivendo:

1- se provo e metto la chiave all'interno questo ambito, non funziona Ho provato sia con

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

e

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

l'errore rimane la stessa.

2- Ho usato gradle per utilizzare l'edificio dinamico. Ho messo il seguente nel mio modulo 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' 
    } 
} 

Nel file AndroidManifest.xml ho

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

Ora, è sempre lavorato fino a quando ho aggiornato a Google Servizi 3.0.0, I non capisco perché non funziona ora. Non dovrebbe prendere la chiave API corretta dal file compilato build.gradle e inserirla nel manifest?

Quindi la mia doppia domanda è: perché il caricamento delle chiavi API dinamico non funziona più? E come posso risolvere questo?

Grazie

+0

Ho sostituito manualmente tutti gli oggetti 'api_key' con' "api_key": [{"current_key": "your_key_here"}] 'e l'errore è andato via. Immagino che qualcosa non funzioni con il generatore di file di configurazione. –

+0

non ha funzionato per me -.- –

risposta

66

Avete provato a mettere un "current_key" vuota come segue:

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

vedere come va.

+0

sì, ci ho provato. Non funziona: -/ –

+0

Ho provato e funziona – Plugie

+0

Woot! Per me va bene. Una soluzione temporanea, ma mi consente di costruire. Sembra che questi aggiornamenti possano essere così complicati con così tante dipendenze e parti diverse. – Booger

4

Questo problema si dovrà affrontare dopo l'uso di nuovi tool di creazione classpath 'com.google.gms:google-services:3.0.0',

semplicemente ricreare il "services.json google-". sarà risolto speranzoso.

+2

Ho provato, naturalmente. Non funziona –

0

È necessario abilitare Cloud Messaging anche se non lo si utilizza e generare un nuovo file JSON. Quando abiliti Cloud Messaging ottieni la chiave API che ne ha bisogno.

Forse avete bisogno di qualsiasi altro servizio, vedere questo: https://stackoverflow.com/a/37358432/4408810

+0

ma questo ti dà una chiave API del server che non è ciò che dovresti inserire nel file json.E ho fatto la stessa cosa abilitata a gcm ma non c'era api_key al suo interno – Nitrodbz

+0

Sì, non so perché, ma nel mio caso, quando abilita Cloud Messaging ottengo questa chiave API nel file JSON. –

+0

Ho ottenuto la chiave API nel file JSON abilitando l'API di Cloud Messaging. La voce api_key è stata compilata. "api_key": [{ "current_key": "the_api_key" } ma ancora non funziona. Non so davvero cosa c'è che non va ... –

0

In Android Studio, c'è il concetto di tipi di build e di sapori ed è possibile utilizzare questi per ottenere quello che ti serve.I tipi di build sono versioni diverse dell'app che sono identiche dal punto di vista funzionale ma possono differire nel codice di debug. Per impostazione predefinita, tutti i progetti Android Gradle dispongono di tipi di build di debug e release.

Inoltre, puoi aggiungere Google Maps activity al tuo progetto e Android Studio genererà i file necessari per te, devi solo inserire il tuo keys.

Dal momento che si sta utilizzando Gradle, è possibile effettuare le seguenti operazioni:

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

In questo modo hai solo un AndroidManifest.xml e imposti il ​​valore in base al tipo di build.

È inoltre possibile controllare questo segnaposto manifesta: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

+0

Grazie d.datul, questo è esattamente quello che ho fatto :-) E ha sempre funzionato fino a ieri. Sto iniziando a sospettare che la chiave API su cui sto riscontrando l'errore non sia quella di GoogleMaps ma un'altra, forse quella di Cloud Messaging (anche se non sto utilizzando il cloud). Come puoi vedere negli altri commenti, ho generato un nuovo file JSON con l'API di Google Messaging ma non ha funzionato. –

1

Se per sbaglio è stato rimosso il tasto o non si può tornare indietro creare una nuova API credenziale here e il nome chiave esattamente “Android (auto creato da servizio Google)”. Ciò restituirà le credenziali ai json dei servizi di Google.

6

Sono stato in grado di risolvere questo problema con questi passaggi che non vengono risolti qui. Questa risposta NON abilita Cloud Messaging, sta solo recuperando la sua chiave del server. (Chiarire perché la mia risposta è stata cancellata per essere un 'duplicato' quando non lo è affatto).

Quindi, prima andare alla Firebase Console, quindi andare su Impostazioni progetto, quindi fare clic sulla scheda "Cloud Messaging". Guarda dove dice "chiave del server" e se non viene visualizzato il tasto lungo (non il numero "ID mittente") fai clic su "Rigenera chiave" e dovrebbe apparire una chiave lunga. Copia quella chiave e inseriscila nel tuo file google-services.json a: "api_key": [ {"current_key" : "key goes here"} ].

Questo metodo mi ha aiutato mentre nessuno degli altri funzionava, quindi spero che questo aiuti qualcuno.

Problemi correlati