我正在尝试使用 Firebase 身份验证实现Apple 登录。我正在关注firebase/quickstart-android示例。
我的登录片段覆盖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")
}
官方手册说:
使用此方法登录会将您的 Activity 置于后台,这意味着它可以在登录流程中被系统回收。
因此,我在完成 Chrome 中的登录流程的同时,通过在 Android Studio 中终止应用程序来开始测试挂起的结果。一旦我返回应用程序,就会onStart()
调用 ,但pendingAuthResult
始终为空。
为了让它更有趣,当我重新启动应用程序时,我已登录。然后如果我注销并再次输入登录片段,现在有一个待处理的结果,我会收到Successful login, pending
. 最重要的是,未决结果不会消失。如果我离开登录片段并返回,待处理的结果仍然存在,我会收到另一个Successful login, pending
.
我什至测试了firebase/quickstart-android样本本身,它也有完全相同的问题。
这个问题的可能原因是什么?我正在使用firebase-auth:19.2.0
.