但是当我尝试用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.
所以你实现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>>>>>>在每个电子邮件地址(更改)中设置一个帐号)来防止创建具有相同电子邮件地址参数的多个帐户.
总结以上是内存溢出为你收集整理的如果在Firebase Android初次注册时帐户已经与谷歌联系,请登录Facebook全部内容,希望文章能够帮你解决如果在Firebase Android初次注册时帐户已经与谷歌联系,请登录Facebook所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)