2017-10-27 13 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); 
     } 
    }); 

しかし、Facebookの認証で:

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)をトラッキングしようとしています – tccpg288

+1

'getProviderData()'は 'UserInfo'オブジェクトのリストを返します。それを繰り返して、データベースに格納する文字列の 'UserInfo'オブジェクトを調べてください。そのリスト全体をデータベースに張り付けようとしないでください。 –

答えて

0

このエラーは、私たちが指定したタイプをサポート対象のタイプに自動的に変換できない場合に発生します(custom objectsに似ています)。 userMapに入れるタイプを確認し、必要に応じてより簡単なタイプを選択します。 (詳細はdocを参照してください)

関連する問題