it-swarm.com.de

Fehler 12501 bei der Anmeldung mit Google

Ich benutze google Anmeldedienste , um Benutzer zu authentifizieren, die meine App verwenden. Ich habe es zum Laufen gebracht, als ich gerade E-Mail-Informationen angefordert habe

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail().build();

Dann habe ich herausgefunden, dass ich auch ein ID-Token anfordern muss, um mich mit meinem Backend authentifizieren zu können.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(String.valueOf(R.string.server_client_id))
                    .requestEmail().build();

Das Problem ist, dass ich mich nach den Änderungen nicht einloggen kann. Der Status, den ich jedes Mal erhalte, wenn ich versuche, mich anzumelden, ist Status{statusCode=unknown status code: 12501, resolution=null}.

Ich habe herumgesucht und habe diesen Beitrag gefunden, bei dem es sich ziemlich um dasselbe handelt. Ich habe jedoch keinen der Fehler gemacht, die von den Antwortenden genannt wurden. Die oAuth-Client-ID in meiner Dev-Konsole bezieht sich auf die Webanwendung:  clientIDs Und R.string.server_client_id ist die erste Kunden-ID aus dem Bild. Die Paketnamen sind natürlich in allen Platzierungen korrekt, sonst würde es ohne die Token-Anforderung nicht funktionieren. Zwei Personen schlugen außerdem vor, dass die App signiert werden muss, um funktionieren zu können. In der Google-Dokumentation heißt es jedoch, dass auch der Debug-Schlüssel funktionieren sollte. Daher ist es nicht sinnvoll, die Apps zum Debuggen zu signieren.

Ich habe versucht, dies stundenlang zu klären, aber ohne Erfolg. Was könnte das Problem sein? Bitte fordern Sie weitere Informationen an, die ich vielleicht vergessen habe, hier anzugeben.

46
jammaster

Nun, das ist sehr peinlich, aber ich habe es herausgefunden:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id))
                    .requestEmail().build();

Ich habe ihm die Ressourcennummer gesendet, anstatt einer dereferenzierten String-Ressource.

20
jammaster

