如何避免再次提示用户选择Google帐户?

时间:2013-07-17 13:46:09

标签: android google-play-services google-play-games

我正在使用Google Play游戏服务开发和Android应用程序,我已经跟随getting started guide将BaseGameUtils作为模块导入到我的IntelliJ项目中。现在工作正常,但每当我打开一个继承BaseGameActivity并致电beginUserInitiatedSignIn()的活动时,系统会提示用户选择要连接的Google帐户(如果手机上有多个帐户) 。现在,如果不是因为在我的应用中,用户已经通过Google Play服务using OAuth2GoogleAuthUtil / AccountPicker)进行了操作,那么现在就可以了。它给出了他/她想要使用的帐户 - 一个人不应该再问一次。

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

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

更新:Logcat-log

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.

2 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分: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并查看消息说明的内容。如有必要,您可以获得更详细的跟踪。

N.B。如果用户已登录,则路径更短更简单,并且不会显示“选择帐户”对话框 - 也许最好先在其中一个示例应用上试用它?