如果在Firebase Android初次注册时帐户已经与谷歌联系,请登录Facebook

前端之家收集整理的这篇文章主要介绍了如果在Firebase Android初次注册时帐户已经与谷歌联系,请登录Facebook前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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.

所以你实现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>>>>>>在每个电子邮件地址(更改)中设置一个帐号)来防止创建具有相同电子邮件地址参数的多个帐户.

原文链接:https://www.f2er.com/android/312842.html

猜你在找的Android相关文章