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)