【问题标题】:Unable to create Android OAuth2 client ID (duplicate fingerprint)无法创建 Android OAuth2 客户端 ID(重复指纹)
【发布时间】:2016-03-14 06:22:40
【问题描述】:

在 Google Cloud Platform 开发者控制台中为 Android 创建客户端 ID 时,我收到以下弹出窗口:

重复指纹

您指定的指纹已被 Android OAuth2 使用 此项目或其他项目中的客户 ID

正如弹出窗口所述,我确实有另一个具有相同 SHA-1 指纹的项目。我不明白的是为什么我不能对多个项目使用相同的 SHA-1 指纹(签名证书)?

如果您对多个 Android 应用使用相同的调试或发布签名证书,则会产生严重影响。这对于调试证书来说并不是什么大问题,因为您始终可以创建一个新证书,但是如果您已经使用相同的发布证书来签署多个生产 Android 应用程序,您不能为每个应用程序创建单独的 Google Cloud 项目吗?

这是一个错误,还是您真的不能为多个 Google Cloud 项目使用同一个 Android 签名证书?

最佳做法是始终为每个 Android 应用使用新的发布签名证书吗?

【问题讨论】:

    标签: android google-app-engine google-oauth google-cloud-endpoints google-cloud-platform


    【解决方案1】:

    首先为什么我们需要有一个唯一的证书和包名.. 不久前,我们决定您不需要在 android 应用程序中指定 clientID(为了简化开发并缓解某些问题,例如,如果某人没有证书,即使他们可以拥有证书,也无法声明/使用您的客户端 ID相同的包名)。我们可以根据包名和证书哈希查找 clientID。这要求组合是唯一的。那有意义吗?需要明确的是,您可以使用相同的证书以及应用程序的不同包名称,而且很多人都这样做。

    始终使用新的发布签名证书是最佳做法吗 适用于每个 Android 应用?

    我认为有利有弊。如果您想出售/更改应用程序的所有权(在您拥有的众多应用程序中),使用单独的证书会更容易。您还需要考虑证书的妥协或丢失。 相同的证书确实使发布过程更容易,并声称它们来自同一实体。

    【讨论】:

    • 感谢您的澄清。关于答案第一部分的问题:所以您不需要在@Api 端点注释中指定clientIdsaudiences
    • 如果您在 Android 上调用 Google Play 服务 API,那么您不需要指定客户端 ID,但在某些情况下,需要观众,因为可以有多个,您可以选择。
    • 谢谢。使用 Google Cloud Endpoints 时,@Api 注释中的内容如何?
    • 我不是云端点的专家。如果您正在讨论如何设置服务器cloud.google.com/appengine/docs/java/endpoints/annotations,您需要指定要接受来自请求的客户端 ID。在 Android 客户端代码cloud.google.com/appengine/docs/java/endpoints/consume_android 我认为您需要指定服务器客户端 ID,我们将根据应用程序包名称和签名将客户端 ID 放入 id 令牌中。这样做的好处是,在非 root 设备上,只有您的客户端应用程序才能获得该 id 令牌。
    【解决方案2】:

    只需使用不同的包名创建一个新项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 2014-10-04
      • 1970-01-01
      • 2012-11-09
      相关资源
      最近更新 更多