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

时间:2018-10-10 19:29:35

标签: android firebase firebase-authentication

我正在开发一个使用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
}

1 个答案:

答案 0 :(得分:1)

这听起来像是您期望Google帐户用户名覆盖最初与Firebase帐户相关联的电话身份验证用户名。事实证明,这种方式行不通。首次创建帐户时,它将从用于验证其身份的提供者那里继承用户信息。如果首先使用电话身份验证,则名称未知,因此该帐户为空。 此值持续until you write code to change it

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

如果您转向另一个方向-Google身份验证,然后再进行电话身份验证,则电话身份验证帐户中的空名称不会覆盖从Google获得的名称。