【发布时间】: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。
【问题讨论】:
-
这里有同样的问题。为了测试这一点,我正在使用开发人员功能“不要保留活动”。
标签: android firebase kotlin firebase-authentication apple-sign-in