我正在开发一个使用Firebase PhoneAuthCredential
和 Google登录 (已链接)的应用程序,以便用户登录通过电话号码或Google登录登录。
首先,通过otp验证电话号码,然后在下一步将电话身份验证与google帐户关联(直到这里一切正常,我可以关联帐户)。
当我尝试使用firebaseAuth.getInstance().getCurrentUser().getDisplayName()
时出现问题,它返回null
我不知道出了什么问题,因为当用户首先使用Google登录进行登录然后链接到电话号码时,我能够获取显示名称。 < / p>
谢谢!
@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
}
答案 0 :(得分:1)
这听起来像是您期望Google帐户用户名覆盖最初与Firebase帐户相关联的电话身份验证用户名。事实证明,这种方式行不通。首次创建帐户时,它将从用于验证其身份的提供者那里继承用户信息。如果首先使用电话身份验证,则名称未知,因此该帐户为空。 此值持续until you write code to change it。
初始电话身份验证后,如果其他任何帐户已链接到原始Firebase身份验证用户,则不会从链接的帐户继承用户信息。
如果您转向另一个方向-Google身份验证,然后再进行电话身份验证,则电话身份验证帐户中的空名称不会覆盖从Google获得的名称。