android - 如何将相同的 SHA1 用于具有不同包名称的应用程序,作为另一个应用程序?
问题描述
背景
我使用公共共享代码处理 2 个不同的应用程序,它们都用于同一个项目(productFlavors
在 gradle 文件中使用),但具有不同的包名称。
问题
这些应用程序应该能够登录到 Google 帐户并从中获取一些信息。
第一个工作正常,但第二个在登录时出现问题,尤其是在发布版本上。
两者都已在 Play Store 上发布并使用了 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 并阅读更多关于这种情况以及如何解决它的信息。
所以我点击了链接,并尝试按照那里写的那样做:
首先,找到您现有项目的 OAuth 2.0 客户端 ID。去做这个:
- 转到Google Cloud 控制台的凭据页面。如果包含 OAuth 2.0 客户端 ID 的项目没有自动打开,请从页面右上角的下拉菜单中选择它。
- 在 OAuth 2.0 客户端 ID 部分下,找到包含您用于 Firebase 项目的 SHA-1 和包名称的客户端名称。如果您不确定哪一个是正确的,请单击客户名称以查看详细信息。
- 找到正确的客户名称后,复制“客户 ID”列中的完整值。
接下来,将此客户端 ID 列入白名单,供 Google 作为登录提供商。去做这个:
- 转到Firebase 控制台并选择您的项目。
- 从左侧菜单中选择身份验证。
- 选择登录方法选项卡。
- 在登录方法页面上,单击登录提供商卡中的 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 被用于两者的相同问题?
解决方案
SHA-1 属于您用于签署 APK 的证书,不属于任何单个应用程序。
问题似乎是您有多个项目添加了相同的 Package+SHA。检查https://console.firebase.google.com/ 在这里您将能够看到您帐户下的所有项目。
推荐阅读
- linux - 查找通过setsid创建的进程组id
- dart - 颤振键盘重叠问题无法通过 resizeToAvoidBottomPadding 解决
- html - 如何使用角度反应将表单数据发布到期望常规 HTML 表单的服务器?
- wordpress - 动态 meta_query 取决于 url Wordpress 自定义帖子类型中的查询变量参数
- html - 在 ASP:Gridview 中居中 ASP:Linkbutton
- sql-server - 选择权限在 SQL Server 中被撤销,但用户仍然可以访问所有表
- javascript - 如何检查用户名是否已经被ajax和sql使用?
- c# - 从 NoSQL(特别是 Cosmos DB)查询不同的值无法转换为模型类型
- javascript - 是否可以将所有操作记录到 chrome 或 firefox 中的脚本文件?
- javascript - Firebase 数据库功能在 DialogFlow 上无法正常工作