我正在尝试使用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")
}
使用此方法登录会将您的活动置于后台,这意味着在登录流程中系统可以收回该活动。
因此,我通过终止Android Studio中的应用程序同时完成Chrome中的登录流程来开始测试待处理结果。回到应用程序后,将调用onStart()
,但pendingAuthResult
始终为空。
为了使它更有趣,当我重新启动应用程序时,我已经登录。然后,如果我注销并再次输入登录片段,则现在有一个待处理的结果,并且我收到Successful login, pending
。最重要的是,待处理结果不会消失。如果我离开登录片段然后返回,则挂起的结果仍然存在,并且还会收到另一个Successful login, pending
。
我什至对firebase/quickstart-android样本本身进行了测试,并且问题完全相同。
此问题的可能原因是什么?我正在使用firebase-auth:19.2.0
。
答案 0 :(得分:0)
如果您正在使用Firebase与Apple进行签名,并且是手动处理的,则应使用字符串解码机制。请找到相同的Firebase指南,希望它能起作用。让我知道是否有任何问题!