Ich versuche, Google Login in meiner mit Firebase verbundenen Android-App zu implementieren ... Wenn ich die App starte und auf Google Sign In drücke, passiert nichts. Ich erhalte diesen Fehler in onActivityResult: Status {statusCode = DEVELOPER_ERROR, Auflösung = null} .
Mein Code sieht so aus:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_GOOGLE_LOGIN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()){
GoogleSignInAccount account = result.getSignInAccount();
String emailAddres = account.getEmail();
getGoogleQAuthToken(emailAddres);
}
}
}
private void getGoogleQAuthToken(final String emailAddres){
AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() {
String errorMessage = null;
@Override
protected String doInBackground(Void... params) {
String token = null;
try {
String scope = "oauth2:profile email";
token = GoogleAuthUtil.getToken(MainActivity.this, emailAddres, scope);
} catch (IOException transientEx) {
errorMessage = "Network error: " + transientEx.getMessage();
} catch (UserRecoverableAuthException e) {
Intent recover = e.getIntent();
startActivityForResult(recover, MainActivity.REQUEST_CODE_GOOGLE_LOGIN);
} catch (GoogleAuthException authEx) {
errorMessage = "Error authenticating with Google: " + authEx.getMessage();
}
return token;
}
Ich habe die JSON-Konfigurationsdatei im Verzeichnis app/hinzugefügt und Abhängigkeiten hinzugefügt:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.gms:google-services:1.5.0-beta2'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:23.1.+'
compile 'com.firebase:firebase-client-Android:2.3.0+'
/* For Google Play Services */
compile 'com.google.Android.gms:play-services-safetynet:8.3.0'
compile 'com.google.Android.gms:play-services-auth:8.3.0'
compile 'com.google.Android.gms:play-services:8.3.0'
compile('com.afollestad.material-dialogs:core:[email protected]') {
transitive = true
}
/* Firebase UI */
compile 'com.firebaseui:firebase-ui:0.2.2'
compile 'com.Android.support:cardview-v7:23.1.+'
compile 'com.Android.support:recyclerview-v7:23.1.+'
compile 'com.Android.support:design:23.1.+'
}
apply plugin: 'com.google.gms.google-services'
Ich suche schon nach Lösungsstunden ... Bitte helfen Sie !!
DEVELOPER_ERROR
bedeutet, dass die Google Play-Dienste keinen passenden Client in der Konsole gefunden haben, basierend auf Ihrem SHA1 und Paketnamen. Sie können SHA1s auf der Einstellungsseite der Firebase-Konsole für einen bestimmten Paketnamen hinzufügen oder einen neuen Paketnamen über die Schaltfläche Add Firebase zu Ihrer Android-App hinzufügen.
Im Allgemeinen sind einige Dinge zu überprüfen:
Wenn Google Play App Signing für Ihre App aktiviert ist, wird der Freigabesignaturschlüssel vor dem Veröffentlichen durch den auf dem Googles-Server angegebenen Schlüssel ersetzt. Sie können über den Google Play Console -> Release Management -> App Signing
überprüfen, ob er aktiviert ist.
In meinem Fall musste ich den SHA1 aus dem Abschnitt "App-Signaturzertifikat" kopieren und den allgemeinen Einstellungen für Firebase-Projekte hinzufügen, die Json-Datei neu generieren, sie dem Projekt hinzufügen und die APK erneut laden, und der Fehler wurde behoben.
Fehlercode 10 ist ein konstanter Wert von CommonStatusCodes.DEVELOPER_ERROR
, was bedeutet, dass Sie Ihr Projekt falsch konfiguriert haben
Was du tun kannst
prüfen Sie, ob SHA in PlayStore Console und Firebase Console identisch ist.
Kopieren Sie SHA von der Google Play-Konsole.
füge es in die Firebase Console ein
Was kannst du noch tun?
Zeigen Sie aussagekräftige Meldungen im einfachen englischen Fehlerfall an
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e);
String messageToDisplay = "Authentication failed.";
switch (e.getStatusCode()) {
case CommonStatusCodes.API_NOT_CONNECTED: //17
messageToDisplay += "The client attempted to call a method from an API that failed to connect.";
break;
case CommonStatusCodes.DEVELOPER_ERROR: //10
messageToDisplay += "The application is misconfigured.";
break;
case CommonStatusCodes.ERROR: //13
messageToDisplay += "The operation failed with no more detailed information.";
break;
case CommonStatusCodes.INTERNAL_ERROR: //8
messageToDisplay += "An internal error occurred.";
break;
case CommonStatusCodes.INVALID_ACCOUNT: //8
messageToDisplay += "Invalid account name specified.";
break;
case CommonStatusCodes.SIGN_IN_REQUIRED: //8
messageToDisplay += "Please Sign In to continue.";
break;
}
Toast.makeText(LoginActivity.this, messageToDisplay,
Toast.LENGTH_SHORT).show();
Ich hatte das gleiche Problem. Was passiert, ist, dass Sie ein SHA1-Debugging haben und SHA1 freigeben. Normalerweise haben wir nur SHA1 Debug verwendet und das .apk für Google Play erstellt. Wenn Sie jedoch Google Sigin verwenden, müssen Sie das Firebase-Release von SHA1 eingeben.
Um die Version SHA1 anzuzeigen, verwenden Sie den folgenden Befehl:
keytool -list -v -keystore C:\ProjectsData\keystore\my-release-key.keystore -alias alias_name
Geben Sie dann diesen SHA1 auf der Firebase ein
https://support.google.com/firebase/answer/7000104
Diese Antwort SHA1:
SHA-1 Fingerprint des Keystore-Zertifikats
Ich hoffe ich habe dir geholfen.
Ich hatte das gleiche Problem und habe es mit diesen Schritten zum Laufen gebracht:
1. Fügen Sie dem Firebase-Projekt den Fingerabdruck DEBUG_KEYSTORE SHA1 hinzu. Verwenden Sie den folgenden Befehl (MAC/LINUX)
keytool -exportcert -list -v \-alias androiddebugkey -keystore ~/.Android/debug.keystore
2. Erzeugen Sie jetzt eine signierte apk Ihres Projekts. Der Prozess umfasst das Erstellen eines Keystores für die Release-Version Ihrer App. Kopieren Sie den Pfad der neu generierten .jks-Datei.
3. Generiere jetzt den RELEASE_KEYSTORE SHA1-Fingerabdruck mit dem folgenden Befehl
keytool -list -v -keystore FULL_PATH_TOJKS_FILE -alias ALIAS_NAME
4. Kopieren Sie den neuen SHA1 aus der Ausgabe und fügen Sie ihn als weiteren SHA1-Fingerabdruck in Ihre Firebase-Anwendungskonsole ein.
Jetzt bist du gut zu gehen! ---- Hoffen! es hilft.
Ich habe den neuen Debug-SHA1-Schlüssel mit den folgenden Schritten erstellt und den SHA1-Schlüssel in meinen Projekteinstellungen ersetzt. es hat für mich funktioniert.
- Öffnen Sie Ihr Projekt.
- Klicken Sie auf Datei -> Neu -> Klicken Sie auf Google -> Wählen Sie Google Maps-Aktivität aus -> Klicken Sie auf Fertig stellen. - Android Studio generiert eine automatische Datei google_maps_api.xml.
- In dieser Datei erhalten Sie den Debug-SHA1-Schlüssel.
Ersetzen Sie diesen SHA1-Schlüssel in den Projekteinstellungen. Laden Sie dann den neuen google-services.json
aus den Einstellungen herunter und ersetzen Sie ihn in Ihrem Projekt, da sich certificate_hash und client_id ändern.
Ich denke, Sie müssen Ihre Play-Service-Version ändern.
Siehe Firebase Android Codelab , um der App/build.gradle-Datei Firebase Auth-Abhängigkeit hinzuzufügen.
Versuchen Sie, Ihren Spieldienst in Gradle wie folgt zu aktualisieren:
/* For Google Play Services */
...
compile 'com.google.Android.gms:play-services:9.0.0'
...
Die Anwendung ist falsch konfiguriert. Dieser Fehler kann nicht behoben werden und wird als fatal behandelt. Der Entwickler sollte sich danach die Protokolle ansehen, um ausführlichere Informationen zu ermitteln.
Beim Erstellen des OAuth-Schlüssels müssen Sie sicherstellen, dass Sie den richtigen Paketnamen angeben. Dies bedeutet den Paketnamen, der in Ihrer Manifestdatei enthalten ist.
Wenn Sie mehrere Module verwenden (z. B. eine Bibliothek wie FirebaseUI-Android), stellen Sie sicher, dass Sie beim Erstellen des Schlüssels den Paketnamen verwenden, von dem Sie die Google-Authentifizierung anfordern.
Klicken Sie auf Here (Google Developer guide line) und erstellen Sie ein neues Projekt für die Firebase-Konsole Dieser Link ist auf die Standardeinstellung gesetzt, sodass Sie ihn nicht manuell hinzufügen müssen
Ich hatte das gleiche Problem. Nach zwei Tagen Schmerzen bemerkte ich, dass meine Version SHA1 unkorrekt war (ich habe sie mit dem Keytool in Java/bin erhalten und es gab mir ein schlechtes SHA1. Wahrscheinlich weil Android Studio jetzt ein eigenes Java-Paket und nicht das JDK verwendet) . Besserer Weg, den korrekten SHA1 hier zu erhalten SHA-1 Fingerabdruck des Keystore-Zertifikats