Google Play游戏服务:奇怪的login行为

最近我在我的应用程序中添加了Google Play游戏服务支持(添加了BaseGameActivity和GameHelper),它的login和注销工作stream程正常工作。 在我的graphics线程中,我将消息发送到主活动处理程序,它调用beginUserInitiatedSignIn或signOut。 当识别过程完成时,游戏助手调用onSignInFailed或onSignInSucceeded我的活动,我可以检查isSignedIn(如果onSignInSucceeded被调用,则为true)。

但是今天我发现它现在很奇怪。 可悲的是,我没有备份最后的工作版本,但本质上的代码是一样的。

如果我要求应用程序login它显示谷歌服务login对话框(我有我的设备上的2个帐户)。 我select一个帐户,按确定,它返回到我的应用程序,但既不onSignInSucceeded也不onSignInFailed调用(以前,如果我取消这个对话框,我看到“未知的错误”消息)。 当我第二次尝试login时,它会发起一个旋转的循环,并等待不断。 如果我在屏幕上点击它会中止等待并返回到我的视图。

尽pipe如果我closures了应用程序并再次启动它,它会在启动成功时login,调用onSignSucceded并在运行时检查。 它说:

onCreate: creating GamesClient onStart. onStart: connecting clients. Connecting GamesClient. onConnected: connected! client=1 All clients now connected. Sign-in successful. All requested clients connected. Sign-in succeeded! 

如果我退出然后尝试再次login,则会显示帐户对话框并写入:

 isGooglePlayServicesAvailable returned 0 beginUserInitiatedSignIn: starting new sign-in flow. Connecting GamesClient. onConnectionFailed: result 4 onConnectionFailed: since user initiated sign-in, trying to resolve problem. resolveConnectionResult: trying to resolve result: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{41f8a610: android.os.BinderProxy@41f8a5b0}} result has resolution. Starting it. 

当我select一个帐户,它返回到我的活动,onSignInSucceeded和onSignInFailed都不会被调用。 如果我在运行时检查,我看到该应用程序没有连接到谷歌服务。 当我尝试再次login时,它会显示永久旋转的圆圈,并说:

 isGooglePlayServicesAvailable returned 0 beginUserInitiatedSignIn: continuing pending sign-in flow. resolveConnectionResult: trying to resolve result: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{41f8a610: android.os.BinderProxy@41f8a5b0}} result has resolution. Starting it. 

当我点击屏幕时,会中止循环,而不会调用onSignInSucceeded和onSignInFailed等等。

我无法想象出了什么问题。 处理程序在主线程上创build。 我有谷歌的例子,它没有任何问题,就像我的应用程序一样login和注销。 有人可以告诉什么是错的? 谢谢!

Solutions Collecting From Web of "Google Play游戏服务:奇怪的login行为"

花了2天才find一个愚蠢的错误。 当你扩展BaseGameActivity时,确保你在你的activity方法中调用了它的所有方法(如果你覆盖它们),例如:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); .... <our code here> } 

BaseGameActivity调用其聚合的mHelper的方法,这完成所有的魔术。