首页 > 解决方案 > 如何将相同的 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。去做这个:

  1. 转到Google Cloud 控制台的凭据页面。如果包含 OAuth 2.0 客户端 ID 的项目没有自动打开,请从页面右上角的下拉菜单中选择它。
  2. 在 OAuth 2.0 客户端 ID 部分下,找到包含您用于 Firebase 项目的 SHA-1 和包名称的客户端名称。如果您不确定哪一个是正确的,请单击客户名称以查看详细信息。
  3. 找到正确的客户名称后,复制“客户 ID”列中的完整值。

接下来,将此客户端 ID 列入白名单,供 Google 作为登录提供商。去做这个:

  1. 转到Firebase 控制台并选择您的项目。
  2. 从左侧菜单中选择身份验证。
  3. 选择登录方法选项卡。
  4. 在登录方法页面上,单击登录提供商卡中的 Google。
  5. 展开来自外部项目的白名单客户端 ID 选项。
  6. 将您的客户端 ID 从云控制台粘贴到文本字段中,然后单击添加。

所以我将它们中的每一个(从“https://console.developers.google.com/apis/credentials?project=...”粘贴到“https://console.firebase.google.com/u/0/project /.../authentication/providers" )我认为应该在那里,并且由于它不起作用,我粘贴了更多,包括两个应用程序。

在此处输入图像描述

仍然没有工作。

我还尝试添加 SHA-256,即使它允许我这样做,它也无济于事。

我试图在 StackOverflow 和其他地方搜索解决方案,但这些问题似乎与我所拥有的确切场景无关,因为这里已经有 2 个不同的包名称(所以应该没有问题),并且应用程序已经发布(所以我不能从网站上删除东西)。

问题

最重要的问题是第一个问题。其余的都是可选的,只有这样我才能知道什么是错的和发生了什么。我非常感谢它了解下次如何正确处理它:

  1. 如何为第二个应用程序解决它,而不会对任何一个应用程序造成任何问题?我不想删除任何这些应用程序网站上的帐户/项目。

  2. 为什么我不能添加不同包名的应用程序的 SHA-1?

  3. 它说要复制说明上的“客户端ID”,但没有说明是哪个应用程序。我想这意味着该应用程序运行良好,对吧?

  4. 一些解决方案说我可以重新创建 SHA-1 以获得新密钥,但我找不到如何。我该怎么做呢?这会有帮助吗?它不会影响正常工作的应用程序吗,并且我将再次遇到相同的 SHA-1 被用于两者的相同问题?

标签: androidfirebasegoogle-play-servicesgoogle-signindeveloper-console

解决方案


SHA-1 属于您用于签署 APK 的证书,不属于任何单个应用程序。

问题似乎是您有多个项目添加了相同的 Package+SHA。检查https://console.firebase.google.com/ 在这里您将能够看到您帐户下的所有项目。


推荐阅读