谷歌游戏服务-无法登录

60

在昨天的Google I/O主题演讲之后,我更新了我的Android SDK,将游戏服务整合到我的应用程序中。

我所做的事情:

  1. 在Dev控制台(游戏服务)中添加并链接了我的应用程序
  2. 将OAuth客户端ID包含在我的应用程序/清单中
  3. BaseGameActivityGameHelper 添加到我的项目中 (来自GitHub)
  4. 将google-play-services库添加到我的项目中
  5. 扩展了BaseGameActivity,添加了一个com.google.android.gms.common.SignInButton

我还设置了游戏元数据和一些成就。开发者控制台显示已准备好发布。为了测试登录流程和成就,我添加了两个Google+帐户作为测试用户。

但是当我测试SignInButton时,出现了一个弹窗:未知错误。这里是logcat:

ERROR/Volley: il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/me
ERROR/SignInIntentService: Access Not Configured
ERROR/LoadSelfFragment: Unable to sign in - application does not have a registered client ID

我已经使用ProGuard和正确的证书以生产模式构建了我的应用程序。

我错过了什么吗?

更新 - 更多尝试

这是我在此期间尝试的一些简要概述。没有任何帮助。

  • 删除并重新创建链接的Android应用程序条目(双重检查证书指纹)
  • 禁用防伪
  • 跳过ProGuard
  • 创建一个新的(测试)游戏并使用其客户端ID

问题与“用于测试的帐户”部分无关。使用未启用测试的帐户将导致另一个错误消息:

E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network
E/CheckGameplayAcl: Unable to load metadata for game

Hartok的解决方案!

Hartok的解决方案对我修复这个问题帮助很大。我以前从未访问过Google APIs控制台。需要知道的是,当您从游戏中删除链接的应用程序甚至删除一个游戏(在开发者控制台中)时,OAuth客户端ID不会被删除。您需要访问APIs控制台并手动删除它。

自动选择的SHA1指纹永远是错误的!你必须查找你自己的:

keytool -exportcert -alias <your-alias> -keystore <path-to-keystore> -list -v

我已经将我的应用程序与正确的客户端ID关联起来,但新的客户端ID看起来像 89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo...,不再只有12个数字了。我最终发现,您必须排除破折号和字母数字内容,并且只能使用这12个数字。


1
奇怪的事情:我遇到了同样的问题(我不是devconsole的管理员用户),但当管理员尝试时,它可以正常工作,没有任何问题。 - jhbruhn
1
我这边也有同样的管理员问题。 - Hartok
3
别忘了在你的设备上删除Google Play服务应用程序的缓存和内容。这个问题曾经让我困扰了大约一个小时。 - you786
我需要创建2个关联的应用程序吗? - Tocco
抱歉...但是我在Google开发者控制台中有两个指纹,但只有发布版本的一个有效...有什么建议吗?TIA - Tocco
18个回答

1

非常感谢!我正在为已经发布的游戏添加游戏服务,但显然你不能这样做。它们必须同时发布或不发布。> <我稍后会发布我的游戏服务,看看会发生什么。 - Finnboy11

1
Hartok的方法对我也有帮助,但是“您可能需要从Google API控制台中删除项目。”这听起来足够了,但对我来说并不是。Google在API控制台中有很少的“撤消”功能。您可以简单地恢复所有内容,这意味着他们存储了您的SHA-1密钥,但标记为已删除(?)。 对我有效的方法是,我取消了所有测试项目的删除,并手动从所有这些删除的项目的“API访问”选项中删除了所有OAuth密钥,之后我就可以再次使用我的调试密钥了。希望能帮助到某些人...

0

请在应用程序运行时检查互联网连接。如果未连接,则记录此错误消息。


0

在我的情况下,我忘记在AndroidManifest.xml中更改包名;这就是全部。我认为应该首先检查这个。


0

对我来说还是不起作用。谷歌对我的Google Play游戏服务进行了完全重置,并逐步进行了集成。仍然说我没有注册的谷歌客户端ID。 考虑到花了3年时间来制作Google Play游戏服务,这真是个失败。

