在昨天的Google I/O主题演讲之后,我更新了我的Android SDK,将游戏服务整合到我的应用程序中。
我所做的事情:
- 在Dev控制台(游戏服务)中添加并链接了我的应用程序
- 将OAuth客户端ID包含在我的应用程序/清单中
- 将
BaseGameActivity
和GameHelper
添加到我的项目中 (来自GitHub) - 将google-play-services库添加到我的项目中
- 扩展了
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个数字。