我应该如何将现有的用户帐户与其他提供商但邮件相同?例如Google与Facebook。
public void handleFacebookAccessToken(final AccessToken token, final Activity activity) {
Log.d(TAG, "handleFacebookAccessToken: " + token);
final AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
authListener.updateSignedUI(user);
}
}
}).addOnFailureListener(activity, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "signInWithCredential:failure", e);
if (e instanceof FirebaseAuthUserCollisionException) {
handleLinkingFacebookUsers(credential, activity);
}
}
});
}
在此下面的方法中,与'mAuth.getCurrentUser()。linkWithCredential()]对齐”>发生NullPointerException。
private void handleLinkingFacebookUsers(AuthCredential savedFBCredential, Activity activity) { //AuthCredential credentialFacebook = FacebookAuthProvider.getCredential(token.getToken()); //AuthCredential credentialGoogle = GoogleAuthProvider.getCredential(googleIdToken, null); mAuth.getCurrentUser() .linkWithCredential(savedFBCredential) // THIS LINE TROWS NULL POINTER EXCEPTION .addOnCompleteListener(activity, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); authListener.updateSignedUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); authListener.updateSignedUI(null); } // ... } }); }
Logcat:
com.google.firebase.auth.FirebaseAuthUserCollisionException: An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address. at com.google.firebase.auth.api.internal.zzdv.zza(com.google.firebase:firebase-auth@@19.2.0:42) at com.google.firebase.auth.api.internal.zzfc.zza(com.google.firebase:firebase-auth@@19.2.0:19) at com.google.firebase.auth.api.internal.zzes.zza(com.google.firebase:firebase-auth@@19.2.0:34) at com.google.firebase.auth.api.internal.zzeu.zza(com.google.firebase:firebase-auth@@19.2.0:98) at com.google.firebase.auth.api.internal.zzeu.zza(com.google.firebase:firebase-auth@@19.2.0:85)
任何建议都值得赞赏。谢谢。
我应该如何将现有用户帐户与其他提供商和同一封电子邮件关联?例如Google与Facebook。 public void handleFacebookAccessToken(最终AccessToken令牌,最终活动...
mAuth.getCurrentUser()
返回一个空的FirebaseUser,因为在调用它时没有用户登录。您的代码应在调用FirebaseUser对象上的方法之前进行检查,如getCurrentUser()的API文档所示。