2016-06-30 21 views
7

Beim Erstellen eines Benutzers möchte ich seinen/ihren Anzeigenamen festlegen können. Wie mache ich das in Android? Hier ist ein Beispiel dafür, was ich erreichen möchte:Firebase setDisplayName des Benutzers beim Erstellen des Benutzers Android

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()){ 
       FirebaseUser.getCurrentUser().setDisplayName(mName); //I want to do this 
      } 
}); 

Angenommen, alle Variablen wurden erklärt und/oder richtig initialisiert.

+2

Es wird empfohlen, ein [MCVE] (http://stackoverflow.com/help/mcve) zu erstellen, bevor Sie ein Problem melden. – devprashant

+0

@devprashant Ich werde das tun –

Antwort

15

Ich fand die Antwort in der Firebase-Dokumentation. Ich zitiere es hier: "Wenn die Anmeldung erfolgreich war, führt der AuthStateListener den Callback onAuthStateChanged aus. Im Callback können Sie die getCurrentUser-Methode verwenden, um die Accountdaten des Benutzers abzurufen." Hier ist der Link: https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password

Also das heißt, wenn Sie den obigen Code (abzüglich der FirebaseUser Zeile), und dann zu deklarieren und initialisieren einen Firebase AuthStateListener wie unten gezeigt, können Sie den Anzeigenamen des Benutzers einstellen und dann weitermachen für jede andere Tätigkeit Sie wollen:

mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if(user!=null){ 
      UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
         .setDisplayName(mName).build(); 
      user.updateProfile(profileUpdates); 
      Intent intent = new Intent(currentActivity.this, nextActivity.class); 
      startActivity(intent); 
     } 
    } 
}; 

Und nicht zu vergessen die AuthStateListener in onResume() wie so hinzuzufügen:

@Override 
public void onResume(){ 
    super.onResume(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

Ebenso nicht vergessen es in dem OnStop Verfahren zu entfernen so:

@Override 
public void onStop(){ 
    super.onStop(); 
    if(mAuthListener != null){ 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 

Und fertig! Sie legen den Anzeigenamen des Benutzers fest, damit Sie ihn für andere Aktivitäten verwenden können. Dies ist nützlich, wenn Sie den Benutzer begrüßen oder auf andere Benutzerdaten zugreifen möchten, die mit dem Anzeigenamen verknüpft sind.

+0

Aber in diesem Fall würden wir zwei Netzwerkanrufe korrekt machen? Sollte es nicht einen Weg geben, wie wir es in einer einzigen Anmeldung kombinieren können? – Zen

+0

@Zen Mit diesem Code überprüfen Sie, ob ein Benutzer angemeldet ist. Wenn der Benutzer angemeldet ist, können Sie damit umgehen, indem Sie auf den Startbildschirm der App gehen (Intents verwenden), oder Sie können zur Anmeldung/Anmeldung gehen Seite. Der Anmelde-/Anmeldecode und dieser Code werden in der Regel zwei verschiedene Aktivitäten umfassen, je nachdem, wie Sie Ihre App gestaltet haben. –

+0

Dieser Code aktualisiert Benutzerprofil jedes Mal onResume aufgerufen. Ist das korrekt ? –

5

Alternativ können Sie auch den Namen Firebase Anzeige des Benutzers festgelegt durch die folgenden drei Zeilen Code zu schreiben:

FirebaseUser user = mAuth.getCurrentUser(); 

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
        .setDisplayName(mName).build(); 

user.updateProfile(profileUpdates); 

Dadurch, Ihr Original-Code soll wie folgt aussehen:

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()){ 
       // Sign in success 
       FirebaseUser user = mAuth.getCurrentUser(); 

       UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
        .setDisplayName(mName).build(); 

       user.updateProfile(profileUpdates); 
      } 
}); 

Was Wenn das Konto des Benutzers erfolgreich mit der E-Mail- und Kennwortauthentifizierung erstellt wurde, wird der Benutzer angemeldet. An diesem Punkt können Sie das aktuelle Firebase-Benutzerobjekt abrufen und seine Anzeigename-Eigenschaft auf die gewünschte Zeichenfolge festlegen.

Dies ist ideal zum Testen des Profilnamens des Benutzers in Bestätigungs-E-Mails.

Hinweis: Ein Firebase-Benutzerobjekt verfügt über einen festen Satz grundlegender Eigenschaften - eine eindeutige ID, eine primäre E-Mail-Adresse, ein Name und eine Foto-URL -, die in der Benutzerdatenbank des Projekts gespeichert und vom Benutzer aktualisiert werden können . Sie können dem Firebase-Benutzerobjekt nicht direkt andere Eigenschaften hinzufügen. Stattdessen können Sie die zusätzlichen Eigenschaften in Ihrer Firebase Realtime Database speichern. (Firebase User Object Properties Doc)

+0

Diese Antwort wird rechtzeitig an die Spitze gelangen. Danke, funktionierte genau wie nötig. –

Verwandte Themen