使用Firebase Auth创建用户后,displayName显示为null

时间:2016-11-18 18:10:49

标签: android firebase firebase-authentication

我正在尝试使用Firebase身份验证添加用户,并将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?

2 个答案:

答案 0 :(得分:4)

所以这似乎是Firebase本身(现在已知)的错误(不是Firebase-UI)。该错误似乎是在版本Firebase Android SDK v9.8.0中引入的。目前,解决方法之一是强制用户在注册系统后注销并重新登录。另一个涉及将FirebaseUI降级到使用旧版Firebase SDK版本的版本。 资料来源:https://github.com/firebase/FirebaseUI-Android/issues/409

答案 1 :(得分:0)

您还可以从firebaseAuthWithGoogle方法获取名称。

  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());
                    }

                }
            }); }