Android displayName在使用Firebase Auth创建用户后显示null
我正在尝试使用Firebase auth添加一个用户,它将displayName返回为null,即使它在注册时通过UI请求它。你知道为什么以及如何修复吗?以下是我用于执行此操作的代码:Android displayName在使用Firebase Auth创建用户后显示null,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在尝试使用Firebase auth添加一个用户,它将displayName返回为null,即使它在注册时通过UI请求它。你知道为什么以及如何修复吗?以下是我用于执行此操作的代码: startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder()
startActivityForResult( AuthUI.getInstance()
.createSignInIntentBuilder()
.setProviders(Collections.singletonList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build()))
.build(), RC_SIGN_IN);
在结果的活动中
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
// user is signed in!
//save user
saveUser();
startMainActivity();
return;
}
保存用户代码如下:
private void saveUser(){
FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
final User user = new User();
if (fUser.getDisplayName() != null) {
user.setUserName(fUser.getDisplayName());
} else {
Log.e("FB_info", "User has no display name");
}
user.setUserEmail(fUser.getEmail());
final DatabaseReference userRef = FirebaseDatabase.getInstance().getReference(FirebaseRefs.getUsersRef()).child(fUser.getUid());
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()){
userRef.updateChildren(user.toMap());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
知道为什么显示名称返回null吗?所以这似乎是Firebase本身(而不是Firebase UI)中的错误(现在已知)。该漏洞似乎是在Firebase Android SDK v9.8.0版本中引入的。目前,解决办法之一是强制用户在系统注册后退出并重新登录。另一个问题是将FirebaseUI降级为使用较旧Firebase SDK版本的版本。
来源:您还可以使用Google方法从FirebaseAuth获取名称
private void firebaseAuthWithGoogle(final GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
} else {
System.out.println(acct.getDisplayName());
System.out.println(acct.getPhotoUrl());
}
}
}); }
private void firebaseAuthWithGoogle(最终谷歌签名帐户){
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
Toast.makeText(MainActivity.this,“身份验证失败”,
吐司。长度(短)。show();
}否则{
System.out.println(acct.getDisplayName());
System.out.println(acct.getPhotoUrl());
}
}
}); }
我也有同样的问题,我正准备发帖询问。我正在使用android操作系统和“FirebaseUI for android-Auth”库。问题在于OP声明:注册新用户后立即返回的user对象的displayName()调用值为null。但是,如果您使用相同的凭据再次登录(而不是注册),则名称字段将包含预期的值。是的,在我将该问题发布到github上后,他们通过电子邮件向我发送了相关信息。他们正在进行修复,但表示您可以下载到9.8.0。10.0.0版本也在Firebase Auth方法中引入了一个bug。希望他们能尽快解决这个问题!谢谢你的回复!现在他们说你需要将play服务和Firebase依赖项降级到9.6.1才能正常工作你的方法是从Google登录获取凭据。我正在使用来自AuthUI的电子邮件身份验证,因此您的答案不适用。谢谢你试着帮我