Brak klucza api_key / bieżącego klucza w usługach Google 3.0.0

157

Odkąd zaktualizowałem projekt do najnowszej wersji usług i bibliotek Google (9.0.0), mam ten dziwny problem:

Błąd kompilacji

Konsola klasy:

:app:processDebugGoogleServices
Parsing json file: /Users/cyrilmorales/Documents/Projects/mobilemeans-punainenristi/app/google-services.json
:app:processDebugGoogleServices FAILED
Error:Execution failed for task ':app:processDebugGoogleServices'.
> Missing api_key/current_key object
Information:BUILD FAILED

build.gradle (root):

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0-alpha1'
    classpath 'com.google.gms:google-services:3.0.0'
}

build.gradle (aplikacja):

dependencies {
    ....
    compile 'com.google.android.gms:play-services-analytics:9.0.0'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    compile 'com.google.android.gms:play-services-maps:9.0.0'
    compile 'com.google.android.gms:play-services-location:9.0.0'
    ...
}
apply plugin: 'com.google.gms.google-services'

Jednak działa dobrze z bibliotekami usług Play w wersji 8.4.0 i usługami Google 2.1.0

Masz pomysł na rozwiązanie?

palmsnipe
źródło
Używam map i mam zdefiniowany api_key w pliku AndroidManifest.xml. Czy masz tam api_key? Coś takiego <meta-data android: name = "com.google.android.geo.API_KEY" android: value = "AIzaSdfdfdfdfdfdfdfdRVxThQsNaqY" />
Grzegorz Bielański
Tak, mam to. Manifest jest dobrze skonfigurowany, zawsze działał… aż do teraz.
palmsnipe

Odpowiedzi:

162

Wygeneruj nowy plik konfiguracyjny (google-services.json) z: https://developers.google.com/cloud-messaging/android/client#get-config

Nowy plik konfiguracyjny "api_key": [ { "current_key": XXX } ]w sekcji klienta

Aktualizacja: lub ręcznie włączona usługa w konsoli programisty i wygeneruj klucz.

Jozka Jozin
źródło
1
Nowo znajduje się w pliku konfiguracyjnym „api_key”: [{"current_key": XXX}]
Jozka Jozin
1
Który klucz API powinien tam iść?
Marco Zanetti
8
Musisz włączyć obsługę wiadomości w chmurze, nawet jeśli jej nie używasz, i wygenerować nowy plik json. Po włączeniu Cloud Messaging otrzymasz klucz API, który jest do tego potrzebny.
Rafael Gutiérrez
2
Mam klucz API w pliku JSON, włączając Cloud Messaging API "api_key": [{"current_key": "the_api_key"}], ale nadal nie działa. Naprawdę nie wiem, co w tym złego. : - /
Marco Zanetti
7
Kto wie, do czego służy ten api_key? Bez tego działało dobrze wcześniej ...
Pavel Biryukov
89

Dodanie pustej bieżącej wartości klucza w pliku google-services.json rozwiązało ten problem

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

Ajax - Max
źródło
1
Pomyślałem, że dodam, że wartość „api_key” znajduje się w wartości „client”
stycznia
2
@Ajax -the Max: Dla mnie to też zadziałało. Czy mógłbyś być tak miły i wyjaśnić, dlaczego to działa?
Pineda
1
wydaje się, że jest to najlepsze rozwiązanie w przypadku korzystania ze starego przesyłania wiadomości w chmurze GMS. Nowy plik konfiguracyjny wyklucza klucz GMS zamiast dodawać Firebase.
Gordon W
34

Tak, ponieważ po raz pierwszy korzystam z Firebase, widzę to samo. Kliknij menu aplikacji i kliknij „Zarządzaj”.

wprowadź opis obrazu tutaj

możesz ponownie pobrać google-services.json.

wprowadź opis obrazu tutaj

Htoo Aung Hlaing
źródło
2
tak, pobrałem go ponownie i następnym razem był to większy plik i to rozwiązało problem
Hatem Badawi
1
Mogę potwierdzić: zarejestrowałem się w Firebase Analytics i automatycznie pobrałem plik google-services.json bez klucza API. Następnie pobrałem go ręcznie w ten sposób, a klucz API znajdował się w pliku json.
chichilatte
Jaki jest adres URL prowadzący do tego panelu?
Sean Beach
9

