2017-10-27 1 views
0

Firebase를 사용하고 가입 절차를 만들고 있습니다.IllegalArgumentException Cloud Firestore에 쓸 때

정기적 인 이메일/비밀번호 인증을 위해 Cloud Firestore에 성공적으로 글을 쓸 수 있습니다. 나는 실제 데이터베이스 내 데이터를 본, 그래서 그것을 성공적으로 기록되는 알고

  @Override 
     public void onComplete(@NonNull Task<Void> task) { 
      Log.v("INPUT_TEXT", user.getDisplayName()); 
      Toast.makeText(getApplicationContext(), user.getDisplayName().toString(), Toast.LENGTH_LONG).show(); 
      Map<String, Object> userMap = new HashMap<>(); 
      userMap.put("Display_Name", user.getDisplayName()); 
      userMap.put("ID", user.getUid()); 
      userMap.put("Provider", user.getProviders()); 
      mStoreBaseRef.collection("Users").add(userMap); 
     } 
    }); 

그러나, 페이스 북 인증 :

private void handleFacebookAccessToken(AccessToken token) { 
    Log.d(TAG, "handleFacebookAccessToken:" + token); 

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
    mAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 
        FirebaseAuth loggedInAuth = FirebaseAuth.getInstance(); 
        String ID = loggedInAuth.getCurrentUser().getUid(); 
        String displayName = mAuth.getCurrentUser().getDisplayName(); 
        HashMap<String, Object> id = new HashMap<>(); 
        id.put("user_id", ID); 
        id.put("display_name", displayName); 
        id.put("provider", mAuth.getCurrentUser().getProviderData()); 
        mStoreBaseRef.collection("Users").add(id); 

        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Log.w(TAG, "signInWithCredential", task.getException()); 
         Toast.makeText(getApplicationContext(), "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 

        } else { 
         Toast.makeText(getApplicationContext(), "Authentication_Success", Toast.LENGTH_LONG).show(); 
        } 

       } 
      }); 

나는 다음과 같은 오류 받고 있어요 :

java.lang.IllegalArgumentException: Invalid data. Unsupported type: com.google.android.gms.internal.zzdnb 
                      at com.google.firebase.firestore.zzl.zzqe(Unknown Source) 
                      at com.google.firebase.firestore.zzk.zza(Unknown Source) 
                      at com.google.firebase.firestore.zzk.zza(Unknown Source) 
                      at com.google.firebase.firestore.zzk.zza(Unknown Source) 
                      at com.google.firebase.firestore.zzk.zza(Unknown Source) 
                      at com.google.firebase.firestore.zzk.zza(Unknown Source) 
                      at com.google.firebase.firestore.DocumentReference.set(Unknown Source) 
                      at com.google.firebase.firestore.DocumentReference.set(Unknown Source) 
                      at com.google.firebase.firestore.CollectionReference.add(Unknown Source) 
                      at com.troychuinard.fanpolls.SignupActivity$2.onComplete(SignupActivity.java:180) 
                      at com.google.android.gms.tasks.zzf.run(Unknown Source) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5527) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
+0

사용자의 "공급자"속성에 저장되기를 기대하는 것은 무엇입니까? 'mAuth.getCurrentUser(). getProviderData()'가 리턴하는 것을주의 깊게보십시오. 또한 성공이나 실패에 관계없이 사용자 데이터를 저장하는 이유는 무엇입니까? 작업이 성공하면 쓰고 싶을 것 같습니다. –

+0

단순히 가입 방법 (이메일, Facebook)을 추적하려고합니다.'getProviderData()'는'UserInfo' 객체의 목록을 반환합니다. – tccpg288

+1

이를 반복하고 데이터베이스에 저장하려는 문자열에 대한'UserInfo' 객체를 살펴보아야합니다. 전체 목록을 데이터베이스에 저장하려고하지 마십시오. –

답변

0

이 오류는 Google이 제공 한 유형을 Google이 지원하는 유형으로 자동으로 변환 할 수없는 경우 발생합니다 (custom objects과 유사). userMap에 넣는 유형을 확인하고 필요한 경우 더 간단한 것을 선택하십시오. (자세한 내용은 문서를 참조하십시오.)