Ich versuche, Google Sign In in meine App zu integrieren. Ich habe keinen Back-End-Server. Ich erhalte nur die Details des bei Google angemeldeten Kontos in meiner App.
Ich habe es zuerst mithilfe des Google-Anmeldebeispiels versucht, aber es ist eine Fehlermeldung aufgetreten (es wurden keine Codeänderungen vorgenommen, außer das Drucken der folgenden Stapelverfolgung). Ich habe gerade das Beispiel SignInActivity verwendet, da ich keinen Back-End-Server habe.
Exception com.google.android.gms.common.api.ApiException: 12500:
at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89) at android.app.Activity.dispatchActivityResult(Activity.java:7010)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6316)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Code
public class SignInActivity extends AppCompatActivity implements
View.OnClickListener {
private static final String TAG = "SignInActivity";
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private TextView mStatusTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Views
mStatusTextView = findViewById(R.id.status);
// Button listeners
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.disconnect_button).setOnClickListener(this);
// [START configure_signin]
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// [END build_client]
// [START customize_button]
// Set the dimensions of the sign-in button.
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
// [END customize_button]
}
@Override
public void onStart() {
super.onStart();
// [START on_start_sign_in]
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
// [END on_start_sign_in]
}
// [START onActivityResult]
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
// [END onActivityResult]
// [START handleSignInResult]
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
e.printStackTrace();
updateUI(null);
}
}
// [END handleSignInResult]
// [START signIn]
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signIn]
// [START signOut]
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END signOut]
// [START revokeAccess]
private void revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END revokeAccess]
private void updateUI(@Nullable GoogleSignInAccount account) {
if (account != null) {
mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.sign_out_button:
signOut();
break;
case R.id.disconnect_button:
revokeAccess();
break;
}
}
}
Nach dem, was ich gelesen habe, könnte das Problem durch die SHA1-Generation verursacht werden .
Ich habe die komplette Anleitung befolgt , aber anscheinend funktioniert es nicht.
Ich habe den SHA1 von gradle signingReport kopiert
Variant: debug
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
Was könnte die mögliche Ursache dafür sein?
Vielen Dank
PS Könnte dies eine mögliche Ursache sein?
Google Play services out of date. Requires 11720000 but found 10932470
quelle
Antworten:
Aktualisieren Sie einfach Ihre Google Play-Dienste auf die neueste Version (oder in diesem Fall 11720000). Wenn Sie AVD verwenden, unterstützen Nexus 5- und 5X-Bilder Google Play. Sobald der Emulator betriebsbereit ist, rufen Sie das Menü Erweiterte Steuerelemente> Google Play auf und aktualisieren Sie ihn.
quelle
Fehler PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500 :, null)
quelle
Überprüfen Sie, ob SHA-1-Fingerabdrücke zu den Firebase-Projekteinstellungen hinzugefügt wurden. Wenn nicht, suchen Sie den SHA-1-Fingerabdruck mit
https://developers.google.com/android/guides/client-auth
Finden Sie auch den SHA-1-Fingerabdruck des Freigabeschlüssels mit
Entfernen Sie
<keystore path>
mit dem Pfad des Schlüsselspeichers.Fügen Sie dann beide SHA-1-Fingerabdrücke zu den Einstellungen der Firebase-Projekte hinzu.
NB: Vergessen Sie nicht, google-services.json durch aktualisierte google-services.json durch neue Fingerabdrücke zu ersetzen. Ich habe zwei Tage verloren.
Während des Debuggens
Android Studio generiert
~/.android/debug.keystore
beim ersten Debug-Build automatisch und signiert damit die App.So führen Sie den SHA-1-Lauf aus (Kennwort
android
) ( doc ):Dies
SHA-1
sollte zu den App-Einstellungen unter hinzugefügt werden,firebase
um die Verwendung der Google-Anmeldefunktionen beim Testen der Debug-Erstellung zu ermöglichen.quelle
für Fehler 12500 Sie müssen Support Google Mail nur in den Einstellungen von Firebase hinzufügen und für Fehler 10 SSH-Fingerabdruck in Firebase-Konsole hinzufügen, wie in der Abbildung gezeigt
quelle
Support-E-Mails sowie alle Projekt- und Datenschutzlinks sind erforderlich, damit Google SignIn funktioniert. Andernfalls werden 12500 ausgegeben.
Stellen Sie es auf https://console.developers.google.com/apis/credentials am unteren Rand der zweiten Registerkarte mit dem Namen "OAuth-Zustimmungsbildschirm" ein. Dort finden Sie drei Links, die konfiguriert werden müssen.
Dies wird in den Firebase-Handbüchern nirgendwo erwähnt.
quelle
Aktualisieren Sie den OAuth-Zustimmungsbildschirm unter https://console.developers.google.com/apis/credentials
quelle
Ich war eine Weile davon festgefahren.
Stellen Sie sicher, dass diese Schritte ausgeführt werden.
quelle
Ihr SHA1 wird anscheinend vom Google Play Store überschrieben. Überprüfen Sie in Ihrem Google Play Store, im Startfeld unter App-Signatur, ob bei Google Play ein zusätzliches SHA1 hinzugefügt wurde.
Und kopieren Sie, dass SHA1, fügen Sie es Ihrem relevanten Ort hinzu, die Arbeit erledigen würde.
quelle
Wenn immer noch jemand mit einem ähnlichen Problem da draußen ist und Sie benutzerdefinierte Bereiche hinzufügen, stellen Sie sicher, dass es sich um einen gültigen Bereich handelt. In meinem Fall habe ich Facebook-Bereiche mit Google-Bereichen gemischt und eine Weile gebraucht, um das herauszufinden!
quelle
Ich verwende die Firebase-Authentifizierung. Mein SHA-1 wurde korrekt angezeigt, die Client-ID war ebenfalls korrekt, aber ich erhielt immer noch 12500.
Es stellte sich heraus, dass mein Problem darin bestand, dass ich in meinen Projekteinstellungen keine Support-E-Mail angegeben habe. (Einstellungen -> Registerkarte Allgemein -> Abschnitt Ihr Projekt (Öffentliche Einstellungen)).
quelle
Gehen Sie in der Firebase-Konsole zu Ihrem Projekt, öffnen Sie die Projekteinstellungen und fügen Sie dort Ihre SHA-Zertifikat-Fingerabdrücke hinzu. Laden Sie die aktualisierte Datei google-services.json herunter und fügen Sie sie Ihrem Projekt-App-Ordner hinzu.
Das hat bei mir funktioniert.
quelle
Ich denke, der Fehler kam vom falschen SHA1. Bitte vergessen Sie nicht, dass sich der SHA1 im Android Studio zwischen Release- und Debug-Modus unterscheidet. Anstatt Keytool zum Abrufen des SHA1 zu verwenden, können Sie Gradle-Projekt -> Task -> Android -> SigningReport im Android Studio verwenden (kann über das Menü Ansicht -> Toolwindow -> Gradle geöffnet werden), um SHA1 freizugeben und zu debuggen. Danach müssen Sie für eine einfache Arbeit zwei separate Anmeldeinformationen mit zwei SHA1 in der Google Cloud-Konsole erstellen (Google weist nur an, eine mit Release SHA1 zu erstellen, wenn wir sie entwickeln, funktioniert sie nicht, da sie das Debug-SHA1 verwendet).
quelle
Stellen Sie zunächst sicher, dass Sie Ihre App in der Google-Entwicklerkonsole registriert haben
Stellen Sie sicher , dass Sie beide haben die
debug
undrelease
Tasten in Ihrer Anwendung Firebase. Wenn dieser Fehler in der Produktion auftritt, fügen Sie IhreSHA-1 release key
zu Fire Base App hinzu. Wenn es in der Entwicklung erscheint, fügen Sie Ihre hinzuSHA-1 debug key
.Abrufen des Debug- / Release-Schlüssels:
Stellen Sie sicher, dass Sie das Update
google-services.json
auf Ihre App herunterladen .quelle
Für mich bestand das Problem darin, eine Client-ID mit meiner debug-konfigurierten App zu verwenden. Stellen Sie sicher, dass Sie einen Release- und einen Debug-Schlüssel haben, und verwenden Sie jeweils die einzelnen SHA-1.
quelle
Wenn Sie vom Flattern hierher kommen : Dies ist einer der Eckfälle, die wir gemäß der Dokumentation hier beheben müssen: https://pub.dev/packages/google_sign_in
quelle
Wenn sich Ihre App bei einem Backend-Server authentifiziert oder von Ihrem Backend-Server aus auf Google APIs zugreift, müssen Sie die für Ihren Server erstellte OAuth 2.0-Client-ID beim Erstellen des GoogleSignInOptions-Objekts an die requestIdToken-Methode übergeben, um auf die grundlegenden Profilinformationen des Benutzers zugreifen zu können . Vergessen Sie auch nicht, die Support-E-Mail im OAuth-Zustimmungsbildschirm auf der Seite Anmeldeinformationen in der API-Konsole zu senden.
quelle
Es kann auch vorkommen, dass der Cordova-Compiler die richtige Keystore-Datei nicht finden kann.
Lösung: Geben Sie vor der Ausführung
ionic cordova build android
die Signatureigenschaften anSchritt 1 : Generieren Sie eine Debug-Keystore-Datei
Führen Sie den Befehl aus
Passwort verwenden:
android
Schritt 2: Kopieren Sie die Keystore-Datei (
debug.keystore
) aus~/.android
demplatform/android
Verzeichnis Ihres aktuellen ProjektsSchritt 3: Erstellen Sie eine Datei mit dem Namen release-signing.properties im
platform/android
VerzeichnisSchritt 4: Fügen Sie den Inhalt der Datei hinzu
Schritt 5: Jetzt bauen
ionic cordova build android
quelle
Ich hatte das gleiche Problem, nachdem ich mein Projekt auf einem anderen Computer (einem anderen Android Studio) geöffnet hatte. In meinem Fall habe ich es mit dem Firebase-Assistenten gelöst, mit dem ich Firebase ursprünglich eingerichtet hatte. Öffnen Sie den Firebase-Assistenten (Extras> Firebase) und wählen Sie Authentifizierung> Verbinden. Dadurch wurde das Projekt erneut mit Firebase verbunden und die Konfiguration aktualisiert
quelle
Ich steckte seit 2 Wochen in der Google Login-Ausgabe fest und habe sie schließlich gut sortiert. Lassen Sie mich den Grund erklären. Das Problem war mit Firebase verbunden. In Firebase wurde ein Feld "Support-E-Mail" als optional angegeben. Aber sobald ich es hinzugefügt habe (eine Ihrer persönlichen E-Mails), wurde das Problem behoben und ich erhielt die Antwort. Wenn Sie einen Fehler als 12501 erhalten, hängt dies mit den Einstellungen in Ihrem Google-Konto zusammen.
quelle
Ich war eine Weile davon festgefahren.
Stellen Sie sicher, dass diese Schritte ausgeführt werden.
quelle
In meinem Fall liegt es an der falschen Google Client-ID. Ich ändere meinen Schlüssel in den
google-services.json
unter (unteroauth_client
Objekt) aufgeführten Schlüssel.quelle
Stellen Sie sicher, dass die folgenden Dinge richtig eingerichtet sind:
strings.xml
,google-services.json
odercredentials.json
Datei.quelle
https://developers.google.com/identity/sign-in/android/sign-in Befolgen Sie diese API-Dokumentation. Beachten Sie jedoch, dass in WEB_CLIENT_ID der Wert der Client-ID verwendet wird, die in der Datei google-services.json generiert wird.
quelle
In meinem Fall wurde der Fingerabdruck nach dem Hinzufügen in der Firebase-Konsole automatisch von der Google-Entwicklerkonsole erfasst und die Fingerabdrücke angezeigt. Aber die Anmeldung hat nicht funktioniert. Nachdem ich mir jeden Schritt angesehen hatte, stellte ich fest, dass Google mein Manifest-Dateipaket wie folgt umgekehrt hat
com.xxxxxxxx.app
. Aber es ist tatsächlichapp.xxxxxxxx.com
in der Google-Entwicklerkonsole. Also habe ich automatisch einen Fingerabdruck erstellt und einen Fingerabdruck mit dem richtigen Paketnamen hinzugefügt. BOOM!!. Es funktionierte.quelle
Der Fehler trat mir auf, als die Google-Option nicht aktiviert war (siehe Abbildung) .
Es geschah, als ich das Konto von Google änderte und vergaß, die Option zum Herstellen einer Verbindung mit Google zu aktivieren.
quelle
Stellen Sie sicher, dass Ihr Projekt keine Sonderzeichen einschließlich Zahlen oder Symbolen enthält (der Projektname sollte so einfach wie com.google.testproject sein).
quelle
In meinem Fall, in dem ich an einer Nicht-Produktions-App arbeitete, bestand das Problem darin, dass beim Erstellen eines Projekts in der Firebase-Konsole Probleme beim Synchronisieren von SHA-1-Schlüsseln von Firebase- und Google-Entwicklerkonsolen auftraten. Daher habe ich beschlossen, das Projekt zuerst in der Google Developer-Konsole zu erstellen und es dann beim Erstellen eines neuen Projekts in der Firebase-Konsole auszuwählen.
Ich habe auch ein Tutorial dafür gemacht, das Ihnen helfen kann.
quelle
In meinem Fall war das Problem, dass mein Emulator keinen Play Store hatte. Ich habe den Emulator (API 23) über Visual Studio erstellt, da ich ihn auch mit Xamarin.Forms entwickle. Im Android-Geräte-Manager von Visual Studio können Sie auswählen, ob Ihr Emulator über Google Play Store verfügen soll.
Musste einen Emulator über die AVD von Android Studio erstellen und sicherstellen, dass der Play Store vorhanden ist:
quelle
In meinem Fall war dieser Fehler vorhanden, weil die Android-Authentifizierung vom Senior-Team entfernt wurde, da anscheinend kein Android-Schlüssel für die Backend-Authentifizierung erforderlich ist. Daher werden für die Google-Anmeldung sowohl Android- als auch Web-Client-Schlüssel benötigt.
quelle
Probieren Sie diese Optionen aus:
Es fordert zur Eingabe des Passworts auf und gibt einfach das Passwort ein. Sie können die SHA1- und MD5-Fingerabdrücke sehen.
quelle