如果您这样做,Firebase 会创建两个不同的用户。
这是预期的行为,因为您使用两种不同类型的身份验证。
我如何将它们组合起来,使其显示为一个帐户?
如果您只想拥有一个,那么您应该将它们链接到一个帐户中。根据官方文档有关帐户关联 https://firebase.google.com/docs/auth/android/account-linking,首先,您需要获取现有的凭据:
val authCredential = EmailAuthProvider.getCredential(email, password)
对于 Java 用户:
AuthCredential authCredential = EmailAuthProvider.getCredential(email, password);
然后只需使用FirebaseUser#linkWithCredential(AuthCredential 凭证) https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseUser#linkWithCredential(com.google.firebase.auth.AuthCredential)方法如以下代码行所示:
val auth = FirebaseAuth.getInstance()
auth.currentUser!!.linkWithCredential(credential).addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
Log.d(TAG, "linkWithCredential:success")
val user = task.result!!.user
updateUI(user)
} else {
Log.w(TAG, "linkWithCredential:failure", task.exception)
Toast.makeText(this, "Authentication failed.", Toast.LENGTH_SHORT).show()
updateUI(null)
}
}
对于 Java 用户:
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.getCurrentUser().linkWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "linkWithCredential:success");
FirebaseUser user = task.getResult().getUser();
updateUI(user);
} else {
Log.w(TAG, "linkWithCredential:failure", task.getException());
Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
updateUI(null);
}
}
});