我正在尝试使用Facebook登录重新安装
Android应用程序.最初我使用Google注册并成功地将其与firebase相关联.
但是当我尝试用Facebook做它,它给了一个
FirebaseAuthUserCollisionException
我在Firebase Documentation读了你可以这样做
FirebaseUser prevUser = currentUser; currentUser = auth.signInWithCredential(credential).await().getUser(); // Merge prevUser and currentUser accounts and data // ...
但是这里await()方法不再存在.搜索一下后,我发现了这个解决方案
Tasks.await(mAuth.signInWithCredential(credential)).getUser();
解决方法
firefox用户不需要.await()方法.
使用FirebaseAuth.AuthStateListenerinstead.
使用FirebaseAuth.AuthStateListenerinstead.
所以你实现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"); } } });
并实现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); }
注意:当authStateListener被添加到firebase auth实例时,onAuthStateChanged被修改一次.
另外,请确保在Firebase控制台(Authentication>> SIGN-IN METHOD>>>>>>在每个电子邮件地址(更改)中设置一个帐号)来防止创建具有相同电子邮件地址参数的多个帐户.