Dla wszystkich, którzy mają ten problem, na razie musisz dodać dowolną usługę do swojej aplikacji na https://developers.google.com/cloud-messaging/android/client#get-config

W moim przypadku dodałem admob (mam już analytics i gcm), a następnie plik został wygenerowany za pomocą api_key.

Myślę, że to błąd i wkrótce zostanie naprawiony, do tego czasu zrób to.

Elvis Oliveira
źródło
rzeczywiście jest błąd ... musiałem też dodać zaproszenia do aplikacji, aby uzyskać nowy plik json
Jivraj S Shekhawat
cześć, dodałem nową konfigurację, ale IDE nadal narzeka, że ​​brakuje w nim api_key
kod
Zanim otworzysz IDE, możesz sprawdzić plik konfiguracyjny, aby upewnić się, że s 'api_key' value. Clearly therejest błąd, więc musimy wypróbować różne podejścia, aby rozwiązać problem.
Elvis Oliveira
czy to oznacza, że ​​za każdym razem, gdy dodam nową zależność do mojego pliku gradle, muszę pobrać nowy plik google-services.json, ponieważ generuje on nowy api_key?
Ashok Bijoy Debnath
8

Chociaż Jozka Jozin zaakceptowała odpowiedź i jej komentarze, Cloud Messaging nie jest ani powiązany, ani wymagany.

Niemniej jednak ponowne generowanie google-services.jsonjest kluczem do rozwiązania (więc głosowałem na niego). Poniżej przedstawiam to, co zrobiłem:

Jak wiesz, możesz wygenerować plik konfiguracyjny dla Analytics z przewodnika Google Developers Guide .

1: Wybierz swoją aplikację.

1) wybierz aplikację

2: Zamknij wyskakujące okienko! Ukrywa ...

Zamknij wyskakujące okienko!

3: OPCJA ADMOB!

ukryta opcja admob

4, oczywiście, wybierz i włącz to!

Odblokuj to!

5: Teraz możemy poprawnie wygenerować pliki konfiguracyjne!

generować pliki konfiguracyjne

6: Udało się! Tym razem plik konfiguracyjny powinien odpowiednio zawierać api_key .

zrobiliśmy to!

Wniosek: interfejs użytkownika interaktywnego narzędzia do generowania jest nieco zagmatwany ...

hata
źródło
1
dzięki, udało mi się pobrać nową konfigurację, ale IDE nadal narzeka, że ​​brakuje w nim api_key
kod
Bit mylące ... To jest przerażające !!! Kudos za jasne wyjaśnienie.
Niels,
7

Możesz google-services.jsonponownie pobrać plik.

Kroki do pobrania:

1). Kliknij górne menu aplikacji w Firebasekonsoli.

2). Kliknij Zarządzaj.

3). Znajdziesz Download the latest configopcję pliku, pobierz i zamień google-services.jsonplik w swojej aplikacji.

Anubhav
źródło
4

Najpierw w pliku JSON

Zastąpić

"api_key": []

z

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

Wtedy kompilacja gradle powiedzie się, ale po uruchomieniu aplikacji mogą pojawić się błędy, takie jak następujące.

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
    File1: C:\Users\bucky\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.2.2\d20be6a5ddd6f8cfd36ebf6dea329873a1c41f1b\jackson-core-2.2.2.jar
    File2: C:\Users\bucky\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.2.2\3c8f6018eaa72d43b261181e801e6f8676c16ef6\jackson-databind-2.2.2.jar
    File3: C:\Users\bucky\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.2.2\285cb9c666f0f0f3dd8a1be04e1f457eb7b15113\jackson-annotations-2.2.2.jar

Aby rozwiązać ten problem, możesz dodać następujące elementy do pliku app.gradle. U mnie zadziałało.

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }

Edycja: pokazał mi błąd później podczas budowania pliku APK. Musiałem więc ponownie pobrać plik json. Po 2 próbach otrzymałem plik json z prawidłowym kluczem API.

pieseł
źródło
3

Jeśli nie używasz Firebase, prawidłowy link do wygenerowania pliku konfiguracyjnego google-services.json znajduje się tutaj .

Phileo99
źródło
2

