以下是重现问题的步骤:
创建匿名帐户
创建手动帐户
mFirebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, task - > {
if (task.isSuccessful()) {
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
linkWithAnonymousAccount(credential);
} else {
hideProgressDialog();
String msg = task.getException().getLocalizedMessage();
Utils.showDialogMessage(mContext, msg);
}
});
private void linkWithAnonymousAccount(final AuthCredential credential) {
mFirebaseAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, task - > {
if (task.isSuccessful()) {
callUpdateUserApi();
} else {
hideProgressDialog();
Utils.showDialogMessage(mContext, task.getException().getLocalizedMessage());
}
});
}
当前结果:在firebase控制台上创建了2个帐户,匿名帐户和手动帐户
预期结果:匿名帐户应与手动帐户合并。
Firebase版本
compile "com.google.android.gms:play-services-auth: '11.4.2'
它适用于社交帐户,但不适用于手动帐户。请指教
答案 0 :(得分:1)
您无法使用Firebase Auth链接2个现有帐户。 2个凭证中的一个必须是新的,并且尚未在Auth数据库中。 您似乎正在登录匿名用户并创建电子邮件/密码用户,然后尝试链接它们。这将失败,因为您无法链接2个具有不同UID的现有用户。在这种情况下,您必须手动将数据从一个复制到另一个,然后删除过时的用户。
你应该做什么,不是createUserWithEmailAndPassword
。
您signInAnonymously
匿名用户,然后直接将电子邮件/密码凭据链接到该用户。
// Initialize the email/pass credential and directly link it to the
// current anonymous user already signed in.
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
mFirebaseAuth.getCurrentUser().linkWithCredential(credential)...