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)
ユーザの「プロバイダ」プロパティには何が保存されると思われますか? 'mAuth.getCurrentUser()。getProviderData()'が返すものを注意深く見てください。また、成功または失敗に関係なく、なぜユーザーデータを格納していますか?タスクが成功した場合にのみ書きたいと思うようです。 –
私は単にサインアップメソッド(電子メール、Facebook)をトラッキングしようとしています – tccpg288
'getProviderData()'は 'UserInfo'オブジェクトのリストを返します。それを繰り返して、データベースに格納する文字列の 'UserInfo'オブジェクトを調べてください。そのリスト全体をデータベースに張り付けようとしないでください。 –