Intereting Posts
Использование файла: /// android_res / drawable / url работает под затмением, но не в производстве Разрешить только iphone / ipad / ipod / android для доступа к файлам в directoy, все остальные перенаправляются на google.com Импорт проекта градиента, ошибка android Android – startActivityForResult сразу же запускает onActivityResult Должен ли я импортировать android.graphics.camera или android.hardware.camera? Сбой Android при закрытии приложения и его повторном открытии Несколько учетных записей для разработчиков Android Проблема с реализацией фрагмента Android Как использовать getStyledAttributes (int ) с внутренними темами Android Как открыть активность во всплывающем окне? Можно ли использовать один и тот же идентификатор приложения facebook как для Android, так и для приложения iphone? Android-приложение для телефона и планшета: 1 или 2 приложения? Обрезанное изображение размыто в android Как отключить lint abortOnError в Android Gradle Plugin из верхнего уровня многостраничной директории Как изменить размер элемента Java Script для его окна контейнера

Войдите в систему с помощью 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 (аутентификация >> МЕТОД СИГНАЛА >> Дополнительно >> Одна учетная запись на адрес электронной почты (Изменить)).