【发布时间】:2017-07-02 18:45:44
【问题描述】:
我正在使用 Firebase 开发 Android 应用,在我的应用中我使用 Firebase 匿名登录和 Google 登录。
如果用户未登录,则应用程序启动时,我使用匿名身份验证来登录用户。
之后,当用户选择使用 Google 登录时,我将匿名帐户转换为永久帐户。
我的问题是,当用户的帐户从匿名帐户转换为永久帐户(在这种情况下使用 Google 登录)时,我没有得到用户的显示名称和照片网址。
为了从匿名帐户转换为永久帐户,我使用以下代码。
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
mAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "linkWithCredential:onComplete:" + task.isSuccessful());
if (!task.isSuccessful()) {
Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",Toast.LENGTH_SHORT).show();
//If Google Account already linked up with other UID
Tasks.await(mAuth.signInWithCredential(credential)).getUser();
}
}
});
登录过程完成后,会调用 AuthStateListener onAuthStateChanged,然后在 onAuthStateChanged 中提取用户的显示名称、用户的照片网址和用户的电子邮件。下面是 onAuthStateChanged 代码。
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null && !(user.isAnonymous())) {
Log.d("userDetails", "UID: " + user.getUid());
Log.d("userDetails", "Name: " + user.getDisplayName());
Log.d("userDetails", "PhotoUrl: " + user.getPhotoUrl().toString());
Log.d("userDetails", "Email: " + user.getEmail());
}
在日志中,user.getDisplayName() 和 user.getPhotoUrl() 为空
我不明白我做错了什么。请帮忙。
感谢和问候,
【问题讨论】:
-
如果您退出并重新登录,那么
onAuthStateChanged中是否有用户的个人资料信息? -
是的,我已尝试退出并重新登录,但用户的个人资料信息中的用户照片 url 和显示名称仍然为空。但如果我没有使用匿名登录,而是直接使用 Google 登录流程为用户签名,我可以获取用户的个人资料信息。
-
似乎在使用 signInWithCredentials 而不是在使用 linkWithCredential 时填充了照片和姓名
标签: android firebase firebase-authentication google-signin