firebaseAuth.getCurrentUser() null zurückgeben, DisplayName
Wenn ich mich anmelden mit meinem google-Konto und erhalten den Namen mit der getDisplayName(), meinen Namen korrekt angezeigt, aber in der AuthStateListener nicht.
hier ein Teil von meinem code:
private void handleSignInResult(GoogleSignInResult result) {
Alert.dismissProgress();
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
if(acct != null) {
Log.i("NAME", acct.getDisplayName()); <-- RETURN MY NAME CORRECTLY
credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
fuser.linkWithCredential(credential).addOnCompleteListener(authResult);
} else {
//ERROR
}
} else {
//ERROR
}
}
Aber in meinem AuthStateListener
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser nuser = firebaseAuth.getCurrentUser();
if (nuser != null) {
Log.i("NAME", nuser.getDisplayName()); <--- RETURN NULL
}
}
Jemand wissen, warum dies passieren kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine knifflige Sache, da ist es nicht so klar in der Dokumentation...
Überprüfen Sie die getProviderData()
als hier definiert:
https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#public-method-summary
Können Sie Durchlaufen, die Liste und es haben alle Anbieter die mit diesem Konto verbundene, enthalten einen Anbieter mit der providerId = "google.com" mit einer display-Name = YOUR_GOOGLE_USERNAME
lassen Sie mich wissen, wenn Sie es nicht schaffen, die Arbeit
Nur um Ymmanuel Antwort (vielen Dank!) mit einigen Beispiel-code für jemand anderes suchen, für eine schnelle kopieren und einfügen:
Den obigen versuchen wird, auf die erste Anzeige von name und Foto-url von den Anbietern, wenn es nicht zunächst finden Sie in den Benutzer-Objekt.
Bonus: Mit glide Bilder: https://github.com/bumptech/glide .
Edmund Johnson hat Recht. Dieses Problem wurde in der Feuerstellung Auth 9.8.0. Ein workaround beinhaltet eine Herabstufung auf 9.6.1 oder zwingt "re-login" als info wird aufgefüllt, wenn der Benutzer sich abmeldet und sich wieder anmeldet. Das problem ist beschrieben in der FB Problem
Es wurde berichtet, wie ein Käfer auf FB von einer der FB-Benutzeroberfläche Mitwirkenden - Alex Saveau.
Ich hatte das gleiche Problem, ich löste es, indem Sie sich die Benutzer-und nähren Sie Sie wieder in.
Call
FirebaseAuth.getInstance().signOut();
zu unterzeichnen, dann versuchen Sie es erneut.Als ich entdeckt habe, dieses Problem ist Häufig mit der Verwendung von E-Mail - /Passwort-Authentifizierung und Social login (Facebook in meinem Fall) in der gleichen Zeit.
Fand ich eine Lösung für dieses problem, in dem FB-Dokumentation!
Die Lösung ist ein update der user-profile mit dem: UserProfileChangeRequest:
Die variable mUser ist bereits gefüllt mit den Inhalten aus den Bereichen.
Ich habe dieses Stück code innerhalb der FirebaseAuth.AuthStateListener() -> onAuthStateChanged()
Dieses Problem wird behoben, in der neuesten Version der FB-Benutzeroberfläche
compile 'com.firebaseui:FB-Benutzeroberfläche:1.2.0'
War ich immer das problem, wenn ich hatte:
Einen workaround, dass es fest war für mich zu ersetzen:
Durchlaufen
user.getProviderData()
wie vorgeschlagen anderswo nicht fix it für den späteren Versionen.Lassen Sie mich zunächst sagen, es gibt keine Notwendigkeit, ein downgrade auf eine Gradle-Dateien oder logout und login der Benutzer mehrmals wie gesagt, von anderen nur zur Anzeige der Benutzernamen. Ich habe das Problem gelöst, einen anderen Weg, während immer noch halten die neuesten Gradle-Dateien und nicht über die zur Anmeldung der Benutzer-und ausatmen mehrere Male. Das Problem mit
getDisplayName()
ist sehr groß, so dass ich möchten, dass Sie so viel wie möglich für die künftigen Nutzer der FB ersparen Sie sich die Kopfschmerzen.Hier sind die details der Lösung:
Lösung 1:
Für Benutzer, die Authentifizierung(Anmeldung) mit mehreren Anbietern wie Facebook, Google usw. und/oder E-Mail/Passwort, die Sie erstellt auf sign-up:
Die erste Sache, die Sie wollen, um sicherzustellen, dass wenn Sie einen Benutzer-sign-up mit der app für die erste Zeit, die Sie speichern, deren name natürlich auf der Datenbank unter Ihrer eindeutigen id. Das kann wie folgt Aussehen:
Nachdem Sie den Namen des Benutzers wurde gespeichert, die in Ihrem FB-Datenbank und haben Sie diese Zeichen in Ihrer app können Sie Ihre Benutzernamen so etwas wie dieses:
Das ist es. Jetzt rufen Sie einfach die Methode
showUserName()
oder was auch immer Ihre Methode wird aufgerufen, in Ihrer onCreate und hoffentlich hilft.Lösung 2:
Für Benutzer, die Zeichen in Ihre app mit NUR einem social-media-Dienstleister wie Facebook, Twitter, Google oder was auch immer andere option Firebase ermöglicht:
Dass es für Lösung 2, nur die Richtlinien befolgen, die auf FB, und Sie sollten gut sein.
Hier ist ein link, falls du neugierig bist:
Holen Sie sich ein Benutzerprofil-Informationen
Ich hoffe wirklich, dass dies hilft jemand kämpft mit der
getDisplayName()
Problem.Fazit:
Wenn Ihre app nur Facebook, Twitter, Google oder was auch immer andere social-media-sign-in-Optionen Firebase bietet dann einfach aufrufen
getDisplayName()
Methode, die auf dem zurzeit angemeldet user sollte genug sein, um zu zeigen, Ihren Benutzernamen ein.Ansonsten, wenn die app ermöglicht es dem Benutzer, sich mit einer E-Mail/Passwort, die Sie erstellt haben, dann stellen Sie sicher, Sie haben Ihre Namen/Benutzernamen auf sign-up, so dass Sie Sie später zu verwenden, um es anzuzeigen.