创建用户Android时用户的Firebase setDisplayName

Ani*_*ali 19 android firebase firebase-authentication

创建用户时,我希望能够设置他/她的显示名称.我如何在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
            }
});
Run Code Online (Sandbox Code Playgroud)

假设所有变量都已正确声明和/或初始化.

Dab*_* B. 26

或者,您可以通过编写以下三行代码来设置用户的Firebase显示名称:

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

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

user.updateProfile(profileUpdates);
Run Code Online (Sandbox Code Playgroud)

通过这样做,您的原始代码应如下所示:

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.");
                      }
                  }
              });
        }
});
Run Code Online (Sandbox Code Playgroud)

这样做的是,当使用电子邮件和密码身份验证成功创建用户的帐户时,它将登录用户.此时,您可以获取当前的Firebase用户对象并将其显示名称属性设置为您想要的任何字符串.

这非常适合在Verification Emails中测试用户的个人资料名称.

注意:Firebase用户对象具有一组固定的基本属性 - 存储在项目用户数据库中的唯一ID,主电子邮件地址,名称和照片URL,可由用户更新.您无法直接向Firebase用户对象添加其他属性; 相反,您可以将其他属性存储在Firebase实时数据库中.(Firebase用户对象属性文档)


Ani*_*ali 20

我在Firebase文档中找到了答案.我将在此处引用它:"如果登录成功,则AuthStateListener运行onAuthStateChanged回调.在回调中,您可以使用getCurrentUser方法获取用户的帐户数据." 以下链接:https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password

这意味着,如果您执行上述代码(减去FirebaseUser行),然后声明并初始化Firebase 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);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在onResume()中添加AuthStateListener,如下所示:

@Override
public void onResume(){
    super.onResume();
    mAuth.addAuthStateListener(mAuthListener);
}
Run Code Online (Sandbox Code Playgroud)

同样,不要忘记在onStop方法中删除它,如下所示:

@Override
public void onStop(){
    super.onStop();
    if(mAuthListener != null){
        mAuth.removeAuthStateListener(mAuthListener);
    }
}
Run Code Online (Sandbox Code Playgroud)

并做了!您可以设置用户的显示名称,以便在其他活动中使用它.如果您想要问候用户或访问与显示名称关联的任何其他用户数据,这将非常有用.