为啥 Firebase pendingAuthResult 返回 null?
Posted
技术标签:
【中文标题】为啥 Firebase pendingAuthResult 返回 null?【英文标题】:Why does Firebase pendingAuthResult return null?为什么 Firebase pendingAuthResult 返回 null? 【发布时间】:2020-04-30 06:26:48 【问题描述】:我正在尝试使用 Firebase 身份验证实现 Sign in with 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")
official manual 声明:
使用此方法登录会将您的 Activity 置于后台,这意味着它可以在登录流程中被系统回收。
所以我开始测试挂起的结果,方法是在 Android Studio 中终止应用,同时在 Chrome 中完成登录流程。返回应用程序后,onStart()
被调用,但 pendingAuthResult
始终为空。
为了更有趣,当我重新启动应用程序时,我已登录。然后如果我注销并再次输入登录片段,现在有一个待处理的结果,我收到Successful login, pending
。最重要的是,待处理的结果不会消失。如果我离开登录片段并返回,待处理的结果仍然存在,我会收到另一个Successful login, pending
。
我什至测试了firebase/quickstart-android 样本本身,它也有完全相同的问题。
此问题的可能原因是什么?我正在使用firebase-auth:19.2.0
。
【问题讨论】:
这里有同样的问题。为了测试这一点,我正在使用开发人员功能“不要保留活动”。 【参考方案1】:如果您使用 firebase 与 Apple 进行签名,并且如果它是手动处理的,那么您应该使用字符串解码机制,请查找相同的 firebase 指南并希望它能够正常工作。让我知道是否有任何问题!
Firebase guild signing with apple
【讨论】:
以上是关于为啥 Firebase pendingAuthResult 返回 null?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Firebase pendingAuthResult 返回 null?