Neue Google-Anmeldung bei Android

78

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?

Jamal
quelle
Beachten Sie, dass der gleiche Statuscode (12501) zurückgegeben wird, wenn versucht wird, das Ergebnis eines abgebrochenen Anmeldedialogs ( resultCode == Activity.RESULT_CANCELED) zu verarbeiten. Verwenden von GMS 8.4.0.
Eugen Pechanec
Schließlich habe ich es für mich funktionieren lassen, nachdem ich fast eine Woche lang gekämpft hatte
Master
1
Bitte beachten Sie, dass derselbe Code 12501 aus einem trivialeren Grund auftreten kann, z. B. aus Gründen der mangelnden Internetverbindung.
ris8_allo_zen0
@ ris8_allo_zen0 Ich habe auch 12501 wegen mangelnder Internetverbindung
Arun

Antworten:

112

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.

Kaizie
quelle
2
Das sollte die richtige Antwort sein, ersparte mir einen halben Tag Kopfschmerzen.
Abedfar
Du hast mir da draußen wirklich geholfen. Das ist die richtige Antwort!
Markus
Sollte auf jeden Fall mehr Stimmen abgeben, hat mein Tag gerettet. Vielen Dank für Ihre Hilfe!
Gabriel Falcone
7
@Kaizie wenn du sagst ' und du musst jeden an die richtige Stelle setzen ' was meinst du genau? Ich benutze schließlich nirgendwo Android Client ID.
Josealfonsomora
6
Der Android-Clientschlüssel @josealfonsomora befindet sich in der Datei google-services.json, und der Webanwendungsschlüssel muss in den Methoden requestIdToken oder requestServerAuthCode festgelegt werden.
Kaizie
19

Ich hatte damit zu kämpfen und verschwendete fast eine Woche damit.

So habe ich es geschafft.

  1. Projekt in AndroidStudio importieren
  2. Erstellen Sie einen Debug-Keystore für das Projekt.
  3. Erstellen Sie die SHA1-Signatur für das Projekt mithilfe des Debug-Keystores.
  4. Registrieren Sie Ihre App mithilfe der SHA1-Signatur für Google Signin in der Google Developer Console.
  5. Generieren Sie dort eine Google-Konfigurationsdatei. (In den App-Ordner von Android Studio legen.)
  6. Verwenden Sie die Webclient-ID aus OAuth 2.0-Anmeldeinformationen in Ihrem Android-Projekt.
  7. Generieren Sie jetzt in Android Studio den Debug Build (APK) Ihres Projekts.
  8. Hängen Sie das Gerät in Ihr System ein -> kopieren Sie diese signierte Debug-Version von APK und installieren Sie sie.

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.

Meister
quelle
1
Könnten Sie bitte erklären, S. 5 (in den App-Ordner von Android Studio legen) Welches?
Aleksey Timoshchenko
Und wie denken Sie, kann in diesem Fall ein Grund sein: Ich habe meinen SHA1-Schlüssel für die Google-Konsole auf einem Laptop generiert und dann meine Debag-APK in Android Studio auf einem anderen Laptop erstellt. Dies bedeutet, dass Studio als Prozess-Build-APK SHA1 von einem anderen Laptop verwendet. Aber soweit ich Google Matche SHA1 von APK und SHA1 verstehe, die registriert wurden ... Oder nicht?
Aleksey Timoshchenko
1
Sie sollten einen debug.keystore-Schlüssel erstellen und ihn dann jedes Mal verwenden, um die apk zu signieren, unabhängig davon, welches System Sie verwenden. Unterschreib es einfach.
Meister
1
@ Master: Danke, Mann. Ich habe die apk über USB installiert. Das war mein Problem. Jetzt behoben. Vielen Dank.
Pawan
Ich hatte diesen vor einiger Zeit. Diesmal habe ich es schnell herausgefunden. Es war der fehlende SHA1-Hash nach dem Wechsel meiner Entwicklungsmaschine.
Cybergen
17

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_idVerwenden Sie die OAuth 2.0-Client-ID für die Webanwendung . Und OAuth Client ID für Android in google_services.json verwenden

Normalerweise 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"
      }
    }
  ],
RaditzLawliet
quelle
Stellen Sie sicher, dass Ihr Paketname genau mit dem in AndroidManifest.xml übereinstimmt! Das gab mir viele Kopfschmerzen.
Jameswoo
Wenn Sie es entfernen, nachdem Sie die signierte apk veröffentlicht haben, wird die Entwicklung unterbrochen. Wie können Sie Ihre App weiterentwickeln?
Chris Harrison
@ ChrisHarrison Ja, du hast recht. Ich aktualisiere die Antwort.
RaditzLawliet
15

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.

