Intereting Posts
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE на устройстве с использованием intellij Обеспечивает ли Scala хорошую производительность на Android? (Июнь 2011 г.) Java – Сравнение классов? Android: удалять связанные приложения файлы из внешнего хранилища в Uninstall? Круговой индикатор выполнения (для таймера обратного отсчета) Как сделать что-то при изменении состояния флажка? Неожиданно неожиданно произошла авария в галактике nexus Xamarin.Forms untappable ListView (удаляет эффект пульсации выбора) Android Maven не запускает эмулятор Android logcat logs сообщение об истечении срока действия модуля DialogFragment не работает с SOFT_INPUT_ADJUST_PAN Как принудительно использовать меню переполнения на устройствах с помощью кнопки меню В чем разница между минимальной версией SDK / целевой версией SDK и компиляцией SDK-версии? Медиа-рекордер с API-интерфейсом Google Vision Разделите формат даты JSON на String, используя GSON на Android

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

Я пытаюсь войти в facebook при переустановке приложения для Android. Сначала я подписал контракт с Google и успешно связал его с firebase.

Но когда я пытаюсь сделать с facebook, это дает

FirebaseAuthUserCollisionException 

Я прочитал в документации Firebase, что вы можете сделать это

 FirebaseUser prevUser = currentUser; currentUser = auth.signInWithCredential(credential).await().getUser(); // Merge prevUser and currentUser accounts and data // ... 

Но здесь метод await() больше не существует. Также после поиска немного я узнал это решение

 Tasks.await(mAuth.signInWithCredential(credential)).getUser(); 

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

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

Нет необходимости в .await() чтобы получить пользователя .await() .
Вместо этого используйте 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 authStateListener .

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