2016-06-30 15 views
7

Podczas tworzenia użytkownika chcę mieć możliwość ustawienia jego wyświetlanej nazwy. Jak mam to zrobić w systemie Android? Oto przykład tego, co chcę osiągnąć:Zestaw Firebase setDisplayName użytkownika podczas tworzenia użytkownika 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 
      } 
}); 

Przyjmij, że wszystkie zmienne zostały zadeklarowane i/lub poprawnie zainicjowane.

+2

Zaleca się utworzenie [MCVE] (http://stackoverflow.com/help/mcve) przed opublikowaniem problemu. – devprashant

+0

@devprashant Zrobię to –

Odpowiedz

15

Znalazłem odpowiedź w dokumentach Firebase. Zacytuję go tutaj: "Jeśli logowanie zakończyło się pomyślnie, AuthStateListener uruchomi wywołanie zwrotne onAuthStateChanged. W wywołaniu zwrotnym można użyć metody getCurrentUser w celu uzyskania danych konta użytkownika." Oto link: https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password

Oznacza to, że jeśli wykonasz powyższy kod (bez linii FirebaseUser), a następnie zadeklarujesz i zainicjujesz Firebase AuthStateListener, jak pokazano poniżej, możesz ustawić wyświetlaną nazwę użytkownika, a następnie przejść dalej. do każdej innej aktywności chcesz:

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

I nie zapomnij dodać AuthStateListener w onResume() tak:

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

Podobnie, nie zapomnij, aby usunąć go w metodzie OnStop tak jak:

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

I gotowe! Ustawiasz wyświetlaną nazwę użytkownika, aby móc jej używać w innych działaniach. Byłoby to przydatne, gdybyś chciał pozdrowić użytkownika lub uzyskać dostęp do innych danych użytkownika powiązanych z wyświetlaną nazwą.

+0

Ale w takim przypadku będziemy wykonywać dwa połączenia sieciowe poprawnie? Czy nie powinien istnieć sposób, w jaki możemy połączyć go w jedną rejestrację? – Zen

+0

@Zen ten kod służy do sprawdzania, czy użytkownik jest zalogowany. Jeśli użytkownik jest zalogowany, możesz to zrobić, przechodząc do ekranu głównego aplikacji (używając intencji), lub możesz przejść do rejestracji/logowania strona. Kod rejestracyjny/logowania i ten kod zwykle będą się składać z dwóch różnych czynności, w zależności od tego, jak zaprojektowałeś swoją aplikację. –

+0

Ten kod zaktualizowano profil użytkownika za każdym razem, gdy wywołano funkcję onResume. Czy to jest poprawne ? –

5

Alternatywnie, można ustawić Firebase wyświetlaną nazwę użytkownika pisząc następujące trzy wiersze kodu:

FirebaseUser user = mAuth.getCurrentUser(); 

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

user.updateProfile(profileUpdates); 

Dzięki temu oryginalny kod powinien wyglądać tak:

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

Co polega to na tym, że po pomyślnym utworzeniu konta użytkownika przy użyciu uwierzytelniania za pomocą poczty e-mail i hasła użytkownik zaloguje się. W tym momencie można pobrać bieżący obiekt użytkownika Firebase i ustawić jego właściwość wyświetlaną na dowolny ciąg znaków.

Jest to idealne rozwiązanie do testowania nazwy profilu użytkownika w wiadomościach weryfikacyjnych.

Uwaga: a Firebase obiekt Użytkownik ma stały zestaw podstawowych właściwości-unikatowy identyfikator, podstawowy adres e-mail, nazwę i adres URL zdjęcia przechowywane w bazie danych użytkownika projektu, które mogą być aktualizowane przez użytkownika . Nie można bezpośrednio dodawać innych właściwości do obiektu użytkownika Firebase; zamiast tego możesz przechowywać dodatkowe właściwości w bazie danych Firebase Realtime. (Firebase User Object Properties Doc)

+0

Ta odpowiedź trafi na szczyt w czasie. Dzięki, działało w razie potrzeby. –

Powiązane problemy