谷歌游戏服务登录问题(第一次尝试失败,第二次成功)

Posted

技术标签:

【中文标题】谷歌游戏服务登录问题(第一次尝试失败,第二次成功)【英文标题】:Google game services sign in issue (fails first attempt, successful second) 【发布时间】:2013-12-07 13:11:30 【问题描述】:

目前正在尝试将我的游戏(使用 libgdx)连接到 Google 游戏服务以启用排行榜/成就等并看到一些奇怪的行为。

问题

当我第一次点击“登录”时,它会显示选择您的谷歌帐户的对话框,然后播放服务权限圈对话框,然后是大加载圈。过了一会儿,它会显示一个对话框,并显示以下错误Google Play 服务的未知问题

如果我点击“确定”关闭该错误对话框,然后再次点击“登录”按钮,我会立即成功登录。之后,我可以看到排行榜等。

详情

我看到的错误日志:

...
D: GameHelper: onActivityResult: req=RC_RESOLVE, resp=9001
D: GameHelper: onAR: responseCode=9001, so giving up.
D: GameHelper: killConnections: killing connections.
D: GameHelper: killConnections: all clients disconnected.
D: GameHelper: State change CONNECTING -> DISCONNECTED
D: GameHelper: Making error dialog for failure: SignInFailureReason(serviceErrorCode:SIGN_IN_REQUIRED(4),activityResultCode:9001)
D: GameHelper: Showing error dialog.
D: GameHelper: Notifying LISTENER of sign-in FAILURE (error)
I: ----- Sign in failed :( -----
///// Tap the 'sign in' button again ///////
I: ----- Begin sign in process... -----
D: GameHelper: Starting USER-INITIATED sign-in flow.
D: GameHelper: isGooglePlayServicesAvailable returned 0
D: GameHelper: beginUserInitiatedSignIn: starting new sign-in flow.
D: GameHelper: Starting connections.
D: GameHelper: State change DISCONNECTED -> CONNECTING
D: GameHelper: connectNextClient: requested clients: 1, connected clients: 0
D: GameHelper: Pending clients: 1
D: GameHelper: Connecting GamesClient.
D: GameHelper: onConnected: connected! client=1
D: GameHelper: Connected clients updated to: 1
D: GameHelper: connectNextClient: requested clients: 1, connected clients: 1
D: GameHelper: Pending clients: 0
D: GameHelper: All clients now connected. Sign-in successful!
D: GameHelper: All requested clients connected. Sign-in succeeded!
D: GameHelper: State change CONNECTING -> CONNECTED
D: GameHelper: Notifying LISTENER of sign-in SUCCESS
I: ----- Sign in success! -----
D: GameHelper: onActivityResult: req=3, resp=3
D: GameHelper: onActivityResult: request code not meant for us. Ignoring.
...

由于我使用的是 libgdx,因此我没有扩展 BaseGameActivity,而是手动创建 GameHelper 并使用它

// in @Override onCreate:
mGameHelper = new GameHelper(this);                
mGameHelper.setup(this, GameHelper.CLIENT_GAMES);    
mGamesClient = mGameHelper.getGamesClient();       

// in @Override onStart:
mGameHelper.onStart(this);

// then, for the sign in button, using it:
mGameHelper.beginUserInitiatedSignIn();

额外信息

我还在日志中看到以下内容:

E: The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

但是,不确定它是否相关,根据我的阅读,这似乎与地图/gps/位置有关。不使用地图,我可以登录,所以不确定这个错误是否相关(虽然听起来很糟糕!)

更新/编辑:经测试,此错误是由 AdMob(我已与 Google 服务集成)引起的。虽然错误听起来很糟糕,但禁用 AdMob(不再出现错误)奇怪的行为仍然相同。

我认为以下是有趣的错误日志,尽管在谷歌上搜索此错误时运气不佳:

E/dalvikvm( 2618): Could not find class 'android.app.AppOpsManager', referenced from method axo.a

编辑 2:更多发现! 即使我没有完成整个登录工作流程,我也会收到相同的错误对话框。

点按“登录” 查看要登录的帐户列表 点击“取消” 查看带有标题/消息的警报对话框:Google Play 服务存在未知问题

任何帮助都会很棒!

注意:

这可以始终如一地重现 - 注销,然后在登录按钮上轻按两次即可获得上述行为 确保我按照Google Play Game Services: strange sign in behavior 中的建议致电onActivityResult 完成教程并设置示例应用程序(A 类编号)- 一切正常。

【问题讨论】:

【参考方案1】:

想通了!结果是个愚蠢的错误!

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    // mGameHelper.onActivityResult(requestCode, requestCode, data); // before - broken
    mGameHelper.onActivityResult(requestCode, resultCode, data); // after - working! \o/

看到区别了吗? (提示:mGameHelper.onActivityResult的第二个参数)

为了其他人在未来遇到此问题,以下日志虽然可能指示其他错误,但似乎不会影响登录过程 - 或一般的游戏服务 - 我的排行榜正在工作:)

E/GooglePlayServicesUtil(10033):未找到 Google Play 服务资源。检查您的项目配置以确保包含资源。 根据我的调试,这与使用 AdMob 和 Google Play 服务有关。 AdMob 可能会尝试获取基于位置的信息(所有其他 Google 搜索上述错误都会导致与地图相关的问题)

E/dalvikvm(10100):找不到类“android.app.AppOpsManager”,从方法 axp.a 引用 不确定这个错误是什么。 android.app.AppOpsManager 似乎是 API v19 (AppOpsManager in Android Developer) 中添加的一个类。我将 SDK 更改为使用 API v19,但仍然出现此错误。快速浏览文档表明它还具有与位置相关的功能(可能又是 AdMob - 不要以为我在禁用 AdMob 时看到了这个)

【讨论】:

【参考方案2】:

您是否在此链接激活了 api:https://console.developers.google.com/project ?

【讨论】:

【参考方案3】:

该应用必须使用相同的文件签名并上传到手机和 g play 作为测试版,才能使用谷歌服务

【讨论】:

【参考方案4】:

我从 GameHelper onStop 方法中删除了这一行。

//mExpectingResolution = false.

它对我有用

https://code.google.com/p/play-games-platform/issues/detail?id=98

【讨论】:

以上是关于谷歌游戏服务登录问题(第一次尝试失败,第二次成功)的主要内容,如果未能解决你的问题,请参考以下文章

小程序第一次登录失败,第二次成功问题(2)

登录失败。请检查您的网络连接广告再试一次,谷歌玩游戏服务

WCF 客户端。客户证书。第一次调用成功,第二次调用失败

微信小程序登录获取openid有时候为啥第一次会失败,第二次才成功?

gitlab第一次推送成功第二次失败

Spring认证执行了两次,先成功后失败