shekar
quelle
1
Hat in meinem Fall funktioniert.
Roon13
Könnten Sie genau wissen, auf welchem ​​Bildschirm Sie diese Ansicht finden?
Dany Pop
Ich bin mir nicht sicher, warum dies bei der Auswahl von Android funktioniert, aber auch bei mir. @DanyPoplawec Dies ist in der Entwicklerkonsole, API Manager für ein bestimmtes Projekt. Klicken Sie im linken Menü auf Anmeldeinformationen und dann auf die Schaltfläche Anmeldeinformationen erstellen und wählen Sie OAuth-Client-ID aus. Diese Seite sollte angezeigt werden.
Mkimmet
8

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!

Ramon Canales
quelle
Können Sie uns etwas näher erläutern, wie Sie dies getan haben? Das könnte auch mein Problem sein.
JDenais
1
@JDenais, gehen Sie zur Google-Entwicklerkonsole> Api Manager> Anmeldeinformationen, erstellen Sie einen Auth 2.0-Android-Berechtigungsnachweis mit dem Signaturzertifikat, das Sie zum Generieren der Debug-Version (wahrscheinlich debug.keystore auf Ihrem Computer) verwenden, und dem Namen des Degub-Pakets Ihrer App .. danach fügen Sie diese Client-ID zur Datei google-services.json hinzu: "oauth_client": [{":" XXXX "," client_type ": 1," android_info ": {" package_name ":" com .fleeber ", certificate_hash": "YYYYYYY"}}, {"client_id": "XXX", client_type ": 1," android_info ": {" package_name ":" com.fleeber.debug "," certificate_hash ":" YYYY "}}]
Ramon Canales
Ich hatte zuvor eine funktionierende App mit Google-Anmeldung, aber die zweite, die ich erstellt habe, war nicht richtig konfiguriert, da ich mit zwei Konten gleichzeitig bei Google angemeldet war. Ich musste mich vollständig abmelden und den Assistenten erneut durchlaufen, meinen Debug-Zertifikat-Fingerabdruck hinzufügen und der JSON wurde dann korrekt generiert.
Bron Davies
Wow, du hast mir buchstäblich nach mehr als 5 Stunden endloser Online-Suche geholfen. Danke vielmals!
O'Kamiye
8

Ich hatte das gleiche Problem und löste es mit der folgenden Lösung:

  1. Erstellen Sie die Konfigurationsdatei (google-services.json) wie hier beschrieben und legen Sie sie in Ihrem / app-Projektverzeichnis ab
  2. (Wie in anderen Antworten erwähnt) Verwenden der Webanwendungs-Client-ID für die requestIdTokenMethode.
  3. [Mein Hauptproblem] Signieren Sie Ihre App, wenn Sie wie folgt im Debug-Modus arbeiten:
 signingConfigs {
    release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
    }
 }

 buildTypes {
     release {
         ...
     }
     debug {
         ...
         signingConfig signingConfigs.release
     }
 }
Maziar Manouchehry
quelle
4

Jetzt hab ich es verstanden.

Also müssen Sie zuerst den oberen Antworten folgen und sagen:

  1. Erstellen Sie eine OAuth-Client-ID für Webanwendungen in der Google Developers Console und verwenden Sie sie in requestIdToken() (Statuscode 12501 entfernen)
  2. Wenn Sie eine Android OAuth-Client-ID für Ihren Produktions-Hash-Schlüssel erstellt haben, erstellen Sie eine neue Android OAuth-Client-ID für Ihren Debug-Hash-Schlüssel und integrieren Sie diese in Ihre Datei google-services.json. (Statuscode 12500 entfernen)

Nicht mehr gültig Und hier kommt der letzte Teil: 3. Sie nicht anrufen können requestIdToken()und requestEmail()auf einmal. Zumindest in meinem Fall wurde ich Result: Status{statusCode=INTERNAL_ERROR, resolution=null}durch Löschen los requestEmail().

Also viel Glück...

Cybergen
quelle
2
Die Sache in Ihrem Teil 3 ist sicherlich falsch. requestIdToken()und requestEmail()kann sofort verwendet werden. Ich benutze es erfolgreich in meiner App.
Kirtan403
Dann muss es einen weiteren Unterschied zwischen unseren Projekten geben. Denn in meinem Projekt funktioniert es genau wie beschrieben.
Cybergen
Ich stimme zu, ich benutze beide requestIdToken()und requestEmail()gleichzeitig. Damit ist kein Problem.
Chad Bingham
Vielleicht war es ein Problem mit einer Bibliotheksversion. Es ist weg.
Cybergen
3

In meinem Fall musste ich auch überprüfen, ob das Debug-SHA-1 als gültiger OAuth-Android-Client hinzugefügt wurde.

willy
quelle
2
12501ist 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.
Sam Stern
3

