Google Play 游戏服务登录失败
Posted
技术标签:
【中文标题】Google Play 游戏服务登录失败【英文标题】:Google Play Game Service failing to sign in 【发布时间】:2017-05-18 03:49:14 【问题描述】:这几天我一直在用头撞墙。尽管阅读了许多描述 GPS 登录失败的许多问题/解决方案的帖子,但我一直无法找到解决问题的方法。
简而言之,我正在使用 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 Manager 并创建了 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 客户端代码,但这并没有什么不同。
我不确定这里还提供什么,但如果您需要查看代码的任何其他部分,请告诉我。如果有任何建议可以在代码或日志中检查以更好地了解失败的原因,我将不胜感激。
非常感谢。
【问题讨论】:
您是在Google Play Developer Console 还是Google API Console 中创建它? 首先,我将应用添加到开发者控制台的游戏服务中。然后我单击 Linked Apps 链接并将其添加到此处以对其进行授权...从这里我被带到 API Manager,在此我输入名称、包和 SHA-1 指纹。 【参考方案1】:包名称出现在项目的多个位置,并且必须与在 Google Play 开发者控制台中注册的包名称相匹配。例如。 -
android 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 服务即可成功登录。
【讨论】:
【参考方案2】:我认为您应该仔细阅读(或重新阅读)here 中描述的所有程序。 如果您在从头开始学习本教程后需要更多帮助,请添加评论。
90% 的问题与以下问题有关:错误的 sha1 签名证书、错误的应用程序包名称、缺少客户端 ID 等等......
PS:here你可以找到所有的工作样本
【讨论】:
谢谢。我真的希望我的问题像你所说的那样微不足道,因为否则我有点困惑!我将在您提供的链接中再次执行这些步骤,并让您知道我的进展情况。 按照链接中给出的步骤在 Google Play 开发者控制台上删除并重新注册了我的游戏。仔细检查了我的清单和 Gradle 文件中的客户端 ID、包名称详细信息。在 defaultConfig 下的 applicationId 中发现了一个错字……现在它可以工作了。 :) 谢谢。 很好!!如果在某些方面帮助您找到问题,您可以接受答案;) 您的回答确实促使我仔细检查所有内容,但没有解释我遇到的确切问题。我确实对你的答案投了赞成票,但我认为它没有出现,因为我是 SO 新手。 我的答案没有投票权,也没有对此问题的可接受答案。您应该“接受答案”标记答案箭头下的检查。以上是关于Google Play 游戏服务登录失败的主要内容,如果未能解决你的问题,请参考以下文章
登录/重试失败时的 Google Play 游戏服务怪异(活动生命周期)
Android 工作室 - Google Play 游戏服务登录失败