Android 当phoneAuth与google登录链接时,firebaseAuth.getInstance().getCurrentUser().getDisplayName()返回null

Android 当phoneAuth与google登录链接时,firebaseAuth.getInstance().getCurrentUser().getDisplayName()返回null,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在开发一个应用程序,其中我使用firebasePhoneAuthCredential和谷歌登录(链接)登录用户,以便用户可以使用电话号码或谷歌登录 首先,通过otp验证电话号码,然后在下一步中,将电话验证链接到google帐户(在这里一切正常之前,我可以链接帐户)。 当我尝试使用firebaseAuth.getInstance().getCurrentUser().getDisplayName()时出现问题,它返回null 我不知道出了什么问题,因为当用户第一次使用google登录,然后链接

我正在开发一个应用程序,其中我使用firebase
PhoneAuthCredential
谷歌登录(链接)登录用户,以便用户可以使用电话号码或谷歌登录

首先,通过otp验证电话号码,然后在下一步中,将电话验证链接到google帐户(在这里一切正常之前,我可以链接帐户)。 当我尝试使用
firebaseAuth.getInstance().getCurrentUser().getDisplayName()
时出现问题,它返回null

我不知道出了什么问题,因为当用户第一次使用google登录,然后链接到电话号码时,我可以获取显示名称。

提前谢谢

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

   GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(Objects.requireNonNull(account));
            Toast.makeText(this, ""+account.getDisplayName()+" "+account.getPhotoUrl(), Toast.LENGTH_SHORT).show(); //here getting display name
        } else {
            // Google Sign In failed, update UI appropriately

            Toast.makeText(PhoneToGoogle.this, "It seems like you have cancelled Google Authentication!", Toast.LENGTH_LONG).show();

        }
    }
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);


    Objects.requireNonNull(mAuth.getCurrentUser()).linkWithCredential(credential) //linking with phoneAuth
            .addOnCompleteListener(PhoneToGoogle.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {

                        saveUserProfileDataInFirebaseDataBase(Objects.requireNonNull(task.getResult()).getUser());
                        Toast.makeText(PhoneToGoogle.this, "linked", Toast.LENGTH_SHORT).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        showSignInFailedMessage((Objects.requireNonNull(task.getException())).getLocalizedMessage());
                    }
                }
            });
}
 private void saveUserProfileDataInFirebaseDataBase(final FirebaseUser user){
    databaseReference.child(user.getUid()).child(NAME).setValue(user.getDisplayName());
    //here getting display name null
}
@覆盖
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
GoogleSignInApi.getsigninent(…);
if(requestCode==RC\u登录){
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
if(result.issucess()){
//Google登录成功,通过Firebase验证
GoogleSignInAccount account=result.getSignInAccount();
firebaseAuthWithGoogle(Objects.requireNonNull(account));
Toast.makeText(此““+account.getDisplayName()+”+account.getPhotoUrl(),Toast.LENGTH_SHORT).show();//此处获取显示名称
}否则{
//Google登录失败,请适当更新UI
Toast.makeText(phoneToogle.this,“好像你取消了谷歌认证!”,Toast.LENGTH\u LONG.show();
}
}
}
私有void firebaseAuthWithGoogle(谷歌签名帐户){
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
Objects.requireNonNull(mAuth.getCurrentUser()).linkWithCredential(credential)//与phoneAuth链接
.addOnCompleteListener(PhoneToLogle.this,新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
SaveUserProfileDataInfireBase(Objects.requireNonNull(task.getResult()).getUser());
Toast.makeText(phoneToogle.this,“linked”,Toast.LENGTH_SHORT.show();
}否则{
//如果登录失败,则向用户显示消息。
showSignInFailedMessage((Objects.requirennoull(task.getException()).getLocalizedMessage());
}
}
});
}
私有void SaveUserProfileDataInfireBase(最终FirebaseUser用户){
databaseReference.child(user.getUid()).child(NAME).setValue(user.getDisplayName());
//这里显示名称为空
}

听起来您希望Google帐户用户名覆盖最初与Firebase帐户关联的phone auth用户名。结果证明它不是这样工作的。首次创建帐户时,它将从用于验证其身份的提供程序继承用户信息。在电话认证先到的情况下,没有名字是已知的,因此帐户为空。此值持续存在

初始电话身份验证后,如果任何其他帐户链接到原始Firebase身份验证用户,则它不会从链接的帐户继承用户信息


如果您转到另一个方向-Google auth后跟phone auth,phone auth帐户中的空名称不会覆盖从Google获得的名称。

听起来您希望Google帐户用户名覆盖最初与Firebase帐户关联的phone auth用户名。结果证明它不是这样工作的。首次创建帐户时,它将从用于验证其身份的提供程序继承用户信息。在电话认证先到的情况下,没有名字是已知的,因此帐户为空。此值持续存在

初始电话身份验证后,如果任何其他帐户链接到原始Firebase身份验证用户,则它不会从链接的帐户继承用户信息


如果您转到另一个方向-Google auth后跟phone auth,phone auth帐户中的空名称不会覆盖从Google获得的名称。

您需要向我们提供一些代码来使用。提供的代码,请检查您需要向我们提供一些代码来使用。提供的代码,请检查我认为UserProfileChangeRequest可以完成任务。非常感谢。我认为UserProfileChangeRequest可以完成这项任务。非常感谢。