Shu*_*ham 10 android facebook firebase firebase-authentication
我正在尝试使用重新安装Android应用程序登录facebook.最初我使用Google注册并成功将其与firebase链接.
但是,当我尝试使用Facebook时,它会给出一个
FirebaseAuthUserCollisionException
Run Code Online (Sandbox Code Playgroud)
我在Firebase文档中读到了您可以这样做的内容
FirebaseUser prevUser = currentUser;
currentUser = auth.signInWithCredential(credential).await().getUser();
// Merge prevUser and currentUser accounts and data
// ...
Run Code Online (Sandbox Code Playgroud)
但这里await()方法不再存在.在搜索了一下后,我发现了这个解决方案
Tasks.await(mAuth.signInWithCredential(credential)).getUser();
Run Code Online (Sandbox Code Playgroud)
但是当获取已经链接的当前用户时,这也会出错.我该怎么做才能解决这个问题?
不需要.await()方法来获取 firebase 用户。代替
使用。FirebaseAuth.AuthStateListener
因此,您可以使用如下方式实现 firebase 登录:
FirebaseAuth.getInstance()signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "login success");
} else {
Log.d(TAG, "login error");
}
}
});
Run Code Online (Sandbox Code Playgroud)
并实现AuthStateListener每次用户状态更改时触发的:
private FirebaseAuth.AuthStateListener authStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initAuthStateListener();
}
private void initAuthStateListener() {
authStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null) {
//user is not logged in
} else {
//user is logged in
//logic to finish the activity and proceed to the app can be put here
}
}
};
}
@Override
protected void onStart() {
super.onStart();
FirebaseAuth.getInstance().addAuthStateListener(authStateListener);
}
@Override
protected void onStop() {
super.onStop();
FirebaseAuth.getInstance().removeAuthStateListener(authStateListener);
}
Run Code Online (Sandbox Code Playgroud)
注意:添加到 firebase auth 实例 onAuthStateChanged时触发一次。authStateListener
另请确保Prevent creation of multiple accounts with the same email address在 Firebase 控制台上设置参数(身份验证 >> 登录方法 >> 高级 >> 每个电子邮件地址一个帐户(更改))。
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |