Google Play游戏服务 - 无法登录

ott*_*142 61 android google-play-services google-play-games

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

到目前为止我做的事情:

  1. 在Dev Console(游戏服务)中添加并链接了我的应用程序
  2. 将OAuth客户端ID包含到我的app/manifest中
  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
Run Code Online (Sandbox Code Playgroud)

我已经在生产模式下构建了我的应用程序 - 使用ProGuard和正确的证书.

我错过了什么?

更新 - 更多尝试

这里是我在此期间尝试过的简短概述.什么都没有帮助.

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

该问题与测试部分的帐户无关.使用未启用测试的帐户将导致另一条错误消息:

E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network
E/CheckGameplayAcl: Unable to load metadata for game
Run Code Online (Sandbox Code Playgroud)

Hartok解决方案!

Hartok的解决方案帮助我解决了这个问题.我之前从未访问过Google API控制台.重要的是要知道,当您从游戏中删除链接的应用程序甚至删除游戏时(在开发者控制台中),OAuth客户端ID不会被删除.您必须访问API控制台并手动将其删除.

自动选择的SHA1指纹(总是)错误!你必须自己查找:

keytool -exportcert -alias <your-alias> -keystore <path-to-keystore> -list -v
Run Code Online (Sandbox Code Playgroud)

我(正确)链接的应用程序的新客户端ID看起来像89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo...以前不仅仅是12位数.我终于想通了你必须排除破折号和字母数字的东西,只能使用12位数字.

Har*_*tok 30

我已经解决了这个问题.

在我的情况下,当我将我的应用程序(尚未发布)链接到我的Google Play游戏服务项目时,Google Play自动选择的证书指纹并不是好的.

为了解决这个问题,我在Google API控制台上删除了我的应用客户端ID ,取消了我的应用链接,然后使用正确的证书指纹重新链接它.在Eclipse中导出应用程序时显示此指纹(如果您的ADT插件是最新的).

希望能帮助到你.

  • 抱歉,您如何"取消Google Play开发者控制台中的游戏链接"?我在控制台中看不到任何按钮... (7认同)

小智 14

有同样的问题.我的解决方案是在Dev Console中将相同的包链接两次,第一个使用我自己的证书中的SHA1指纹,第二个使用我的调试密钥SHA1.

在此之前我曾经尝试过只使用一个或者只使用另一个,但它也没有用.

  • 这也是我的修复.一个复杂因素:在使用调试密钥添加第二个链接应用程序后,我们的调试版本仍然无法登录(403错误等).我认为这是因为Google Play服务缓存了无效凭据,无论是在我添加调试证书版本之前登录失败,还是从使用生产证书的先前版本登录.修复方法是通过应用程序设置清除Google Play服务的数据和缓存. (2认同)
  • 如何为链接的应用程序设置SHA1密钥?我只知道用于设置SHA1密钥的[App&auth凭证](https://console.developers.google.com/project/your-app-id/apiui/credential)页面(在您必须替换的链接中 - app id由您的应用ID).但由于app id对于你的游戏是全局的,我不知道如何区分不同的链接应用程序. (2认同)

Dul*_*lli 14

经过长达2周的时间尝试解决这个问题后,我已经为我解决了这个问题创建了步骤,并决定与每个遇到同样问题的人分享它,而不是发布游戏.它用于测试.当发布时间到来时,我将分享用于发布应用程序的步骤,并确保它适用于Google Play游戏服务.

请注意,我尝试做的就是使用Google登录按钮登录,无需对签名后的操作进行操作,同时请注意我已将Google Play示例中的BaseGameUtils用作库,以及我选择的IDE完成所有这些是Eclipse.

下面是使用eclipse的逐步步骤:

1 - 在您的eclipse工作空间中导入BaseGameUtils作为库,确保导入后不会发生错误.如果发生错误,请执行以下操作:

a-右键单击项目资源管理器中的BaseGameUtil项目

b-单击Java构建路径

c-Click从那里添加外部罐子导航到您的SDK位置并找到Google-Play-services.jar

d-选择它并单击确定--->你应该看到在JAR和类文件夹窗口中添加了jar.

e-转到图书馆右侧的"订购和导出"标签,确保选中"Android私有库"和"Android依赖项",同时确保选中了google-play-services.jar.

2-现在确保在要使用的应用程序中正确引用导入的BaseGameUtility,"您可以创建一个简单的hello world应用程序来测试它",所以现在我们将在hello world应用程序中引用BaseGameUtility,如下所示:

(重要的是确保hello world和BaseGameUtil都在同一个驱动器中,两个驱动器将无法工作)

a - 右键单击​​项目资源管理器右侧的hello world应用程序

b-单击Java构建路径

c-单击"库"

d-如果需要,从外部或内部源添加android support-v4(不需要)

通过单击添加类文件夹添加基本游戏工具.jard - >然后选择BaseGameUtilProject ---然后选择/ bin文件夹 - 这应该将其导入您的应用程序

如果需要,还可以从外部源添加google-play-services.jar

g-in"order and export"确保您选择以下选项--->"Android Private Libraries,Android dependancies,BasegameUtils.jar,GooglePlayGameServices.jar"以及默认情况下应选择的普通SRC和GEN.

3-现在你的java文件helloworld.java确保你的主屏幕具有所有必需的导入,然后扩展BaseGameUtil并确保项目实现ViewOnClickListener.

4-编辑您的Android清单以包含以下内容:

 <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
Run Code Online (Sandbox Code Playgroud)

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

5-确保资源中有ids.xml文件,以便在创建后包含应用程序ID.

<string name="app_id"></string>
Run Code Online (Sandbox Code Playgroud)

您现在可以将其留空,以后您必须将应用程序ID放入其中

在开发人员控制台中添加此应用程序之前,请复制您在eclipse IDE上的调试密钥.在Eclipse中这样做的过程如下:

a-click on window b-选择android c-Click build d-复制SHA1指纹,并在开发人员控制台中创建应用程序时保持使用它.

7-在开发人员控制台中创建游戏,并使用从步骤6中检索到的SHA1.

8-将应用程序ID放在步骤5中突出显示的ids.xml中

9-仔细检查您的值并确保开发人员控制台和清单文件之间的包名称都是正确的.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
**package="com.helloword.check"**
android:versionCode="1"
android:versionName="1.0" >
Run Code Online (Sandbox Code Playgroud)

10-完成后,确保开发人员控制台中的应用程序与使用keytool在开发人员控制台中分配的SHA1相匹配.这是我花了2个星期才弄明白的一步

a-从您的hello world项目的bin文件夹中找到您的应用程序APK,并将其复制到另一个位置,以便稍后使用关键工具检查其ID

b-找到您的keytool - >通常位于您计算机的JAVA文件夹下,在我的情况下它位于C:\ Program Files\Java\jdk1.7.0_09\jre\bin下

c-在临时位置提取你的apk

d-运行以下命令

keytool -printcert -file"TempLocation\Meta-INF\CERT.RSA"

你会得到一个MD5以及SHA1和SHA256

确保SHA1与开发人员控制台中的SHA1匹配.

11-以下是如何从开发人员控制台检查SHA1,

a-去游戏服务

b-在我们的案例中单击helloWorld中的游戏名称

c-向下滚动到"API控制台项目"

d-你应该看到"这个游戏链接到API控制台项目叫做helloworld"

e- helloworld应该是一个超链接点击它,

f-这将打开Goog​​le APis控制台

g-在APconsole中单击API Access

h-向下滚动到"已安装应用程序的客户端ID",您应该看到SHA1确保它与步骤10中先前从keytool生成的SHA1相同.(如果它们不匹配,则必须从开发人员控制台删除游戏并使用正确的SHA1重新创建它)"确保不要从Google API控制台更改SHA1,这将导致问题.

我 - 确保软件包名称与Android清单中的软件包名称相同,我的意思是指的是所有软件包名称都提到的,确保它与"已安装应用程序的客户端ID"中的名称相匹配(在我的情况下,它与我的清单第4行)

这就是你现在应该能够使用谷歌游戏服务测试你的登录

  • 谢谢你的详细解释.我对谷歌感到有点愤怒,因为还有很多开发人员在使用Google Play服务时遇到问题. (3认同)
  • 没问题,我同意你如何做到这一点,文档,而不是非常清楚,或充其量.我找不到一个页面上的所有东西,我一直看到的是一个嵌套链接的页面,这真的令人困惑.我仍在使用Google Play服务测试所有内容,我会不断发布此帖子的任何更新. (2认同)

Sac*_*van 5

第3步中.生成OAuth 2.0客户端ID,它专门发出警告,如下所示:

警告:请勿直接打开Goog​​le API控制台,并在该页面上手动添加客户端ID.当您向游戏服务发送请求时,这样做可能会导致错误.

所以我的经验是你需要虔诚地遵循指南:使用Google Play开发者控制台设置Google Play游戏服务