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