Войдите в систему с помощью Facebook, если учетная запись уже связана с Google во время первоначальной регистрации в Firebase Android.

Я пытаюсь войти в 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();

Но это также дает ошибку при получении текущего пользователя, который уже связан. Что я могу сделать, чтобы решить эту проблему?

Ответ 1

Нет необходимости в методе .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");
                        }

                    }
                });

И реализуем 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);
    }

Примечание. onAuthStateChanged является тригером, когда AuthStateListener добавляется в экземпляр auth firebase.

Также убедитесь, что параметр Prevent creation of multiple accounts with the same email address установлен на консоли firebase (аутентификация → МЕТОД СИГНАЛА → Дополнительно → Одна учетная запись на адрес электронной почты (Изменить)).