2016-06-30 18 views
7

Durante la creazione di un utente, desidero essere in grado di impostare il suo nome visualizzato. Come faccio a farlo in Android? Ecco un esempio di quello che voglio ottenere:Firebase setDisplayName dell'utente durante la creazione dell'utente 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 
      } 
}); 

assumere tutte le variabili sono state dichiarate e/o inizializzato correttamente.

+2

Si consiglia di creare un [MCVE] (http://stackoverflow.com/help/mcve) prima di inviare un problema. – devprashant

+0

@devprashant Lo farò io –

risposta

15

Ho trovato la risposta nei documenti Firebase. Lo citerò qui: "Se l'accesso è riuscito, AuthStateListener esegue il callback onAuthStateChanged. Nel callback, è possibile utilizzare il metodo getCurrentUser per ottenere i dati dell'account dell'utente." Ecco il link: https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password

Quindi questo significa che, se si fa il codice di cui sopra (meno la linea di FirebaseUser), per poi dichiarare e inizializzare un Firebase AuthStateListener come mostrato di seguito, è possibile impostare il nome visualizzato dell'utente e poi passare a qualsiasi altra attività che si desidera:

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); 
     } 
    } 
}; 

E non dimenticare di aggiungere l'AuthStateListener in onResume() in questo modo:

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

Allo stesso modo, non dimenticate di rimuoverlo nel metodo onStop così:

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

E fatto! Si imposta il nome visualizzato dell'utente in modo da poterlo utilizzare in altre attività. Ciò sarebbe utile se si desidera salutare l'utente o accedere a qualsiasi altro dato utente legato al nome visualizzato.

+0

Ma in questo caso faremmo due chiamate di rete corrette? Non dovrebbe esserci un modo in cui possiamo combinarlo in una singola registrazione? – Zen

+0

@Zen questo codice serve a verificare se un utente ha effettuato l'accesso. Se l'utente ha effettuato l'accesso, è possibile gestirlo accedendo alla schermata iniziale dell'app (utilizzando gli intent), oppure è possibile accedere alla registrazione/accesso pagina. Il codice di registrazione/accesso e questo codice saranno in genere in due attività diverse a seconda di come hai progettato la tua app. –

+0

Questo codice ha aggiornato il profilo utente ogni volta che onume chiamava. È corretto ? –

5

In alternativa, è possibile impostare il nome visualizzato Firebase dell'utente scrivendo le seguenti tre righe di codice:

FirebaseUser user = mAuth.getCurrentUser(); 

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

user.updateProfile(profileUpdates); 

In questo modo, il codice originale dovrebbe essere simile a questo:

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); 
      } 
}); 

Cosa questo avviene quando l'account dell'utente è stato creato correttamente utilizzando l'autenticazione Email e Password, l'utente accederà. A questo punto, è possibile ottenere l'attuale oggetto utente Firebase e impostare la proprietà del suo nome visualizzato su qualsiasi stringa desiderata.

Questo è ottimo per testare il nome del profilo dell'utente in Email di verifica.

Nota: Un oggetto utente Firebase ha un insieme fisso di proprietà, una base di identificazione unico, un indirizzo email principale, un nome e una foto su URL memorizzato nel database utenti del progetto, che può essere aggiornato dall'utente . Non è possibile aggiungere direttamente altre proprietà all'oggetto User di Firebase; invece, puoi memorizzare le proprietà aggiuntive nel tuo database in tempo reale di Firebase. (Firebase User Object Properties Doc)

+0

Questa risposta si farà strada verso l'alto nel tempo. Grazie, ha funzionato proprio come necessario. –

Problemi correlati