Android displayName在使用Firebase Auth创建用户后显示null

Android displayName在使用Firebase Auth创建用户后显示null,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在尝试使用Firebase auth添加一个用户,它将displayName返回为null,即使它在注册时通过UI请求它。你知道为什么以及如何修复吗?以下是我用于执行此操作的代码: startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder()

我正在尝试使用Firebase auth添加一个用户,它将displayName返回为null,即使它在注册时通过UI请求它。你知道为什么以及如何修复吗?以下是我用于执行此操作的代码:

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的电子邮件身份验证,因此您的答案不适用。谢谢你试着帮我