Nie udało się zainicjować usługi GoogleService

113

Używam Map Google w mojej aplikacji na Androida. Utworzyłem klucz i dodałem niezbędne uprawnienia w pliku manifestu. Ale wkrótce uruchamiam aplikację, w debugerze pojawia się ten komunikat:

Nie udało się zainicjować usługi GoogleService, stan: 10, Brak oczekiwanego zasobu: „R.string.google_app_id” do inicjowania usług Google. Możliwe przyczyny to brak wtyczki google-services.json lub com.google.gms.google-services gradle.

Nie wiem, co się stało. Mapa działa dobrze i mogę z niej korzystać bez żadnych problemów. Mój plik gradle zawiera ten wpis:

kompiluj „com.google.android.gms: play-services: 8.4.0”

Na co on narzeka i jak to złagodzić?

Zach
źródło
czy to jest w Twoim manifeście: <meta-data android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue
Spójrz na krok 2: developers.google.com/identity/sign-in/android/start?hl=en
Clayton Oliveira,
Próbowałem obu, ale nadal otrzymuję tę samą wiadomość!
Zach,
1
Czy Twój apk usług odtwarzania urządzeń został zaktualizowany?
Abhigyan
Żadne z tych rozwiązań nie działało, ale aktualizacja pliku APK usług wydawała się załatwić sprawę!
midoriha_senpai

Odpowiedzi:

38

Musisz umieścić plik konfiguracyjny ( google-services.json) wygenerowany przez developer.google.com , jak wspomniano w drugim kroku oficjalnej dokumentacji tutaj

Proces jest prosty

  1. Możesz wybrać swój projekt lub utworzyć nowy.
  2. Następnie po wybraniu żądanych usług (w tym przypadku usługi mapowej) można wygenerować plik konfiguracyjny.

    Osoby, które przeprowadziły migrację do projektów Firebase, mogą uzyskać to samo, przechodząc do konsoli Firebase , wybierając swój projekt i pod ustawieniami znajdziesz plik konfiguracyjny.

  3. Następnie, jak podano w kroku 3 oficjalnych dokumentów tutaj

    Skopiuj google-services.jsonwłaśnie pobrany plik do katalogu app / lub mobile / swojego Androida

PS: W przypadku osób, które odrzucają tę odpowiedź, zostaw komentarz z informacją, dlaczego nie głosujesz.

Nishant.
źródło
6
Czy faktycznie potrzebujemy tego w naszych aplikacjach w nowej wersji Usług Google Play? A może tylko do logowania się przez Google? Wydaje się dziwne, że logi wyświetlają mi błędy tak, jakbym tego potrzebował, ale mogę nie
RED_
2
@Radix ... Poszedłem do udostępnionego przez Ciebie łącza, ale poprosił mnie o zarejestrowanie się w Google Sign In lub Google Cloud Messaging ... nic o mapie. Dowolny pomysł? Kopiowanie tego pliku json bezpośrednio pod / app jest trochę dziwne ... czy możesz to wyjaśnić? Dzięki wielkie!
Johnny Wu,
2
Mieliśmy już plik google-services.json w naszej aplikacji, ale musieliśmy go odtworzyć podczas aktualizacji do wersji 8.4.0.
Roy Solberg
1
ten sam problem, dodanie google-services.json nie pomogło, dziwna rzecz, że nie widzi mojego już aktywowanego gcm i chce za każdym razem utworzyć własny klucz serwera
Andrew V.
11
Zobacz poprawną odpowiedź od menedżera produktu w Google: stackoverflow.com/questions/34365369/…
Ahmed Mounir
52

[From Product Manager @ Google]

Możesz rozwiązać ten problem, pobierając i kopiując google-services.jsonplik dla swojej aplikacji na Androida, wykonując poniższe czynności:

  • Wybierz nazwę aplikacji / projektu i nazwę pakietu Androida z tego linku i kliknij Continue to Choose and configure services.
  • Kliknij Continue to Generate Configuration files.
  • Pobierz google-services.jsoni skopiuj plik do katalogu app/or mobile/module w projekcie systemu Android.

Jeśli wcześniej zaimportowałeś projekt Google do Firebase, możesz pobrać zaktualizowany plik google-services.json z konsoli Firebase w Ustawieniach projektu.

NIE KOPIUJ PROJECT_NUMBER zgodnie z sugestią jednej z innych odpowiedzi, ponieważ google_app_id odnosi się do Twojej aplikacji w projekcie, a nie do samego projektu.

Sriram
źródło
1
W przypadku osób korzystających z wtyczki gradle-experimental plik google-services.json nie przyniesie bezpośredniego efektu. Aby obejść problem, zobacz stackoverflow.com/a/38097895/457137 .
zevoid
Dlaczego dołączenie pliku json jest obowiązkowe? Dlaczego nie mogę podać identyfikatora w kodzie w czasie wykonywania?
der_michael,
Plik trafia do katalogu / aplikacji , a nie katalogu najwyższego poziomu?
IgorGanapolsky
11

W moim przypadku przyczyną tego błędu było to, że wtyczka usług Google dla Gradle i biblioteka usług Play były wersjami niekompatybilnymi. Instrukcje dotyczące kompatybilnych wersji:

1) Dodaj zależność do build.gradle na poziomie projektu:

classpath 'com.google.gms:google-services:1.5.0-beta2'

2) Dodaj wtyczkę do build.gradle na poziomie aplikacji:

apply plugin: 'com.google.gms.google-services'

3) Jeśli używasz Android Studio, jest to ciąg znaków, który należy dodać do sekcji zależności w pliku build.gradle aplikacji:

dependencies {
  compile "com.google.android.gms:play-services:8.3.0"
}

Źródło: https://developers.google.com/cloud-messaging/android/client

13rac1
źródło
1
Dzięki, ale to nie zadziałało - Android Studio nalega, że ​​mam również zainstalowany plik google-services.json, chociaż uważałem, że jest to niepotrzebne, jeśli wykonałeś trzy powyższe kroki, które powinny przesłonić potrzebę pliku? Co prowadzi mnie do pytania: po co mi system logowania użytkownika Google, jeśli wszystko, co zapewniam, to podstawowe mapowanie?
iaindownie,
1
Mojego rozwiązania nie było na liście, więc odpowiedziałem na pytanie, aby dać innym potencjalne rozwiązanie tego problemu. W twoim przypadku możesz mieć zainstalowane dodatkowe biblioteki. Spróbuj użyć tylkocom.google.android.gms:play-services-maps:8.4.0
13rac1
@eosrei, używając tylko com.google.android.gms: play-services-maps: 8.4.0 działało dla mnie, dzięki!
akshay7692
4

Spotkałem ten sam problem i rozwiązałem go zgodnie z oficjalnym rozwiązaniem .

Oto kroki:

  1. pobierz plik konfiguracyjny google-services.jsonz tego linku .

  2. Skopiuj google-services.jsonwłaśnie pobrany plik do katalogu app / lub mobile / swojego projektu Android Studio.

  3. Dodaj zależność do build.gradle na poziomie projektu:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. Dodaj wtyczkę do build.gradle na poziomie aplikacji:

    apply plugin: 'com.google.gms.google-services'
  5. Dodaj tę zależność do build.gradle na poziomie aplikacji:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
Będzie
źródło
1
Myślę, że lepiej jest użyć com.google.gms: google-services: 1.5.0, ponieważ jest to lepsze niż wersja beta, aby usunąć nieprzewidziane błędy w aplikacji.
Andrew V.
@AndrewV. Tak, zgadzam się. Wersja „1.5.0-beta2” została skopiowana z linku, który podałem powyżej.
Będzie
1

Dla tych, którzy napotykają ten problem, nawet po prawidłowym skonfigurowaniu usług odtwarzania i umieszczeniu google-services.jsonpliku w project/appfolderze, rzeczywistym rozwiązaniem jest

Build > Rebuild Project

Prawdopodobnie z powodu faktu, że ciągi z pliku json nie są integrowane ze skompilowanymi zasobami, dopóki nie zostanie wykonana pełna przebudowa.

anandbibek
źródło
1

W przypadku Xamarin / Visual Studio Mac musiałem dodać to na dole mojego Droid.csproj

<Target Name="ProcessGoogleServicesJson" Condition=" '@(GoogleServicesJson)' != '' AND '$(AndroidApplication)' == 'True' AND '$(DesignTimeBuild)' != 'True'" BeforeTargets="$(ProcessGoogleServicesJsonBeforeTargets)" AfterTargets="$(ProcessGoogleServicesJsonAfterTargets)">
<Message Text="Using ProcessGoogleServicesJson override" Importance="high" />
<ProcessGoogleServicesJson GoogleServicesJsons="@(GoogleServicesJson)" IntermediateOutputPath="$(IntermediateOutputPath)" MonoAndroidResDirIntermediate="$(MonoAndroidResDirIntermediate)" AndroidPackageName="$(_AndroidPackage)">
    <Output ItemName="_AndroidResourceDest" TaskParameter="GoogleServicesGeneratedResources" />
    <Output ItemName="FileWrites" TaskParameter="GoogleServicesGeneratedResources" />
</ProcessGoogleServicesJson>
<ItemGroup>
    <FileWrites Include="$(IntermediateOutputPath)\ProcessGoogleServicesJson.stamp" />
</ItemGroup>

https://github.com/xamarin/GooglePlayServicesComponents/issues/64

stepheaw
źródło
0

Miałem wtedy ten sam problem. Udało mi się go rozwiązać, korzystając tylko z niezbędnej biblioteki usług odtwarzania, którą w moim przypadku jest GCM.

Zamiast tego com.google.android.gms:play-services:8.4.0używam com.google.android.gms:play-services-gcm:8.4.0. Zobacz tutaj aby uzyskać więcej informacji; rozwiązuje to również problem multidex.

Następnie zastosowałem podejście @Radix i @ Alexander, aby usunąć komunikat GCM został wyprowadzony w logcat dotyczący pliku google-services.json.

emen
źródło
0

Możesz zmienić versionCodei versionNameswojej aplikacji w pliku Gradle.

F. Milliard
źródło
0

Szybko naprawić użyłem jest do podpisania wyłączyć. Jeśli nie chcesz tworzyć kodu produkcyjnego, możesz ustawić wariant kompilacji na debugowanie, localOldDebug lub localDebug.

Kliknij opcję Buduj warianty w lewym dolnym rogu w Android Studio.

jak wyłączyć-generowane-podpisane-apk-android-studio

Dudas
źródło
można zadać pytanie jako komentarz
jjj
-2

Mam tylko inne rozwiązanie, które przypadkowo usunąłem

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

Dodaj to i pracuj, jest dla nowego rozwiązania

Cazs
źródło