Udało mi się rozwiązać ten problem za pomocą tych kroków, na które nie ma tutaj odpowiedzi. Ta odpowiedź NIE włącza przesyłania wiadomości w chmurze, a jedynie pobiera klucz serwera.

Dlatego najpierw przejdź do konsoli Firebase, a następnie przejdź do ustawień projektu, a następnie kliknij kartę „Komunikacja w chmurze”. Spójrz, gdzie jest napisane „klucz serwera”, a jeśli nie ma wyświetlanego długiego klucza (poza numerem „ID nadawcy”), kliknij „Regeneruj klucz”. Powinien teraz pojawić się długi klucz. Skopiuj ten klucz i umieścić ją w pliku google-services.json pod adresem: "api_key": [ {"current_key" : "key goes here"} ].

Ta metoda pomogła mi, gdy żadna z pozostałych nie działała, więc mam nadzieję, że to komuś pomoże.

David Velasquez
źródło
2

wprowadź opis obrazu tutaj

Kliknij Przegląd -> Ikona koła zębatego -> Ustawienia projektu.

wprowadź opis obrazu tutaj

Przejdź do Pobierz najnowszą konfigurację i kliknij przycisk google-service.json, aby pobrać plik, zapisać go w folderze aplikacji i ponownie skompilować. Cieszyć się!

Pinkesh Darji
źródło
2

Musisz dodać odciski cyfrowe certyfikatów SHA do swojego projektu, a następnie ponownie pobrać plik google-services.jason, który powinien automatycznie zawierać ciąg „api_key”: [{"current_key": "xxxxxx"}].

Możesz wyświetlić następującą stronę, aby zobaczyć, jak wygenerować odciski palców:

https://developers.google.com/android/guides/client-auth

W systemie Windows po prostu wykonaj następujące polecenie i użyj androida jako hasła do celów debugowania:

keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
Hexise
źródło
1

Korzystanie z Firebase

GoogleServices'. > Missing api_key/current_key object

Ten błąd wystąpił po zaktualizowaniu istniejącego projektu do nowych usług Firebase. Wygenerowany plik google-service.json pobrany ze strony ustawień projektu Firebase nie zawierał api_keypotrzebnych.

Z innych odpowiedzi tutaj wygląda na to, że należy dodać Google / Firebase Cloud Messaging (GCM / FCM), aby zostało to api_keyuwzględnione w google-service.jsonpliku.

Dodałem więc zależności od Firebase FCM przed ponownym pobraniem pliku i tym razem klucz został dołączony.

Uwzględnij FCM (GCM)

dependencies {
     compile 'com.google.firebase:firebase-messaging:9.0.0'
}
TouchBoarder
źródło
1

Jeśli nie chcesz rekonfigurować i pobierać google-services.jsonpliku, możesz pobrać klucz API bezpośrednio z konsoli Firebase. Po prostu idź do

Omówienie> Dodaj kolejną aplikację> Internet

Dostaniesz konfigurację bazy danych, która będzie zawierać apiKey. Po prostu skopiuj tę wartość i umieść ją w current_keywartości oznaczonej poniżej XXX

"api_key": [{ "current_key": "XXX" }]
Shakti
źródło
0

W przypadku migracji do Firebase:

upewnij się, że w ustawieniach projektu dodano co najmniej jeden odcisk palca i ponownie pobierz plik google-services.json

Su-Au Hwang
źródło
Dzięki stary, poszedłem zgodnie z instrukcjami laboratorium kodu i na początku nie dodałem klucza SHA1. Później musiałem dodać jako mój ApiKey - brakowało CurrentKey. Nie jestem pewien, czy tak było, czy nie. Ale to rozwiązało mój problem.
Rana Ranvijay Singh
0

Jeśli używasz firebaes, musisz skopiować serverKey z firebase do google-services.json

 "api_key": [{ "current_key": "SERVER_KEY"}

Aby uzyskać klucz serwera, przejdź do ProjectOverview> Project Settings> CloudMessaging> Copy LUB wygeneruj i skopiuj serverKey.

Tarun Voora
źródło
0

dodaj to do swojego pliku google-service.json. znajdziesz go pod app / google-service.json

"api_key": [{"current_key": "twój-klucz-google-api"}]

Hamza Fareed
źródło