Ich habe dieses Tutorial befolgt, um Google SignOn zum Laufen zu bringen: https://developers.google.com/identity/sign-in/Android/start-integrating
Wenn ich meine Anwendung lokal mit einem virtuellen Gerät ausführe, funktioniert dies einwandfrei. Wenn ich sie jedoch per Debugging auf meinem Gerät bereitstelle oder wenn ich eine signierte JAR-Datei generiere und sie manuell kopiere, GoogleSignInResult
gibt false
immer eine INTERNAL ERROR
-Nachricht zurück.
Ich habe seit geraumer Zeit Probleme, Google Login verwenden zu können, wenn die Anwendung über Debug auf meinem Gerät bereitgestellt wird. Jede Hilfe wird sehr geschätzt!
Lösung für mein Problem:
Dort, wo Sie die Json-Datei herunterladen, müssen Sie den Code kopieren, den Sie mit dem Java-Key-Tool generieren können. Ich habe das ein paar Mal hintereinander total vermisst.
Vermutlich fehlt Ihnen die Registrierung der Dev-Konsole. Es ist üblich, dass Entwickler über mehrere Signierungszertifikate verfügen: Debug-Schlüsselspeicher, Testumgebungszertifikat, Produktionssignaturzertifikat. Das signing cert SHA1 + -Paketname identifiziert eindeutig einen Android-Client und muss einzeln in der dev-Konsole registriert werden.
Im folgenden Blogpost finden Sie weitere Informationen zur Registrierung von OAuth-Kunden:
http://Android-developers.blogspot.com/2016/03/Registrieren-oauth-clients-for-google.html
Oder sehen Sie diesen Beitrag: Testen Sie Google Signin auf Android in der Entwicklungsphase
Ich hatte das gleiche Problem und es lag daran
apply plugin: 'com.google.gms.google-services'
nicht am Ende der App build.gradle.
Ich habe es durch einen Blick auf die Gradle Console herausgefunden. Es wurden keine Fehler gemeldet.
Grund für das kann sein: - Möglicherweise verwenden Sie ein nicht signiertes apk, um Ihre App zu testen.
Gehen Sie zu Build-> Generated Signed APK -> und unterschreiben Sie es mit dem Schlüssel, den Sie verwendet haben, um Ihren SHA1 Fingerprint für die ClientID in der Google Developer Console zu verwenden
Führen Sie app-debug.apk aus und fertig!
BEARBEITET
Die Antwort leitet sich von this ab, da sie auch für dieses Problem anwendbar ist
Ich füge die Antwort hier bei
Das Problem ist auf das Signaturzertifikat und den Fingerabdruck des SHA-1-Zertifikats zurückzuführen. Fügen Sie die folgenden SHA-1-Zertifikate Ihren googleApi-Anmeldeinformationen hinzu. Es gibt 2 Fälle
1.Falls Sie sich im Debug-Modus befinden, fügen Sie den SHA-1-Fingerabdruck hinzu, der durch Folgendes erzeugt wird
"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "%USERPROFILE%\.Android\debug.keystore" -alias androiddebugkey -storepass Android -keypass Android
2. Wenn Sie Signing Config konfiguriert haben, verwenden Sie den SHA-1-Fingerabdruck, der wie folgt generiert wird
"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "[youKeyPath]\youKey.jks"
Ich empfehle Ihnen, beide SHA-1-Fingerabdrücke in Ihre googleApi-Anmeldeinformationen aufzunehmen
Zusätzlich zu den obigen Antworten stieß ich auf einen Fall, in dem das Problem aufgrund einer nicht übereinstimmenden Konfiguration der Datei google-services.json verursacht wurde:
Es ist auch möglich, dass die clientId im GoogleSignInOptions Builder wie folgt speziell zugewiesen wurde:
String serverClientId = "xxxxx-yyyy.apps.googleusercontent.com";
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(serverClientId)
.build();
In diesem Fall ist es möglich, den Verweis auf die serverClientId und den requestIdToken-Aufruf wie folgt zu entfernen:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
Dies würde dann auf google-services.json im Gegensatz zum hartcodierten Wert während der Konfiguration zurückgreifen.
Ich hoffe, es erspart jemandem die Mühe, die ich versucht hatte, den Fehler in meinem Projekt zu diagnostizieren.