为啥我不能为同一个包名称创建多个 OAuth 2.0 客户端 ID?

Posted

技术标签:

【中文标题】为啥我不能为同一个包名称创建多个 OAuth 2.0 客户端 ID?【英文标题】:Why can't I create multiple OAuth 2.0 client IDs for the same package name?为什么我不能为同一个包名称创建多个 OAuth 2.0 客户端 ID? 【发布时间】:2014-03-20 21:31:02 【问题描述】:

在教程here 中,声明完全可以将两个 OAuth 2.0 客户端 ID 用于同一个包名称。

您应该创建两个客户端 ID,一个带有发布证书 指纹和另一个带有调试证书指纹的指纹。制作 确保两者使用相同的包名称。这允许玩游戏 识别来自您链接的 APK 的调用的服务 任一证书

所以我按照上面链接中的教程进行操作:首先转到Developer Console 中的Game ServiceAdd a new Game。然后我在这个游戏中添加了一个Linked app,它需要我创建一个 OAuth 2.0 客户端 ID。使用我的发布密钥的 SHA1 创建第一个客户端 ID 后,我找不到任何按钮来创建另一个客户端 ID。所以我去Cloud Developer Console,发现我可以在APIs & auth->Credentials下创建第二个客户端ID。我使用我的 debug.keystore 的 SHA1 作为第二个客户端 ID。然后我使用调试密钥和发布密钥编译和测试我的示例游戏。

但是,在运行应用并尝试登录后,结果是只接受使用发布密钥(使用第一个客户端 ID)的应用,而使用调试密钥(使用第二个客户端 ID)的应用) 不被接受。

然后我尝试在 Cloud Developer Console 中删除我的发布密钥的客户端 ID(以便调试密钥的客户端 ID 仍然是那里的唯一客户端 ID)并再次测试我的应用程序。这次接受了使用debug key的app,当然不接受使用release key的app了。

这是否意味着我不能为同一个包名创建多个 OAuth 2.0 客户端 ID?

【问题讨论】:

【参考方案1】:

正如同一tutorial 中的红色警告说明中所述:

警告:不要从 Google Developers Console 为您的游戏创建新的客户端 ID。如果您这样做,Play 游戏服务不会将您的游戏设置与客户端 ID 相关联,这可能会导致游戏过程中出现错误。

相反,在开发者控制台的游戏服务部分,转到 2. Linked Apps 并选择 Link another app 并按照那里的指示,给它一个名称,例如“游戏名称调试”并使用您的调试密钥 SHA1(每个其他字段应与您的发布应用相同)。

【讨论】:

伙计,我被困了一段时间,因为当我链接第二个应用程序时,它没有显示“授权这个应用程序”屏幕。如果有人遇到这种情况,只需删除链接的应用程序并重新添加。 这里真实的是给debug版本起一个不同的名字,不然就不会再显示“授权”选项了! 好吧,现在看来这不再适用了。我尝试使用虚拟包名称链接我的应用程序,以强制出现“授权”部分。但是,当尝试将包名称更改回原来的名称时,我看到它已被禁用.. :( 那么既然包名不能改,那么同一个app添加多个key就没有办法了吗?【参考方案2】:

补充说明:

链接第二个应用时,您必须在 Google Play 服务中指定不同的。如果您不指定不同的包,则不会出现“授权”部分。然后,在授权部分中,您可以指定原始包(如果您只想使用一个包来不更改清单)。有点麻烦和奇怪,但它确实有效。

【讨论】:

谢谢,这对我有帮助!正是这一点让我感到困惑,在我添加第二个包名称之前,该阶段是隐藏的。 好吧,现在看来这不再适用了。我尝试使用虚拟包名称链接我的应用程序,以强制出现“授权”部分。但是,当尝试将包名称更改回原来的名称时,我看到它已被禁用.. :(

以上是关于为啥我不能为同一个包名称创建多个 OAuth 2.0 客户端 ID?的主要内容,如果未能解决你的问题,请参考以下文章

使用 OAuth 2.0 客户端 ID 为不同项目创建一个或多个凭据?

OAuth 2.0“状态”和OpenID“nonce”参数之间的区别?为啥状态不能被重用?

为啥我不能将 PHP 类实例存储为 SESSION 变量

为啥电脑下WPS说文件名带字符,下不了

linux python 包安装了 为啥包不能导入

为啥我不能为 SQL Server 2019 创建外部语言?