2017-01-03 81 views
0

我已经撞了很多天的头靠墙。尽管阅读了很多描述GPS登录失败的问题/解决方案的帖子,但我一直无法找到解决我的问题的方法。谷歌Play游戏服务未能登录

总之,我开发使用LibGDX框架Android Studio中游戏,增加了BaseGameUtils作为库和添加了所有必要的依赖等

问题陈述:游戏开始时,它会尝试连接到GPGS,但始终以“登录失败”消息响应。该logcat中包含以下信息:

01-03 19:37:41.744 6693-7436/? E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE 
01-03 19:37:41.764 20609-20609/? I/SignInActivity: Transition from 6 to 11 
01-03 19:37:41.764 20609-20609/? W/SignInActivity: onSignInFailed()... 
01-03 19:37:41.764 20609-20609/? W/SignInActivity: Sign in failed during 6 
01-03 19:37:41.764 20609-20609/? W/SignInActivity: ==> Returning non-OK result: 10002 

根据https://developers.google.com/android/reference/com/google/android/gms/games/GamesActivityResultCodes ...

public static final int RESULT_SIGN_IN_FAILED 

Result code sent back to the calling Activity when signing in fails. 

The attempt to sign in to the Games service failed. 
For example, this might happen if the network is flaky, 
or the user's account has been disabled, or consent could not be obtained. 

Constant Value: 10002 

我的网络是不是“酥”,我不认为我的帐户已被禁用 - 其他商业游戏我用GPGS安装完美的工作。

我已经签署了我的APK - 调试和发布(尽管我只在这个阶段使用调试)。我已将该游戏添加到Google Developer Console中,并将其链接到API管理器中,并创建了OAuth2客户端ID。事实上,我已经做了很多次这样的事情,删除链接的游戏并重新创建它,认为我的客户端ID或SHA1指纹不正确。 logcat消息表明OAuth2配置是错误的,但我已经检查了很多次,这一切对我来说都很好。验证签名的最佳方法是什么?

我正在测试的物理三星S7,我直接从我的笔记本电脑部署。我的Android Gradle具有必要的SigningConfigs声明,所以我相信我部署的游戏应该正确签名。

android { 
signingConfigs { 
    config { 
     keyAlias 'mygame-key' 
     keyPassword 'mypassword' 
     storeFile file('path/to/my/keystore.jks') 
     storePassword 'keystorepassword' 
    } 
} 
buildTypes { 
    release { 
     signingConfig signingConfigs.config 
    } 
    debug { 
     signingConfig signingConfigs.config 
     debuggable true 
    } 
} 

在我的清单中,我有必需的行。例如。 -

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id"/> 
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> 

原来,在AndroidLauncher,我用的是GameHelper类,但最近发现,这是被弃用,因此,我改变了我的代码使用GoogleApiClient。助洗剂的定义如下:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 

对于其它方法的代码已被直接取自TrivialQuest示例应用程序,例如 -

@Override 
protected void onStart() { 
    Log.d(TAG, "onStart()"); 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

但是,尽管使用Google API客户端代码,但这没有什么区别。

我不确定在这里还提供什么,但请让我知道如果你需要看到代码的任何其他部分。我会非常感谢任何关于在代码或日志中检查的建议,以便更好地了解为什么这样做会失败。

非常感谢提前。

+0

您是在[Google Play开发者控制台](https://play.google.com/apps/publish)还是在[Google API控制台](https://console.developers.google.com)中创建它)? – ianhanniballake

+0

首先,我将该应用添加到开发者控制台中的游戏服务。然后我点击链接的应用程序链接并将其添加到此处以授权它...从这里开始,我进入API管理器,这是我输入名称,包和SHA-1指纹的地方。 – Gavin

回答

0

我认为你应该仔细阅读(或重读)所有描述here的程序。 如果您在再次从头开始学习教程后需要更多帮助,请添加注释。与此问题

90%涉及:错误的SHA1签名证书,错误应用程序包名,失踪客户ID和像那些......

PS:here你可以找到所有的工作样本

+0

谢谢你。我真心希望我的问题在你说的时候是微不足道的,因为我有点不知所措!我将在您提供的链接中再次执行这些步骤,并让您知道我如何继续。 – Gavin

+0

按照链接中提供的步骤在Google Play开发者控制台中删除并重新注册了我的游戏。在我的清单和Gradle文件中双击检查客户端ID,包名详细信息。在defaultConfig下的applicationId中发现了一个错字...现在它起作用了。 :) 谢谢。 – Gavin

+0

不错!如果在某些部分帮助您找到问题,您可以接受答案;) – MatPag

0

软件包名称出现在项目中的许多位置,并且必须与在Google Play开发者控制台中注册的软件包名称匹配。例如。 -

机器人的build.gradle

defaultConfig { 
    applicationId "com.package.name" 
    ... 
} 

的Android的AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.package.name" 
    ... 
</manifest> 

我在Android的build.gradle曾在我的applicationID一个错字。一旦更正,Google Play服务成功登录。

相关问题