Ich versuche, mithilfe der neuen Google Play Services 8.3 eine Benutzer-Token-ID abzurufen. Wie dokumentiert übergebe ich die Server-ID:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
aber ich bekomme immer noch ein nicht erfolgreiches Ergebnis wie folgt:
{statusCode=unknown status code: 12501, resolution=null}
und hier dokumentiert GoogleSignInStatusCodes
Die Anmeldung wurde vom Benutzer abgebrochen. dh der Benutzer hat einige der Anmeldeauflösungen storniert, z. B. Kontoauswahl oder OAuth-Zustimmung.
Konstanter Wert: 12501
Das ist nicht mein Fall, da ich bereits einen Account ausgewählt habe. Irgendeine Idee, was der Grund sein könnte?
resultCode == Activity.RESULT_CANCELED
) zu verarbeiten. Verwenden von GMS 8.4.0.Antworten:
Ich hatte genau das gleiche Problem und habe die Lösung gefunden.
Wenn Sie der Dokumentation hier folgen: https://developers.google.com/identity/sign-in/android/start-integrating
Im ersten Schritt werden Sie aufgefordert, die Konfigurationsdatei zu erstellen (die eine OAuth 2.0-Client-ID für Sie erstellt und in die Datei google-services.json einfügt).
Später wird erneut beschrieben, wie eine OAuth 2.0-Client-ID erstellt wird. Diesmal müssen Sie dies jedoch für eine Webanwendung tun
Und das ist der verwirrende Teil! (zumindest für mich), weil ich nur die für die Android OAuth erstellte Client-ID genommen und keine neue für die Webanwendung erstellt habe (ich dachte, die Dokumentation sei nur redundant oder so)
Wie es heißt, ist es dieses und nur dieses, das Sie als Parameter der Methoden requestIdToken oder requestServerAuthCode verwenden müssen .
Vergessen Sie die Verwendung der Android OAuth ID in diesen Methoden, da Sie dann ständig die hässliche Statuscode-Antwort 12501 erhalten.
Ich denke, das Hauptproblem ist, dass die Dokumentation diesbezüglich etwas verwirrend ist. Oder vielleicht, weil es etwas seltsam ist, dass Sie zwei OAuth-IDs erstellen müssen.
Zusammenfassend benötigen Sie also ZWEI OAuth-IDs, eine für Android und eine für Webanwendungen, und Sie müssen jede an der richtigen Stelle einstellen.
quelle
Ich hatte damit zu kämpfen und verschwendete fast eine Woche damit.
So habe ich es geschafft.
Die letzten drei Schritte 6, 7 und 8 müssen Sie tatsächlich erledigen. Wenn Sie das Projekt direkt ausführen, ist APK nicht mit dem Debug-Keystore signiert und Google erkennt es überhaupt nicht.
quelle
Ich hatte das gleiche Problem, nachdem die Forschungslösung wieder aufgenommen wurde, dass server_client_id einen falschen Wert enthielt oder Ihre google_services.json oauth_client mit client_id nicht enthielt, die bei Ihrem Keystore registriert war.
requestIdToken(getString(R.string.server_client_id))
R.string.server_client_id
Verwenden Sie die OAuth 2.0-Client-ID für die Webanwendung . Und OAuth Client ID für Android in google_services.json verwendenNormalerweise verwenden wir 2 Keystore, 1 mit Debug-Keystore und 1 mit signiertem Keystore für veröffentlichte. Wenn Sie also im Debug- und Veröffentlichungsmodus benötigen, registrieren Sie Ihre OAuth-Client-ID für Android zweimal, 1 mit SHA1 aus dem Debug-Keystore und 1 aus dem signierten Keystore für veröffentlicht.
kleines Beispiel in meiner google_services.json
"oauth_client": [ { "client_id": "xxx-client-id.com", "client_type": 1, "android_info": { "package_name": "com.app.android", "certificate_hash": "xxxhash" } }, { "client_id": "yyy.client-id.com", "client_type": 1, "android_info": { "package_name": "com.app.android", "certificate_hash": "yyyhash" } } ],
quelle
Ich hatte das gleiche Problem, weil ich eine Client-ID vom Anwendungstyp Android erstellt habe
Stattdessen habe ich es gelöscht und eine Client-ID vom Typ Webanwendung erstellt, und dieses Problem wurde behoben.
quelle
Finden Sie heraus, wie Sie dieses Problem beheben können ... Beim Versuch, die Debug-Version meiner App auszuführen, wurde dieser Fehler angezeigt. Um dies zu beheben, fügen Sie einen Berechtigungsnachweis für Ihre Debug-App auf der Entwicklerkonsole und auch in den Google-Diensten hinzu .json.
das hat es für mich behoben!
quelle
Ich hatte das gleiche Problem und löste es mit der folgenden Lösung:
requestIdToken
Methode.quelle
Jetzt hab ich es verstanden.
Also müssen Sie zuerst den oberen Antworten folgen und sagen:
requestIdToken()
(Statuscode 12501 entfernen)Nicht mehr gültig Und hier kommt der letzte Teil: 3. Sie nicht anrufen können
requestIdToken()
undrequestEmail()
auf einmal. Zumindest in meinem Fall wurde ichResult: Status{statusCode=INTERNAL_ERROR, resolution=null}
durch Löschen losrequestEmail()
.Also viel Glück...
quelle
requestIdToken()
undrequestEmail()
kann sofort verwendet werden. Ich benutze es erfolgreich in meiner App.requestIdToken()
undrequestEmail()
gleichzeitig. Damit ist kein Problem.In meinem Fall musste ich auch überprüfen, ob das Debug-SHA-1 als gültiger OAuth-Android-Client hinzugefügt wurde.
quelle
12501
ist immer ein Konfigurationsfehler. Zusammen mit dem hier erwähnten Fall wird dies auch durch eine ungültige Server-Client-ID oder eine Nichtübereinstimmung des Paketnamens verursacht.Verwenden Sie die Webanwendung als server_client_id und nicht als Android-Anwendung
quelle
Ich hatte das gleiche Problem und bemerkte, dass 12501-Code zurückgegeben wurde, wenn mein Code
server_client_id
einen falschen Wert enthielt.Da es keine detaillierte Meldung gibt und die Dokumentation dieses Fehlercodes ziemlich schlecht ist, weiß ich nicht, ob Ihr Problem dieselbe Ursache hat wie meins.
Meine Anwendung basiert auf Android-Code aus diesem Beispiel (Klasse IdTokenActivity). Damit es funktioniert, musste ich auch die Google-Anmeldung in meine App integrieren:
server_client_id
quelle
Befindet sich Ihre apk im Debug-Modus? Ich denke es funktioniert nur mit einer signierten apk.
quelle
Stellen Sie Ihren Gradle als https://stackoverflow.com/a/35216421/5886475 ein
Setzen Sie server_client_id in string.xml. Es ist Ihre Web-Client-ID, nicht Android-Client
quelle
Ein Problem, das ich hatte, ist, dass der SHA-1, den ich wie mit dem falschen Alias generiert habe. Der Alias MUSS androiddebugkey sein . Also habe ich die Android OAuth ID in meine Datei google-service.json eingefügt. Ich habe die Webclient- ID auf requestIdToken () gesetzt . Und in meinem speziellen Fall habe ich den SHA-1 mit dem Alias androiddebugkey generiert .
google-services.json :
"oauth_client": [ { "client_id": "ANDROID OAUTH ID-.....apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "br.com.packagename", "certificate_hash": "SHA-1 HASH" } },{ "client_id": "WEB CLIEND ID......apps.googleusercontent.com", "client_type": 3 } ]
Unterzeichnungsteil:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken("WEB CLIEND ID......apps.googleusercontent.com") .requestEmail() .build();
quelle
Anstelle von
R.string.server_client_id
einfach verwendenR.string.default_web_client_id
.Wenn Sie die Datei google-services.json in die App kopieren , wird dieser Zeichenfolgenwert automatisch erstellt. Sie müssen den Schlüssel nicht von google-services.json nach string.xml kopieren. Es hat bei mir funktioniert.
quelle
Ich habe dieses Problem gelöst, indem ich in Android Studio auf Firebase-Unterstützung geklickt habe, was für Nicht-Firebase-Benutzer möglicherweise nicht relevant ist.
HINWEIS: Eine große Liste von Antworten in dieser Liste bestätigt definitiv eines. Google muss die Dokumentation aktualisieren und narrensicher halten.
quelle
Wenn keine der oben genannten Optionen funktioniert, überprüfen Sie, ob Ihre applicationId in app build.gradle mit Ihrem Paketnamen übereinstimmt.
quelle
Überprüfen Sie offensichtlich zuerst, ob Ihr Release-Schlüssel sha1 korrekt ist oder nicht. Wenn es jedoch immer noch nicht funktioniert und Sie Google Play Services 8.4.0 verwenden (z. B. 'com.google.android.gms: play-services: 8.4.0'), kann das Problem durch Ändern des GoogleSignInOption-Objekts behoben werden. Anstatt:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com") .build();
Sie müssen verwenden:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestScopes(new Scope(Scopes.PLUS_ME)) .requestEmail() .build();
Dies behebt den Fehler, der statusCode = INTERNAL_ERROR ODER statusCode = Fehler 12501 ODER statusCode = Fehler 12500 zurückgibt. Dann könnte dieses gso-Objekt zum Erstellen von GoogleApiClient verwendet werden, wie unten gezeigt:
mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API,gso) // .addApi(Plus.API, null) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) // .addScope(Plus.SCOPE_PLUS_LOGIN) .build();
quelle
Ich weiß nicht warum, aber SHA1 in Android Studio wird automatisch geändert und deshalb erhalte ich diesen Fehler. Um dies zu lösen, habe ich die SHA1 meiner Firebase-Projekteinstellungen mit der neuen SHA1 meines Android-Studios aktualisiert und es hat wieder funktioniert.
quelle
In meinem Fall meine Credentials für
Client ID for Android
auf Google APIs - Konsole enthalten nur die SHA-1 für meine Freilassung unterzeichnet APK . Android Studio verwendete den Standard-Debug-Keystore , um meine Debug-Builds zu signieren, und in diesem Fall tat dies der Debug-Keystore SHA-1 nicht mit dem Android-Client SHA-1 online überein. Meine Lösung bestand darin, die Debug-Builds einfach mit dem Release-Keystore zu signieren.Build/Edit Build Types...
Wählen Sie dann in Android Studio Ihren Debug-Build-Typ aus und stellen Sie sicher, dass Signing Config auf Ihr Release-Zertifikat eingestellt ist.quelle
Wenn Sie den Debug-Keystore zum Erstellen des Projekts verwenden, müssen Sie den SHA-1-Fingerabdruck von debug.keystore in der Firebase-Konsole hinzufügen .
So erhalten Sie SHA-1 von debug.keystore:
Mac / Linux:
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
Windows:
keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
https://developers.google.com/android/guides/client-auth
Das ist alles !
quelle
Ich hatte das gleiche Problem und den gleichen Fehler 12501 und keiner der oben genannten hat bei mir funktioniert.
Mein Problem war, dass ich die für mich generierte Google Default-Web-API verwendet habe. Nach dem Erstellen meiner eigenen Web-API verschwand der Fehler und funktionierte einwandfrei!
Dies sind Arbeitsschritte:
google-service.json
von der Firebase- Konsole generiert und in den App-Ordner gestellt.GoogleSignnOption
so was:
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken ("put the web app client Id that get from the link in developer console ") .requestEmail().build();
Tipp 1: Ich finde heraus, dass Sie sowohl Android- als auch Web-App-Client-ID erstellen sollten, damit dies funktioniert.
Tipp 2: Wenn Sie aus dem Iran , wie ich Ihnen den Benutzer von Google bekommen können , aber man kann nicht
AuthWithGoogle
und führtfail
inauth.signInWithCredential(credential)
und Sie hatten einen Proxy - Server für die Rückkehr wahr zu verwenden.Dies ist die funktionierende vollständige Quelle von FireBaseAuthDemo in Github:
hoffe hilf voll
quelle
Ich hatte auch dieses Problem, nachdem ich die Anweisungen von Google zum automatischen Signieren Ihrer App befolgt hatte . Wenn Sie diese Methode zum Signieren Ihrer Apps verwenden, müssen Sie den generierten Keystore-Fingerabdruck in Ihre API-Anmeldeinformationen aufnehmen.
Ich fand es weniger verwirrend, die
.jks
Datei in das/app
Verzeichnis meines Projekts zu stellen . Führen Sie auf jeden Fall diese Zeile darauf aus.keytool -list -v -keystore /home/user/keystores/android.jks
Sie werden aufgefordert, ein Passwort einzugeben. Ich bin mir nicht sicher, ob es das ist
Key Password
oderStore Password
weil meine gleich sind. : |Die Konsole spuckt eine Reihe von Zertifikatfingerabdrücken aus. Nehmen Sie den SHA1 und geben Sie ihn in Ihre API-Anmeldeinformationen in der Google API Developer's Console ein . Sie müssen es für den Android-Client eingeben,
OAuth 2.0 client IDs
obwohl Sie diese client_id nicht in Ihrer App verwenden. Wenn Sie andere APIs für Android verwenden, fügen Sie denselben SHA1 auch in die entsprechenden Schlüsselanmeldeinformationen unter einAPI keys
.quelle
Hier ist eine neue. Ich habe 6 Stunden lang versucht, mich mit der ID meiner Google Apps-Unternehmensdomäne beim Emulator anzumelden, ohne Erfolg, und 12501-Fehler erhalten. Aus Versehen habe ich meine persönliche Google Mail-ID ausprobiert und es hat funktioniert. Das Gleiche gilt, wenn ich mein Telefon mit meiner Unternehmens-ID ausprobiert habe. Es stellte sich heraus, dass der Emulator nicht über die richtigen Einstellungen für die Verwaltung mobiler Geräte verfügte, damit sich meine Unternehmens-ID anmelden konnte.
Wenn ich also auf dem Emulator mit dieser Unternehmens-ID testen möchte, muss ich Google Play Store und dann die MDM-Software installieren und konfigurieren.
quelle
Aufgrund meiner seltsamen Erfahrung mit diesem Fehler kann ich sagen, dass Sie auch versuchen müssen, Ihr Telefon neu zu starten, um diesen Fehler zu beheben :) Ich habe Google Sign In mit G Suite-Konten implementiert, denen eine Geräterichtlinie über Google Admin zugewiesen wurde . Bei der ersten Anmeldung musste die Geräte-Richtlinien-App installiert werden. Nachdem alle späteren Schritte abgeschlossen waren, wurde nur ein 12501-Fehler ausgegeben. Gleichzeitig funktionierte dieselbe App auf anderen Handys einwandfrei. Also hat nur ein Neustart geholfen. Aber geholfen
quelle
Obwohl es in dieser Frage bereits viele positive Antworten gibt, bemühte ich mich, die Logik zu verstehen. Also habe ich meine Forschungen gemacht.
Führen Sie dies im Terminal aus, um SHA-1 zu erhalten:
keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v
Über
OAuth 2.0 client IDs
server_client_id
)Sie können Ihre
OAuth 2.0 client IDs
hier https://console.developers.google.com/apis/credentials?project= erstellen oder bearbeitenWir können denselben Keystore sowohl für das Debuggen als auch für das Release verwenden, indem wir die Keystore-Details in global (lokal, nicht innerhalb des Projekts) speichern
gradle.properties
undbuild.gradle
wie unten beschrieben einfügen.def key_alias = "" def key_password = "" def store_file = "" def store_password = "" try { key_alias = YOUR_KEY_ALIAS key_password = YOUR_KEY_PASSWORD store_file = YOUR_KEYSTORE_PATH store_password = YOUR_KEYSTORE_PASSWORD } catch (Exception exception) { throw new IllegalStateException('Failed to find key store details. Social Login is disabled'); } android { signingConfigs { config { keyAlias key_alias keyPassword key_password storeFile file(store_file) storePassword store_password } } buildTypes { debug { signingConfig signingConfigs.config // ... } release { signingConfig signingConfigs.config // ... } } }
Sie können unten Snippet verwenden
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // ... } else if (result.getStatus().getStatusCode() == CommonStatusCodes.NETWORK_ERROR) { // No internet connection } else if (result.getStatus().getStatusCode() == CommonStatusCodes.DEVELOPER_ERROR) { // Wrong server OAuth key(server_client_id) } else if (result.getStatus().getStatusCode() == 12501) { // Wrong app signing-certificate fingerprint SHA1 } else { Log.e("Google sign in error", result.getStatus().toString()); } } }
quelle
Führen Sie die folgenden Schritte aus:
Klonen Sie das folgende Projekt https://github.com/googlesamples/google-services
Folgen Sie der Anleitung unter https://developers.google.com/identity/sign-in/android/start
Verwenden Sie den Webclient (automatisch von Google Service erstellt) und fügen Sie ihn in requestIdToken (...) hinzu.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com") .build();
Stellen Sie sicher, dass Sie denselben Keystore verwenden, der auch zum Google-Projekt hinzugefügt wurde. Wenn Sie beispielsweise den folgenden Befehl zum Generieren des SHA-1-Schlüssels verwendet haben
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
Dann füge den folgenden Code in die Datei app / build.gradle in android hinzu {...} [Mein Problem gelöst]
signingConfigs { debug { storeFile file("/home/ashwin/.android/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.debug } }
Hinweis: Ihr keyPassword und Ihr keyAlias sollten bei der Generierung des SHA-1-Zertifikats identisch sein.
quelle
1. Geben Sie signingConfigs in Ihrer Gradle-Datei an
signingConfigs { config { keyAlias 'appalias' keyPassword 'hunter123' storePassword 'hunter123' storeFile file('path/to/keystore.jks') } }
2.Gehen Sie zum Erstellen von Typen in der Projektstruktur (in Android Studio) und geben Sie signingConfigs für "config" an.
Bereinigen Sie nun Ihr Projekt und erstellen Sie es erneut. Es sollte funktionieren.
Wenn das oben genannte nicht funktioniert, ist unten Ihr letzter Ausweg.
Versuchen Sie Schritt eins und bauen und überprüfen Sie. Wenn es nicht funktioniert, fahren Sie mit dem nächsten Schritt fort und versuchen Sie erneut zu erstellen.
quelle
Da die App die Anmeldung von Google über die Webansicht anfordert, müssen wir die Authentifizierungs-Client-ID v2.0 für die Webanwendung erstellen
Gehen Sie zu Google API-Anmeldeinformationen
Wählen Sie Ihr Android-Projekt in der oberen linken Ecke
2
Klicken Sie auf Anmeldeinformationen erstellen -> OAuth-Client-ID -> Webanwendung auswählen
OK klicken
Wenn Sie Android Studio mit Firebase synchronisiert haben (angemeldet), erstellen Sie das Projekt einfach neu. Andernfalls laden Sie die aktualisierte Datei google-services.json herunter und ersetzen Sie die vorhandene.
Es sollte gut funktionieren.
quelle
Ich habe das gleiche Problem auch, wurde wie folgt gelöst:
Als Zusammenfassung löschen Sie alte sha1 und erstellen Sie neue sha1 und laden Sie neue google-services.json herunter
quelle
Ich hatte den gleichen
12501 status
Fehler. Dies ist auf die SHA-1-Nichtübereinstimmung von Release APK und Debug APK zurückzuführen./.android/debug.keystore
quelle