当前位置: 首页 > 知识库问答 >
问题:

为什么Firebase挂起AuthResult返回null?

丌官淇
2023-03-14

我正在尝试使用Firebase身份验证实现Apple登录。我正在遵循Firebase/快速入门-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()被调用,但是upingAuthResult始终为空。

为了让它更有趣,当我重新启动应用程序时,我已登录。然后,如果我注销并再次输入登录片段,现在会有一个挂起的结果,我会收到成功登录,挂起的。除此之外,悬而未决的结果并没有消失。如果我离开登录片段并返回,挂起的结果仍然存在,我会收到另一个成功登录,挂起的

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

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


共有1个答案

温亮
2023-03-14

如果您使用firebase与apple进行签名,并且是手动处理的,那么您应该使用字符串解码机制,请参阅firebase指南,并希望它能正常工作。如果有任何问题,请告诉我!

Firebase工会与苹果公司签约

 类似资料:
  • 问题内容: 我正在尝试与大学的MySQL数据库建立连接,但该连接已挂起。 此调用:打印(在我最终杀死它之后): 我刚刚从下载的MySQL连接器/ J 这里。我不确定这是否是问题的一部分。我非常准确地遵循了指示。 我也可以像这样在命令行上连接到mysql: 可能的问题: 我写的Java代码 我如何安装MySQL Connector / J 某种网络问题阻止了连接 问题: 我应该怎么解决这个问题?为什

  • 问题内容: 我可以成功运行容器: 但是执行挂起: 直到我按任意键,例如: 为什么挂? 更新 : 阅读评论后,我想我会得到答案: 先决条件: “ docker attach”重用相同的tty,而不打开新的tty。 (1)执行无守护程序模式: 一切正常,然后运行命令: (2)在守护程序模式下运行: 实际上, 以下内容应该已经从正在运行的容器输出到stdout: 因此执行似乎挂起,但实际上它正在等待您的

  • 如果用非空数组调用promise.all或promise.race,它们将返回一个挂起的promise: 为什么promise。所有功能都是这样设计的?似乎没有很好的理由不一致,但也许我错过了什么。

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它

  • 问题内容: 我已经存储了在该数据库中插入并插入记录的过程。我想获取最后插入的记录的ID。返回NULL并返回正确的ID,为什么会发生?如我所读,因此最好在表上有一些触发器的情况下使用。我可以使用吗?不论触发器如何,它是否都在表的范围内返回ID? 那么问题是什么以及使用什么呢? 已编辑 问题答案: 就像奥德(Oded)所说的那样,问题在于您在执行之前要先询问身份。 作为解决方案,最好尽可能地接近运行。

  • 我正在尝试访问项目中的文件。但是getResource方法返回null。 以及eclipse工作区中项目文件夹的外观: 为什么啊?我想访问我的资产文件夹中的文件? 编辑我创建了一个jar文件,这是jar的内容: 已解决 首先,我有很多图像文件,所以我想把它们组织在一个文件夹中。我把assets文件夹放在src目录中,最后我能够访问这些文件。