8

我正在尝试使用 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")
    }

官方手册说:

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

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

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

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

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

4

1 回答 1

0

如果您使用 firebase 与苹果签名,并且如果它是手动处理的,那么您应该使用字符串解码机制,请找到相同的 firebase 指南并希望它会起作用。让我知道是否有任何问题!

Firebase 公会与苹果公司签约

于 2020-01-22T10:19:39.707 回答