Verwenden Sie die Webanwendung als server_client_id und nicht als Android-Anwendung

Ketankk
quelle
2

Ich hatte das gleiche Problem und bemerkte, dass 12501-Code zurückgegeben wurde, wenn mein Code server_client_ideinen 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:

  • Generierte JSON-Konfigurationsdatei mit aktivierter Google-Anmeldung
  • Google Plugin und Abhängigkeit zu meiner Gradle-Datei hinzugefügt
  • OAuth-Client-ID für diese App erstellt und in meinem Projekt als gespeichert server_client_id
Usy
quelle
2
Ich glaube nicht, dass die servier_id nicht korrekt ist. Ich habe verschiedene ausprobiert.
Jamal
2

Befindet sich Ihre apk im Debug-Modus? Ich denke es funktioniert nur mit einer signierten apk.

Jacoplane
quelle
2
  1. Folgen Sie dem mehrdeutigen Google-Dokument.
  2. Fügen Sie google-services.json in Ihr Projektverzeichnis ein
  3. Stellen Sie Ihren Gradle als https://stackoverflow.com/a/35216421/5886475 ein

  4. Setzen Sie server_client_id in string.xml. Es ist Ihre Web-Client-ID, nicht Android-Client

Peter Kao
quelle
Ja , das 4. hat mir geholfen und es auf die Whitelist gesetzt
ThinkDeep
2

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(); 
Vitor Braga
quelle
Danke, Mann. Ich habe mich verlaufen, bis ich verstanden habe, dass ich androiddebugkey und keinen benutzerdefinierten Debug-Schlüssel verwenden muss
itzhar
2

Anstelle von R.string.server_client_ideinfach verwenden R.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.

Chaitanya Wagle
quelle
2

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.

  1. Gehen Sie zum Menü Extras-> Firebase
  2. Klicken Sie auf Ihre App mit Firebase verbinden. Sobald die Verbindung erfolgreich hergestellt wurde, wird sie grün als Verbunden angezeigt
  3. Klicken Sie auf die Schaltfläche Firebase-Authentifizierung zu Ihrer App hinzufügen. Sie wird ebenfalls grün.

HINWEIS: Eine große Liste von Antworten in dieser Liste bestätigt definitiv eines. Google muss die Dokumentation aktualisieren und narrensicher halten.

Gayan Pathirage
quelle
1

Wenn keine der oben genannten Optionen funktioniert, überprüfen Sie, ob Ihre applicationId in app build.gradle mit Ihrem Paketnamen übereinstimmt.

aashish
quelle
1

Ü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(); 
Silwalprabin
quelle
1

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.

Rahul Sonone
quelle
1
Ich verwende Firebase, also SHA1 dort aktualisiert, aber jemand, der Google Console verwendet, muss es entsprechend aktualisieren.
Rahul Sonone
Ich habe die Arbeits-Laptops gewechselt und konnte nicht herausfinden, warum die Google-Anmeldung bei mir nicht mehr funktioniert. Dann erinnerte ich mich, dass mein neuer Laptop einen anderen SHA-1-Fingerabdruck haben und in der Google Developer Console hinzugefügt werden muss.
mco
Also
1

In meinem Fall meine Credentials für Client ID for Androidauf 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.

Signing Config wird freigegeben

Erdferkel
quelle
Vielen Dank für diesen Moment. \\\, (-.-) >>> ///(-.-)
Matthew Weber
Ich sollte erwähnen, dass ich tatsächlich einen anderen Fehlercode erhalten habe. Ich habe 10 DEVELOPER_ERROR bekommen, aber das war das Problem.
Matthew Weber
1

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 .

  1. Öffnen Sie auf Ihrer Firebase-Konsole Ihr Projekt
  2. Gehen Sie zu Parameter. Registerkarte Allgemein
  3. Am Ende dieser Seite befindet sich ein Feld zum Hinzufügen eines Fingerabdrucks SHA-1
  4. Fügen Sie den SHA-1 in das Konsolenfeld ein.

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 !

Dany Pop
quelle
1

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:

  1. Zuerst habe ich den SHA1-Debug-Schlüssel erstellt und zur Firebase- Konsole hinzugefügt . SHA1 von hier aus erstellen .
  2. Erstellen Sie sowohl Web-API als auch Android OAuth 2.0 Client-ID aus hier
  3. werden google-service.jsonvon der Firebase- Konsole generiert und in den App-Ordner gestellt.
  4. Setzen Sie diesen Code für 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 AuthWithGoogleund führt failin auth.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:

Geben Sie hier die Bildbeschreibung ein

hoffe hilf voll

