我引用了documentation in Firebase页面。我的问题在于这一段:
如果凭据已链接到其他用户帐户,则对linkWithCredential的调用将失败。在这种情况下,您必须根据您的应用处理合并帐户和相关数据:
FirebaseUser prevUser = currentUser; currentUser = auth.signInWithCredential(credential).await().getUser(); // Merge prevUser and currentUser accounts and data // ...
我无法弄清楚如何将此代码添加到我的项目中。我何时何地放置此代码
auth.signInWithCredential(credential).await().getUser();
进入我的java文件? Android Studio宣布无法解析await()
方法。
我该怎么做才能解决这个问题。提前谢谢!
答案 0 :(得分:0)
当linkWithCredentials调用失败时,您应该处理这部分代码。
这是一个小例子:
mAuth.getCurrentUser().linkWithCredential(credentials).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
FirebaseUser prevUser = currentUser;
try {
currentUser = Tasks.await(auth.signInWithCredential(credential)).getUser();
} catch (Exception e) {
e.printStackStrace();
}
// Merge prevUser and currentUser accounts and data
// ...
} else {
}
}
});
注意:Task.await()
不再存在,您应该使用Tasks.await(...)静态方法。
答案 1 :(得分:0)
假设:
One account per email address
设置
linkWithCredential
通常会因FirebaseAuthUserCollisionException
失败,可能会因为此凭据之前用于登录(您可以通过在firebase控制台上搜索此电子邮件进行检查)或此电子邮件帐户用于登录以前但是有不同的提供者(例如用户之前使用谷歌登录使用abc@gmail.com登录,现在他/她使用abc@gmail.com但是使用Facebook登录)要处理它,你需要2个步骤:< / p>
第1步:与匿名帐户关联
private void linkWithAnonymousAccount(final AuthCredential credential) {
mFirebaseAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
getFirebaseToken();
} else {
Exception exception = task.getException();
if (exception instanceof FirebaseAuthUserCollisionException) {
signInWithFirebase(credential);
} else {
Utils.showDialogMessage(mContext, task.getException().getLocalizedMessage());
}
}
}
});
}
第2步:使用firebase签名
private void signInWithFirebase(AuthCredential credential) {
mFirebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
getFirebaseToken();
} else {
Utils.showDialogMessage(mContext, task.getException().getLocalizedMessage());
}
}
});
}
Google表示第2步正在合并,因为登录后,您需要获取之前用户的信息并将其添加到新用户中。
我希望它有所帮助。