【发布时间】:2021-03-31 01:12:07
【问题描述】:
背景
我使用公共共享代码开发 2 个不同的应用程序,它们都用于同一个项目(在 gradle 文件中使用 productFlavors),但具有不同的包名称。
问题
这些应用应该能够登录到 Google 帐户并从中获取一些信息。
第一个工作正常,但第二个在登录时出现问题,尤其是在 release-variant 上。
两者都已在 Play 商店中发布并使用 Firebase,因此我无法执行可能会损坏应用程序运行方式的操作。
我发现了什么
我让应用写入日志以显示问题:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result?.isSuccess == true) {
...
}
else {
Log.e("AppLog", "onActivityResult failure:${result?.status}")
}
这确实是我得到的:
onActivityResult failure:Status{statusCode=DEVELOPER_ERROR, resolution=null}
在 Internet 和 StackOverflow 上搜索,它表明我需要将 SHA-1 添加到项目中,包括发布和调试:
https://console.firebase.google.com/u/0/project/.../settings/general/...
添加 debug-variant 的 SHA-1 工作正常(尽管在登录期间由于某种原因它有多个步骤,而不是一两个步骤),但是当我尝试添加 release-variant 的 SHA-1 时,似乎与其他应用程序的 SHA-1 相同(具有不同的包)。它向我显示了这条消息(通过“项目设置”->“常规”):
此包名称和 SHA-1 已存在 OAuth2 客户端 另一个项目。您现在可以省略 SHA-1 和 read more about this situation and how to resolve it。
所以我点击了链接,并尝试按照那里写的那样做:
首先,找到您现有项目的 OAuth 2.0 客户端 ID。为此:
- 转到Credentials page of the Google Cloud console。如果项目 包含 OAuth 2.0 客户端 ID 不会自动打开,请选择 从页面右上角的下拉菜单中选择它。
- 在 OAuth 2.0 客户端 ID 部分下,找到客户端名称 包含您用于 Firebase 的 SHA-1 和包名称 项目。如果您不确定哪个是正确的,请单击 客户查看详细信息。
- 找到正确的客户名称后,复制“客户 ID”列中的完整值。
接下来,将此客户端 ID 列入白名单,供 Google 作为登录提供商。为此:
- 转到Firebase console 并选择您的项目。
- 从左侧菜单中选择身份验证。
- 选择登录方法选项卡。
- 在登录方法页面上,单击登录提供商卡片中的 Google。
- 扩展来自外部项目的白名单客户端 ID 选项。
- 将您的客户端 ID 从云控制台粘贴到文本字段中,然后点击添加。
所以我将它们(从“https://console.developers.google.com/apis/credentials?project=...”粘贴到“https://console.firebase.google.com/u/ 0/project/.../authentication/providers" ) 我认为应该在那里,但由于它不起作用,我粘贴了更多,包括两个应用程序。
还是不行。
我也尝试添加 SHA-256,尽管它允许我这样做,但也无济于事。
我试图在 StackOverflow 和其他地方搜索解决方案,但这些问题似乎与我所拥有的确切场景无关,因为这里已经有 2 个不同的包名称(所以应该没有问题),并且应用程序已经发布(所以我无法从网站上删除内容)。
问题
最重要的问题是第一个问题。其余的都是可选的,只有这样我才能知道什么是错的和发生了什么。我非常感谢它了解下一次如何正确处理它:
-
我怎样才能为第二个应用解决它,而不会对任何一个应用造成任何问题?我不想在任何这些应用的网站上删除帐户/项目。
-
为什么我不能为不同包名的应用添加 SHA-1?
-
它说要复制说明上的“客户端ID”,但没有说明是哪个应用程序。我猜这意味着该应用程序运行良好,对吧?
-
一些解决方案说我可以重新创建 SHA-1 以获得新密钥,但我找不到如何操作。我该怎么做呢?这有帮助吗?它不会影响正常运行的应用程序,并且我将再次遇到相同的 SHA-1 被用于两者的相同问题吗?
【问题讨论】:
-
你使用了释放 SHA1 密钥吗?
-
@MahmoudOmara 不确定您的问题是什么。 SHA-1 不能添加到有问题的应用程序中,如果这是您所要求的。网站不让我。它显示了错误。
-
当您打开应用程序的 Firebase 设置时,您会在屏幕底部看到“添加指纹”,您需要为每个应用程序添加调试和释放 SHA1 密钥,因为您有 2 个不同的包名称,您应该在该 firebase 项目上有 2 个应用程序
-
必须从每个应用程序的发布密钥库中获取发布 sha1,有些人对项目中的所有风格使用相同的密钥,我认为这是您自己的情况
-
正是我的意思,这两个应用程序都有不同的包名称,这是真的,但是你为它们使用了 1 个密钥库,并且 SHA1 与密钥库而不是包名称相关,这意味着这个 1 SHA1 将适用于这两个应用程序
标签: android firebase google-play-services google-signin developer-console