Offensichtlich überprüfen Sie zunächst, ob Ihr Release-Schlüssel sha1 korrekt ist oder nicht. Wenn es dennoch nicht funktioniert und Sie Google Play Services 8.4.0 verwenden (dh "com.google.Android.gms: play-services: 8.4.0 ') kompilieren, kann das Problem durch Ändern des GoogleSignInOption-Objekts behoben werdenAnstatt:

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 OR zurückgibt. StatusCode = Fehler 12501 OR statusCode = Fehler 12500 ..__ Dann kann dieses gso-Objekt zum Erstellen von GoogleApiClient verwendet werden.

 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(); 

Sehen Sie dies für Details: Google-Anmeldung funktioniert nicht bei der Release-Version von Android

10
silwalprabin

1.Spezifizieren Sie signingConfigs in Ihrer Gradle-Datei

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 an "config" an

Jetzt sauber dein Projekt und wieder bauen. Es sollte funktionieren.

Wenn dies nicht funktioniert, ist unten Ihr letzter Ausweg.
Versuchen Sie Schritt 1 und erstellen und prüfen Sie. Wenn es nicht funktioniert, fahren Sie mit dem nächsten Schritt fort und versuchen Sie es erneut. 

  1. Erstellen Sie eine signierte apk (mit aktiviertem Passwort merken). 
  2. Überprüfen Sie vor dem Signieren den Dateinamen der Keystore-Datei und den Namen, den Sie beim Signieren der APK (in Android Studio) eingeben. 
  3. Installieren Sie die signierte apk in Ihrem Gerät. 
  4. Warten Sie fünf Minuten. 
  5. Versuchen Sie, in Google zu singen. Wenn noch 12501 kommt, warten Sie noch fünf Minuten. Drücken Sie dabei Gradle Sync. 
  6. Versuchen Sie es nochmal. Es sollte funktionieren.

Bearbeiten: Google hat in der Konsole Apk-Signierung hinzugefügt. Wenn Sie Ihre apk bereits signiert haben, ignorieren Sie sie OR, wenn Sie sie verwenden möchten. Seien Sie vorsichtig damit, da dadurch Ihre aktuellen Google-Anmeldeeinstellungen beschädigt werden können

3
Mido Reigh

In meinem Projekt hatte ich eine andere applicationId in meiner Gradle-Datei als packagename in meiner manifest.xml und das war die Ursache meines Problems.

Der Android-Schlüssel, den ich erstellen musste, musste die applicationId fqdn und NICHT den Paketnamen haben (im Gegensatz zu dem, was Google Ihnen sagt), damit es für mich funktioniert. 

Ich dachte, ich würde das hier lassen, falls es jemandem Zeit spart.

3
Simon Avril

Ich hatte dieses Problem, als ich versehentlich die Client-ID der Android-App anstelle der Webapp als Parameter requestIdToken() verwendet habe.

Sie sollten dort die Client-ID der Webapp verwenden. Standardmäßig heißt es Web client (auto created by Google Service)

2
Daniel Zolnai

Haben Sie bereits signingConfigs und buildTypes in Ihrem Gradle eingerichtet? Ich habe es behoben, indem ich diese Dinge auf Gradle explizit spezifizierte. Lesen Sie hier http://developer.Android.com/tools/publishing/app-signing.html

Ich hatte das gleiche Problem. Das Problem war, dass ich irgendwie das falsche "API-Projekt" ausgewählt hatte und deshalb den falschen Web-Client-Schlüssel wählte. In meinen beiden API-Projekten wurden offensichtlich zwei OAuth2-Server-Client-IDs erstellt, während ich versuchte, die Demo-App auszuführen.

 configuration view

1
Bevor

Stellen Sie sicher, dass Sie den SHA-1-Fingerabdruck für Ihren (Release-) Signaturschlüssel zur Firebase-Konsole hinzugefügt haben

Finden Sie Ihren SHA1-Schlüssel : keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

Fügen Sie es der Firebase-Konsole hinzu: Gehen Sie zu https://console.firebase.google.com , wählen Sie Ihre App aus, und wählen Sie Einstellungen aus.

 enter image description here

1
Simon Epskamp

Ich habe ein ähnliches Problem erfahren. In meinem Fall war es, weil die Server-Client-ID, die ich verwendete, aus einem anderen Projekt stammt als die Client-Schlüssel. Es stellt sich heraus, dass sie aus demselben Projekt stammen müssen.

0
Tad

Hallo, ich habe die obigen Kommentare gesehen, aber wie ich es praktisch gemacht habe, ist es alles sha Problem, bedeutet, wenn Sie die sha von bestimmten IP-Adresse registrieren und google.services json erhalten, wird das perfekt entweder Sie verwenden können 

   gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

oder gso = new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken (LoginActivity.this.getResources (). getString (R.string.server_client_id)) .requestEmail (). build (); Wenn Sie jedoch eine App auf einer anderen IP-Adresse mit einem anderen Computer erstellen möchten, zeigt sha Ihnen den 12501-Fehlerstatuscode an, damit Sie ihn für diesen Computer erneut generieren müssen. Vielen Dank 

0
Vishal

Der <meta-data> aus Androidmanifest.xml befindet sich außerhalb von <application></application> Enclosure. Deswegen bekommst du 12501 Fehler

    <meta-data Android:name="com.google.Android.gms.games.APP_ID"
        Android:value="@string/app_id" />
    <meta-data Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version"/>
0
Duna

Ich weiß nicht, wie relevant diese Frage im Jahr 2019 ist. Der Fehlercode 12501 bedeutet jedoch:

Die Anmeldung wurde vom Benutzer abgebrochen. d.h. der Benutzer hat einige der Vorzeichenauflösungen abgebrochen, z. Kontoauswahl oder OAuth Zustimmung.

Weitere Informationen finden Sie unter folgendem Link:

https://developers.google.com/Android/reference/com/google/Android/gms/auth/api/signin/GoogleSignInStatusCodes.html#SIGN_IN_CANCELLED

0
Umang Kothari