2016-11-18 1 views
2

Firebase auth를 사용하여 사용자를 추가하려고하는데 가입시 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와 안드로이드 용 "FirebaseUI - Auth"라이브러리를 사용하고 있습니다. 문제는 OP 상태입니다 : 새 사용자가 등록 된 직후에 반환 된 사용자 개체는 displayName() 호출에 대해 null 값을 갖습니다. 그러나 동일한 자격 증명으로 로그인 (가입하지 않음)하면 이름 필드에 값이 예상대로 포함됩니다. – Konaras

답변

4

그래서 (현재 알려진) Firebase 자체의 버그 (Firebase-UI가 아닌 것 같습니다). 이 버그는 버전 Firebase Android SDK v9.8.0으로 소개됩니다. 해결 방법 중 하나는 시스템에 등록한 후 사용자가 로그 아웃하고에 다시 로그인하도록 강제하는 것입니다. 다른 하나는 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에서 이메일 인증을 사용하고 있습니다. 당신의 대답은 적용되지 않습니다. 비록 hep를 시도해 줘서 고마워. –

관련 문제