2016-11-18 18 views
2

Firebase認証を使用してユーザを追加しようとしていますが、サインアップ時にUIから尋ねても、displayNameをnullとして返します。任意のアイデア理由と修正方法 Firebase Authでユーザを作成した後displayNameにnullが表示される

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を返す理由

+0

私は同じ問題を抱えており、それについての質問を投稿しようとしていました。私はアンドロイドOSと "Android - Authのた​​めのFirebaseUI"ライブラリを使用しています。問題はOPの状態です:新しいユーザーが登録された直後にユーザーオブジェクトが返され、displayName()呼び出しにNULL値があります。ただし、同じ資格情報でLOGIN(サインアップしない)をもう一度入力すると、nameフィールドに期待どおりの値が含まれます。 – Konaras

答えて

4

これはFirebase自体(Firebase-UIではない)のバグであるようです。バグはバージョンFirebase Android SDK v9.8.0で導入されているようです。回避策の1つは、ユーザーにのログアウトを強制して、システムに登録した後にに再ログインさせることです。もう1つはFirebaseUIを古いFirebase SDKバージョンを使用するバージョンにダウングレードすることです。 ソース:https://github.com/firebase/FirebaseUI-Android/issues/409

+1

はい、私はgithubにその問題を投稿した後、私に電子メールを送りました。彼らは修正に取り組んでいますが、9.8.0にダウンロードすることができます。 10.0.0バージョンでは、Firebase Authメソッドにもバグがあります。うまくいけば、彼らはすぐにこれを修正します!レスポンスありがとう! –

+0

これは、プレイサービスとFirebaseの依存関係が動作するために、9.6.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()); 
        } 

       } 
      }); } 
+0

あなたのメソッドはGoogleのログイン情報を取得するためのものです。私はAuthUIからの電子メール認証を使用していますあなたの答えは当てはまりません。ヒープを試みてくれてありがとう –

関連する問題