Mahdi
quelle
Haben Sie dieselben Umleitungs-Uris verwendet wie diejenigen, die in der automatisch erstellten Webanwendung eingerichtet wurden? Ich habe auch dieses Problem und es macht mich verrückt!
John Mc
Was sollte der Wert von "client_type" im Auth-Client sein? Sie haben "client_type": 1 und "client_type": 3 deklariert. Was bedeutet das?
Rajat44
@JohnMc Ich habe die ganze Test - App hier github.com/mahdit83/FireBaseAuthDemo
Mahdi
@ rajat44 Diese Datei wird automatisch von der Google-Konsole generiert und weiß wirklich nicht, wie Google mit dieser Datei umgeht. Aber so können Sie es zum Laufen bringen.
Mahdi
0

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.

Klicken Sie im Projektbrowser mit der rechten Maustaste auf Ihre App und wählen Sie Moduleinstellungen öffnen.

Screenshot von Open Module Settings |  App |  Unterzeichnung |  config

Ich fand es weniger verwirrend, die .jksDatei in das /appVerzeichnis 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 Passwordoder Store Passwordweil 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 IDsobwohl 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 ein API keys.

Keith
quelle
0

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.

Tony BenBrahim
quelle
0

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

serggl
quelle
0

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

  • OAuth für das Web (In der App wird dies verwendet als server_client_id)
  • OAuth für Android (Dies muss unter Verwendung des korrekten Paketnamens und des Fingerabdrucks des Signaturzertifikats SHA-1 erstellt werden. )

Wenn Sie den unterschiedlichen Keystore für Debug & Release verwenden, müssen Sie einen separaten Keystore OAuth 2.0 client IDsmit dem entsprechenden Paketnamen & SHA-1 erstellen .

Sie können Ihre OAuth 2.0 client IDshier https://console.developers.google.com/apis/credentials?project= erstellen oder bearbeiten

  1. Navigieren Sie zu Ihrer App.
  2. Wenn Sie bereits eine OAuth für Android haben, klicken Sie auf deren Namen und überprüfen Sie den Paketnamen & SHA-1 .

Wir 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.propertiesund build.gradlewie 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());
        }
    }
}

Hinweis: Wenn Sie beim Generieren der Konfigurationsdatei nur Google Sign-In aktiviert haben, müssen Sie die Datei nicht zu google-servies.jsonIhrem Projekt hinzufügen (das Generieren der Datei führt die erforderlichen Konfigurationsschritte aus).

Vignesh Sundaramoorthy
quelle
0

Führen Sie die folgenden Schritte aus:

  1. Klonen Sie das folgende Projekt https://github.com/googlesamples/google-services

  2. Folgen Sie der Anleitung unter https://developers.google.com/identity/sign-in/android/start

  3. 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();
    
  4. 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    
    
  5. 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.

Ashwin
quelle
0

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.

  1. Erstellen Sie eine signierte apk (mit aktiviertem Passwort).
  2. Überprüfen Sie vor dem Signieren den Dateinamen der Keystore-Datei und den, den Sie beim Signieren der apk (in Android Studio) angeben.
  3. Installiere die signierte apk auf deinem Gerät.
  4. Warten Sie fünf Minuten.
  5. Versuchen Sie, bei Google zu singen. Wenn noch 12501 kommt, warten Sie noch fünf Minuten. Währenddessen treffen Sie Gradle Sync.
  6. Versuchen Sie es nochmal. Es sollte funktionieren.
Mido Reigh
quelle
0

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

  1. Gehen Sie zu Google API-Anmeldeinformationen

    Wählen Sie Ihr Android-Projekt in der oberen linken Ecke

    2

  2. Klicken Sie auf Anmeldeinformationen erstellen -> OAuth-Client-ID -> Webanwendung auswählen

  3. OK klicken

  4. 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.

Morse
quelle
0

Ich habe das gleiche Problem auch, wurde wie folgt gelöst:

  1. Ich musste den zuvor gedachten SHA1 löschen und einen neuen SHA1 erstellen und einstellen.

  2. generiere neu google-services.jsonund setze es in mein App-Verzeichnis

  3. Ich habe genau Google Entwicklercodes verwendet

  4. my hat result.isSucces()nach dem Ausführen des Projekts true zurückgegeben

Als Zusammenfassung löschen Sie alte sha1 und erstellen Sie neue sha1 und laden Sie neue google-services.json herunter

Richi
quelle
0

Ich hatte den gleichen 12501 statusFehler. Dies ist auf die SHA-1-Nichtübereinstimmung von Release APK und Debug APK zurückzuführen.

  1. Machen Sie eine signierte APK. Um eine APK zu signieren, wählen Sie den vorhandenen Pfad des Schlüsselspeichers, den Sie zum Erstellen von SHA-1 verwendet haben. z.B/.android/debug.keystore
  2. Geben Sie den Aliasnamen an: androiddebugkey
  3. Storepass und Keypass: Android.
Shailesh Diwakar
quelle