2016-10-01 28 views
2
private void registerUser(){ 
String emailId = email.getText().toString().trim().toLowerCase(); 
String password = pass.getText().toString().trim(); 

firebaseAuth.createUserWithEmailAndPassword(emailId,password) 
     .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       progressDialog.dismiss(); 
       if(task.isSuccessful()){ 
        Toast.makeText(MainActivity.this,"Registration Successful",Toast.LENGTH_SHORT).show(); 

        //show chatroom 
        finish(); 
        startActivity(new Intent(getApplicationContext(),ProfileActivity.class)); 
       } 
       else{ 
        Toast.makeText(MainActivity.this,"Registration Failed. Please try again",Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
} 

Ich wünsche einen Benutzernamen oder Anzeigenamen, um es hinzuzufügen, aber ich bin nicht in der Lage, dies zu tun. Ich habe ein paar Dinge ausprobiert, aber immer noch kein Ergebnis. Bitte hilf mir. Ich benötige diese Funktionalität für eine Projektaufgabe diese Woche.Wie fügt man in Firebase DisplayName mit Email + Passwort-Authentifizierung hinzu? Android

+0

Ihr, dass sie nicht FirebaseAuth verwenden, wenn Sie Sie Benutzerdaten zu speichern, haben manuell tun müssen, dass RealtimeDatabase mit –

+0

@SakchhamSharma es gibt einen Weg, es zu tun, nur nicht direkt beim Erstellen eines neuen Benutzers. Siehe meine Antwort unten :) – edant92

+0

@ edant92 Ich war zum Zeitpunkt der Erstellung –

Antwort

2

Dies ist definitiv möglich, aber in der Benutzererstellung Methode einfach nicht.

Nachdem Sie Ihre Benutzer erstellt haben (möglicherweise in addOnSuccessListener) Sie etwas ähnlich dem folgenden Code verwenden, können die Benutzer zu aktualisieren Displayname:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder().setDisplayName("John Smith").build(); 

user.updateProfile(profileUpdates); 

hoffe, das hilft!

Edit: Ich sagte zuvor, den Code zu den AuthStateListener hinzufügen, aber Franks Vorschlag unten, um es in den AddOnSuccessListener setzen ist besser/macht mehr Sinn, also habe ich die Antwort aktualisiert, um dies zu reflektieren.

+2

Gute Antwort! Ich würde dies wahrscheinlich in der 'addOnSuccessListener' tun, da Sie normalerweise nur den Namen festlegen möchten, wenn Sie das Konto erstellen. –

0

Ich untersuchte vor kurzem dieses Problem für meine eigene Implementierung (SDK Version 4.4.1). Was ich gefunden habe ist, dass es perfekt funktioniert, wenn Sie sicher sind, dass Sie genau dasselbe task.result-Objekt von der Registrierung/Anmeldung verwenden und nicht das Objekt von der Standardinstanz.

Eine weitere Arbeit um das half ich eine E-Mail-Referenztabelle wie dies in Ihrer FB DB haben:

{ "EmailRef": { "username1" : "[email protected] domain .com"}, {"username2" : "[email protected]"} } 

und dann durch den E-Mail des Benutzers für die Benutzername abzufragen (von auth.CurrentUser.Email) unter Verwendung eines Verfahrens wie folgt aus:

public static void GetCurrentUserName(Firebase.Auth.FirebaseUser user) 
{ 
    string message = ""; 
    DatabaseReference dbRef = FbDbConnection(); 
    FirebaseDatabase.DefaultInstance.GetReference("EmailRef").OrderByValue().EqualTo(user.Email).GetValueAsync().ContinueWith(task => 
    { 
     if (task.IsFaulted) 
     { 
      message = "GetCurrentUserName encountered an error: " + task.Exception; 
      ModalManager.BuildFireBaseDebugModal(message); 
      Debug.LogError(message); 
      return; 
     } 
     if (task.IsCanceled) 
     { 
      message = "GetCurrentUserName was canceled."; 
      Debug.LogError(message); 
      return; 
     } 
     if (task.IsCompleted) 
     { 
      foreach (DataSnapshot ss in task.Result.Children.AsEnumerable()) 
      { 
       try 
       { 
        if (ss.Value != null) 
        { 
         if (ss.Value.ToString() == user.Email) 
         { 
          message = "GetCurrentUserName was successful -- Email: " + user.Email + " Username: " + user.DisplayName; 
          Debug.LogError(message); 
         } 
        } 
        return; 
       } 
       catch (Exception ex) 
       { 
        message = "GetCurrentUserName Exception: " + ex; 
        Debug.LogError(message); 
        return; 
       } 
      } 
     } 

    }); 
} 
Verwandte Themen