Firebase setDisplayName пользователя при создании пользователя Android
При создании пользователя я хочу указать его/ее отображаемое имя. Как это сделать в 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
}
});
Предположим, что все переменные были объявлены и/или инициализированы правильно.
Ответы
Ответ 1
Я нашел ответ в документах Firebase. Я приведу его здесь: "Если вход был выполнен успешно, AuthStateListener запускает обратный вызов onAuthStateChanged. В обратном вызове вы можете использовать метод getCurrentUser для получения данных учетной записи пользователя". Вот ссылка: https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password
Таким образом, если вы выполните вышеуказанный код (минус строка FirebaseUser), а затем объявите и инициализируйте Firehase AuthStateListener, как показано ниже, вы можете установить отображаемое имя пользователя, а затем перейти к любому другому действию, которое вы хотите:
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);
}
}
};
И не забудьте добавить AuthStateListener в onResume() так:
@Override
public void onResume(){
super.onResume();
mAuth.addAuthStateListener(mAuthListener);
}
Аналогично, не забудьте удалить его в методе onStop следующим образом:
@Override
public void onStop(){
super.onStop();
if(mAuthListener != null){
mAuth.removeAuthStateListener(mAuthListener);
}
}
И сделано! Вы указываете отображаемое имя пользователя, чтобы использовать его в других действиях. Это было бы полезно, если вы хотите приветствовать пользователя или получать доступ к другим пользовательским данным, привязанным к отображаемому имени.
Ответ 2
Вы можете установить отображаемое имя пользователя Firebase, написав следующие три строки кода:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(mName).build();
user.updateProfile(profileUpdates);
Таким образом, ваш оригинальный код должен выглядеть так:
mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
// Sign in is successful
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName(mName).build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
}
}
});
}
});
Официальная документация Firebase: Firebase Обновление профиля пользователя
Приведенный выше код делает то, что, когда учетная запись пользователя успешно создается с использованием аутентификации по электронной почте и паролю, она затем входит в систему пользователя. После того как пользователь вошел в систему, вы можете получить доступ к свойствам пользовательского объекта Firebase и установить для свойства отображаемого имени любую нужную вам строку.
Это отлично подходит для проверки имени профиля пользователя в письмах с подтверждением.
Примечание. Пользовательский объект Firebase имеет фиксированный набор основных свойств - уникальный идентификатор, основной адрес электронной почты, имя и URL-адрес фотографии. Эти основные свойства хранятся в пользовательской базе данных проекта. Кроме того, эти свойства могут быть обновлены программно. Однако вы не можете добавлять другие свойства в объект пользователя Firebase напрямую; вместо этого вы можете хранить любые дополнительные свойства (например, информацию о пользователе) в вашей базе данных Firebase Realtime и ссылаться на них оттуда. (Документ по свойствам объекта пользователя Firebase)