GoogleService konnte nicht initialisiert werden

113

Ich verwende Google Maps in meiner Android-Anwendung. Ich habe den Schlüssel erstellt und die erforderlichen Berechtigungen in die Manifestdatei eingefügt. Aber sobald ich die Anwendung starte, erhalte ich folgende Meldung im Debugger:

GoogleService konnte nicht initialisiert werden, Status: 10, Fehlende erwartete Ressource: 'R.string.google_app_id' zum Initialisieren von Google-Diensten. Mögliche Ursachen sind fehlende google-services.json oder com.google.gms.google-services gradle Plugin.

Ich bin mir nicht sicher, was falsch ist. Die Karte funktioniert einwandfrei und ich kann sie ohne Probleme verwenden. Meine Gradle-Datei hat diesen Eintrag:

kompiliere 'com.google.android.gms: play-services: 8.4.0'

Worüber beschwert es sich und wie lindere ich es?

Zach
quelle
ist dies in Ihrem Manifest: <Metadaten android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue
Schauen Sie sich den Schritt 2 an: developer.google.com/identity/sign-in/android/start?hl=de
Clayton Oliveira
Ich habe beide ausprobiert, bekomme aber immer noch die gleiche Nachricht!
Zach
1
Ist Ihr Gerät Play Services Apk aktualisiert?
Abhigyan
Keine dieser Lösungen funktionierte, aber die Aktualisierung der Services APK schien den Trick zu tun!
midoriha_senpai

Antworten:

38

Sie müssen google-services.jsondie von developer.google.com generierte Konfigurationsdatei ( ) platzieren , wie im zweiten Schritt der offiziellen Dokumentation hier erwähnt

Der Prozess ist einfach

  1. Sie können Ihr Projekt auswählen oder ein neues erstellen.
  2. Nachdem Sie die gewünschten Dienste ausgewählt haben (in diesem Fall den Karten-Dienst), können Sie die Konfigurationsdatei generieren.

    Personen, die auf Firebase-Projekte migriert sind, können dasselbe erhalten, indem sie zur Firebase-Konsole gehen , Ihr Projekt auswählen und unter Einstellungen die Konfigurationsdatei finden.

  3. Dann wie in Schritt 3 der offiziellen Dokumente hier zitiert

    Kopieren google-services.jsonSie die gerade heruntergeladene Datei in das Verzeichnis app / oder mobile / Ihres Android

PS: Wenn Leute diese Antwort ablehnen, hinterlassen Sie bitte einen Kommentar, warum Sie sie ablehnen.

Nishant.
quelle
6
Benötigen wir dies tatsächlich in unseren Apps mit der neuen Version von Google Play Services? Oder ist es nur für Google anmelden? Scheint seltsam, dass die Protokolle mir Fehler werfen, als ob ich es brauche, aber ich könnte nicht
RED_
2
@Radix ... Ich bin zu dem Link gegangen, den Sie geteilt haben, aber ich wurde aufgefordert, mich für Google Sign In oder Google Cloud Messaging zu registrieren. Nichts über die Karte. Irgendeine Idee? Außerdem ist das Kopieren dieser JSON-Datei nach rechts unter / app etwas seltsam ... können Sie das klarstellen? Vielen Dank!
Johnny Wu
2
Wir hatten bereits die Datei google-services.json in unserer App, mussten sie jedoch beim Upgrade auf 8.4.0 neu erstellen.
Roy Solberg
1
Das gleiche Problem, das Hinzufügen von google-services.json hat nicht geholfen, seltsame Sache, dass es meine bereits aktivierte gcm nicht sieht und jedes Mal einen eigenen Serverschlüssel erstellen möchte
Andrew V.
11
Siehe die richtige Antwort hier vom Produktmanager bei Google: stackoverflow.com/questions/34365369/…
Ahmed Mounir
52

[Vom Produktmanager @ Google]

Sie können dieses Problem beheben, indem Sie die google-services.jsonDatei für Ihre Android-App herunterladen und kopieren, indem Sie die folgenden Schritte ausführen:

  • Wählen Sie über diesen Link Ihren App- / Projektnamen und den Android-Paketnamen aus und klicken Sie auf Continue to Choose and configure services.
  • Klicken Sie auf Continue to Generate Configuration files.
  • Laden Sie google-services.jsondie Datei herunter und kopieren Sie sie in das Verzeichnis app/oder mobile/module in Ihrem Android-Projekt.

Wenn Sie Ihr Google-Projekt zuvor in Firebase importiert haben, können Sie die aktualisierte Datei google-services.json über die Firebase-Konsole unter Projekteinstellungen abrufen.

KOPIEREN SIE die PROJECT_NUMBER NICHT wie in einer der anderen Antworten vorgeschlagen, da die google_app_id auf Ihre App innerhalb eines Projekts und nicht auf das Projekt selbst verweist.

