【问题标题】: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

【问题讨论】:

  • 这里有同样的问题。为了测试这一点,我正在使用开发人员功能“不要保留活动”。

标签: android firebase kotlin firebase-authentication apple-sign-in


【解决方案1】:

如果您使用 firebase 与 Apple 进行签名,并且如果它是手动处理的,那么您应该使用字符串解码机制,请查找相同的 firebase 指南并希望它能够正常工作。让我知道是否有任何问题!

Firebase guild signing with apple

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-26
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多