Я пытаюсь внедрить Войти через Apple , используя Firebase Authentication. Я следую за firebase / quickstart- android sample.
Мой фрагмент входа переопределяет onStart()
для проверки любых ожидающих результатов:
override fun onStart() {
super.onStart()
val pending = auth.pendingAuthResult
pending?.addOnSuccessListener { authResult ->
Timber.d("Successful login, pending")
}?.addOnFailureListener { e ->
Timber.d("Failed login, pending")
}
}
И кнопка, которая инициирует поток входа:
btnApple.onClick {
viewModel.appleLogin(requireActivity())
}
ViewModel вызывает следующий метод из хранилища:
// Initiate sign-in flow only if there are no pending results
if (auth.pendingAuthResult != null) {
return
}
val scopes = listOf("email", "name")
val provider = OAuthProvider.newBuilder("apple.com", auth)
.setScopes(scopes)
.build()
auth.startActivityForSignInWithProvider(activity, provider)
.addOnSuccessListener { authResult ->
Timber.d("Successful login, normal")
}
.addOnFailureListener { e ->
Timber.e(e, "Failed login, normal")
}
Официальное руководство states:
Вход с помощью этого метода переводит вашу активность в фоновый режим, что означает, что она может быть восстановлена системой во время входа в систему.
Итак Я начал тестировать ожидающий результат, завершив работу приложения в Android Studio и завершив процесс входа в Chrome. Как только я вернулся в приложение, был вызван onStart()
, но pendingAuthResult
всегда был нулевым.
Чтобы сделать его более интересным, при перезапуске приложения я вошел в систему. Тогда, если я Выйдите из системы и снова введите фрагмент для входа. Ожидается результат, и я получаю Successful login, pending
. Кроме того, ожидаемый результат не исчезает . Если я оставлю фрагмент входа и вернусь go, ожидающий результат все еще там, и я получу еще один Successful login, pending
.
Я даже протестировал firebase / quickstart- android сам образец, и у него точно такая же проблема.
Что может быть возможной причиной этой проблемы? Я использую firebase-auth:19.2.0
.