Sriram
quelle
1
Für Benutzer, die das Gradle-Experimental-Plugin verwenden, wird google-services.json nicht direkt wirksam. Eine Problemumgehung finden Sie unter stackoverflow.com/a/38097895/457137 .
Zevoid
Warum muss die JSON-Datei eingefügt werden? Warum kann ich die ID zur Laufzeit nicht im Code angeben?
der_michael
Datei geht in / App- Verzeichnis, nicht Top-Level-Verzeichnis?
IgorGanapolsky
11

In meinem Fall war die Ursache für diesen Fehler, dass das Google Services-Plugin für Gradle und die Play Services-Bibliothek inkompatible Versionen waren. Anleitung für kompatible Versionen:

1) Fügen Sie die Abhängigkeit zu Ihrem build.gradle auf Projektebene hinzu:

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

2) Fügen Sie das Plugin zu Ihrem build.gradle auf App-Ebene hinzu:

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

3) Wenn Sie Android Studio verwenden, ist dies die Zeichenfolge, die dem Abhängigkeitsabschnitt der build.gradle-Datei Ihrer Anwendung hinzugefügt werden soll:

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

Quelle: https://developers.google.com/cloud-messaging/android/client

13rac1
quelle
1
Vielen Dank, aber das hat bei mir nicht funktioniert. Android Studio besteht darauf, dass ich auch die Datei google-services.json installiert habe, obwohl ich es für unnötig hielt, wenn Sie die drei oben genannten Schritte befolgt haben, die die Notwendigkeit der Datei überschreiben sollten. Was dazu führt, dass ich frage: Warum brauche ich ein Google User Sign-In-System, wenn ich nur eine einfache Zuordnung anbiete?
iaindownie
1
Meine Lösung wurde nicht aufgelistet, daher beantwortete ich die Frage, um den Menschen eine weitere mögliche Lösung für dieses Problem zu bieten. In Ihrem Fall sind möglicherweise zusätzliche Bibliotheken installiert. Versuchen Sie nur diecom.google.android.gms:play-services-maps:8.4.0
13rac1
@eosrei, nur mit com.google.android.gms: play-services-maps: 8.4.0 hat bei mir funktioniert, danke!
Akshay7692
4

Ich traf das gleiche Problem und löste es nach der offiziellen Lösung .

Hier sind die Schritte:

  1. Holen Sie sich die Konfigurationsdatei google-services.jsonvon diesem Link .

  2. Kopieren google-services.jsonSie die gerade heruntergeladene Datei in das Verzeichnis app / oder mobile / Ihres Android Studio-Projekts.

  3. Fügen Sie die Abhängigkeit zu Ihrem build.gradle auf Projektebene hinzu:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. Fügen Sie das Plugin zu build.gradle auf App-Ebene hinzu:

    apply plugin: 'com.google.gms.google-services'
  5. Fügen Sie diese Abhängigkeit zu build.gradle auf App-Ebene hinzu:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
Wille
quelle
1
Ich denke besser, com.google.gms: google-services: 1.5.0 zu verwenden, da es besser als die Beta-Version ist, einige unvorhersehbare Fehler in Ihrer App zu entfernen.
Andrew V.
@ AndrewV. Ja, ich stimme zu. Die Version "1.5.0-beta2" wurde von dem oben angegebenen Link kopiert.
Will
1

Für diejenigen, die dieses Problem auch nach dem korrekten Einrichten der Wiedergabedienste und dem Ablegen der google-services.jsonDatei in einem project/appOrdner haben, ist die eigentliche Lösung:

Build > Rebuild Project

Möglicherweise aufgrund der Tatsache, dass Zeichenfolgen aus der JSON-Datei erst nach einer vollständigen Neuerstellung in kompilierte Ressourcen integriert werden.

anandbibek
quelle
1

Für Xamarin / Visual Studio Mac musste ich dies am Ende meiner Droid.csproj hinzufügen

<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
quelle
0

Ich hatte damals das gleiche Problem. Konnte es lösen, indem nur die notwendige Play Services-Bibliothek verwendet wurde, in meinem Fall GCM.

Stattdessen com.google.android.gms:play-services:8.4.0benutze ich com.google.android.gms:play-services-gcm:8.4.0. Sehen Sie hier für weitere Informationen; Dies löst auch das Multidex-Problem.

Dann habe ich sowohl @Radix als auch @ Alexanders Ansatz angewendet, um die Nachricht zu entfernen, die GCM im Logcat bezüglich des ausgegeben hat google-services.json.

emen
quelle
0

Sie können das versionCodeund versionNameIhrer App in Ihrer Gradle-Datei ändern .

F. Milliard
quelle
0

Eine schnelle Lösung, die ich verwendet habe, ist das Deaktivieren der Signatur. Wenn Sie keinen Produktionscode erstellen möchten, können Sie Ihre Build-Variante auf debug, localOldDebug oder localDebug setzen.

Klicken Sie in Android Studio unten links auf Build Variants.

How-to-Disable-Generated-Signed-Apk-Android-Studio

Dudas
quelle
könnte Frage als Kommentar stellen
jjj
-2

Haben Sie einfach eine andere Lösung, die ich versehentlich entferne

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

Fügen Sie dies hinzu und arbeiten Sie, ist für eine neue Lösung

Cazs
quelle