最后一件事,带有@googlemail.com的帐户无法被识别,您无法导出成就的ID(当您有40个成就时,复制粘贴HTML是相当痛苦的)。

05-22 00:35:57.914: I/dqi(11166): 在处理请求时出现的I/O异常(org.apache.http.NoHttpResponseException):目标服务器未响应
05-22 00:35:57.914: I/dqi(11166): 正在重试请求
05-22 00:35:58.135: E/Volley(11166): [506] il.a: https://www.googleapis.com/games/v1/players/me 返回了意外的403响应代码
05-22 00:35:58.195: E/Volley(11166): [506] il.a: https://www.googleapis.com/games/v1/players/me 返回了意外的403响应代码
05-22 00:35:58.205: E/SignInIntentService(11166): 访问未配置
05-22 00:35:58.205: E/SignInIntentService(11166): aol
05-22 00:35:58.205: E/SignInIntentService(11166): 在ajy.a(SourceFile:108)
05-22 00:35:58.205: E/SignInIntentService(11166): 在abm.a(SourceFile:213)
05-22 00:35:58.205: E/SignInIntentService(11166): 在abm.a(SourceFile:194)
05-22 00:35:58.205: E/SignInIntentService(11166): 在aav.a(SourceFile:486)
05-22 00:35:58.205: E/SignInIntentService(11166): 在aqu.a(SourceFile:221)
05-22 00:35:58.205: E/SignInIntentService(11166): 在com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile:343)
05-22 00:35:58.205: E/SignInIntentService(11166): 在android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
05-22 00:35:58.205: E/SignInIntentService(11166): 在android.os.Handler.dispatchMessage(Handler.java:99)
05-22 00:35:58.205: E/SignInIntentService(11166): 在android.os.Looper.loop(Looper.java:137)
05-22 00:35:58.205: E/SignInIntentService(11166): 在android.os.HandlerThread.run(HandlerThread.java:60)
05-22 00:35:58.205: E/LoadSelfFragment(15328): 无法登录 - 应用程序未注册客户端ID

将 @googlemail.com 帐户添加为测试帐户的确会失败。哈哈,Google,拜托了!我已经访问 mail.google.com 迁移到 [at]gmail.com... - ottel142
小提示,我几乎放弃了,但后来发现我放置的软件包名称并不完全匹配我的“真实应用程序”,因为这只是一个样例应用程序转换成我的正式软件包名称以查看它如何工作。很遗憾,您无法在不经过一些重大障碍的情况下对其进行调试。 - RelativeGames

0

对我来说,调试签名是可以工作的,但签名不行;/我们能联系谷歌解决这个问题吗?我已经花了一整天的时间在上面了;/我收到了“此客户端ID没有关联的链接应用程序”的消息,但它们都在正确的项目下的Google API中。

此外,我无意中将两个链接和发布的应用程序指向相同的app_ID放在开发者控制台中,这两个应用程序都已发布,无法删除。


0
请尝试以下步骤:
  1. 在Google开发者网站上将您的应用程序注册为测试版(如果尚未发布)。
  2. 创建一些测试用户ID并在该网站上注册它们。
  3. 现在在那里编写您的SHA1 ID。
  4. 记下由Google生成的开发人员ID。
  5. 将其放置在应用程序的适当位置。

如果您已经完成了上述步骤,请按照以下最重要的步骤进行操作。

6- 现在使用相同的密钥库导出您的应用程序,然后在您的设备上安装它(在其中您已登录为在Google上注册的测试人员ID)。
现在,您肯定可以无误地访问Google实时服务器。


0

版本 ID!我不得不将我的版本 ID 更改为大于我最近发布的值。突然间,我就能够登录了!

对我来说,我正在使用一个示例(按钮点击器),并将其伪装成我的已发布应用程序之一。我可能仍然需要做所有 SHA1 更改的事情,因为它似乎有些偏差,但是让我获胜的变化是将版本 ID 更新为 3,因为示例从 1 开始,而我的真实/已发布应用程序设置为 2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接