2

我正在使用 Google Play Games Services 开发 Android 应用程序,并且按照入门指南将 BaseGameUtils 作为模块导入到我的 IntelliJ 项目中。这现在工作正常,除了每当我打开一个继承BaseGameActivity和调用的活动时beginUserInitiatedSignIn(),都会提示用户选择要连接的 Google 帐户(如果手机上有多个帐户)。现在,如果不是因为在我的应用程序中,用户已经使用 OAuth2 ( GoogleAuthUtil / AccountPicker ) 通过 Google Play 服务进行了身份验证,这会很好。它已经给出了他/她想要使用的帐户 - 不需要再次询问。

无论如何我可以修改BaseGameActivity.javaGameHelper.java不再提示用户?和/或我是否需要更改使用 OAuth2 登录的方式?

我尝试将四个范围 PLUS_PROFILE、PLUS_LOGIN、GAMES 和 APP_STATE 添加到我的 OAuth 登录例程中,但是 AccountPicker-popup sill 出现在我从 BaseGameActivity 继承的活动中。

更新:Logcat 日志

07-23 11:45:25.275: DEBUG/CSDN-GMS(22315): isGooglePlayServicesAvailable returned 0
07-23 11:45:25.275: DEBUG/CSDN-GMS(22315): beginUserInitiatedSignIn: starting new sign-in flow.
07-23 11:45:25.285: DEBUG/CSDN-GMS(22315): Connecting GamesClient.
07-23 11:45:25.295: DEBUG/CSDN-GMS(22315): onStart.
07-23 11:45:25.295: DEBUG/CSDN-GMS(22315): onStart: connecting clients.
07-23 11:45:25.295: DEBUG/CSDN-GMS(22315): Connecting GamesClient.
07-23 11:45:25.395: DEBUG/CSDN-GMS(22315): onConnectionFailed: result 4
07-23 11:45:25.395: DEBUG/CSDN-GMS(22315): onConnectionFailed: since user initiated sign-in, trying to resolve problem.
07-23 11:45:25.395: DEBUG/CSDN-GMS(22315): resolveConnectionResult: trying to resolve result: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{4190b780: android.os.BinderProxy@4190a780}}
07-23 11:45:25.395: DEBUG/CSDN-GMS(22315): result has resolution. Starting it.
4

2 回答 2

1

您需要先使用 OAuth2 登录,还是先登录 Google 游戏?如果您可以先登录 Google 游戏而侥幸,您也许可以使用GamesClient.getCurrentAccountName(). 来自https://developer.android.com/reference/com/google/android/gms/games/GamesClient.html#getCurrentAccountName()

获取当前所选帐户的名称。这是用户选择用于 Google Play 游戏的帐户。

然后,您可以将该帐户选择提供给 OAuth2 身份验证。

于 2013-10-11T14:02:43.620 回答
0

我建议您查看/发布 logcat 跟踪。这是用户未登录时成功跟踪的样子:

07-04 10:21:54.511: D/ian_(1781): MultiTab3 beginUserInitiatedSignIn
07-04 10:21:54.531: D/ian_(1781): isGooglePlayServicesAvailable returned 0
07-04 10:21:54.531: D/ian_(1781): beginUserInitiatedSignIn: continuing pending sign-in flow.
07-04 10:21:54.611: D/ian_(1781): resolveConnectionResult: trying to resolve result: C      onnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{40f3ed38: android.os.BinderProxy@40ee3de0}}
07-04 10:21:54.611: D/ian_(1781): result has resolution. Starting it.
07-04 10:21:54.621: D/ian_(1781): startResolutionForResult - this may be prob ?
07-04 10:23:29.480: D/ian_(1781): MultiPlayer onActivityResult called9001-1null
07-04 10:23:29.520: D/ian_(1781): MultiPlayer passing onActivityResult to MultiTab3 Req/Resp/Data=9001-1null
07-04 10:23:29.520: D/ian_(1781): MultiTab3 onActivityResult - passing through to GameHelper ...9001-1null
07-04 10:23:29.520: D/ian_(1781): onActivityResult, req 9001 response -1
07-04 10:23:29.520: D/ian_(1781): responseCode == RESULT_OK. So connecting.
07-04 10:23:30.130: D/ian_(1781): onConnected: connected! client=1
07-04 10:23:30.130: D/ian_(1781): All clients now connected. Sign-in successful.
07-04 10:23:30.130: D/ian_(1781): All requested clients connected. Sign-in succeeded!

beginUserInitiatedSignIn 仅在用户未登录(或出现问题)时启动 Google“选择帐户”对话框(结果已解决。启动它)。您会看到,在我的示例中,发生这种情况的原因是 SIGN_IN_REQUIRED。

查看您的 logcat 并查看消息内容。如有必要,您可以获得更详细的跟踪。

NB 如果用户已登录,那么路径会更短更简单,并且不会显示“选择帐户”对话框 - 也许先在其中一个示例应用程序上试用它是个好主意?

于 2013-07-17T19:17:33.517 回答