为什么 Firebase pendingAuthResult 返回 null?

Pes*_*The 8 android kotlin firebase firebase-authentication apple-sign-in

我正在尝试使用 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")
    }
}
Run Code Online (Sandbox Code Playgroud)

以及启动登录流程的按钮:

btnApple.onClick {
    viewModel.appleLogin(requireActivity())
}
Run Code Online (Sandbox Code Playgroud)

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")
    }
Run Code Online (Sandbox Code Playgroud)

官方手册状态:

使用此方法登录会将您的 Activity 置于后台,这意味着它可以在登录流程中被系统回收。

因此,我通过在 Chrome 中完成登录流程的同时在 Android Studio 中终止应用程序来开始测试待处理的结果。一旦我回到应用程序,就会onStart()被调用,但是pendingAuthResult始终为空。

更有趣的是,当我重新启动应用程序时,我已登录。然后如果我注销并再次输入登录片段,现在有一个待处理的结果,我会收到Successful login, pending. 最重要的是,未决结果不会消失。如果我离开登录片段并返回,待处理的结果仍然存在并且我会收到另一个Successful login, pending.

我什至测试了firebase/quickstart-android示例本身,它有完全相同的问题。

导致此问题的可能原因是什么?我正在使用firebase-auth:19.2.0.

小智 0

如果您使用 Firebase 与 Apple 进行签名,并且是手动处理的,那么您应该使用字符串解码机制,请找到相同的 Firebase 指南并希望它能起作用。如果有任何问题请告诉我!

Firebase 公会与苹果签约