8

最近我在我的应用程序中添加了 Google Play 游戏服务支持(添加了 BaseGameActivity 和 GameHelper),它的登录和注销工作流程运行良好。在我的图形线程中,我向主活动处理程序发送消息,它调用 beginUserInitiatedSignIn 或 signOut。当识别过程完成时,游戏助手调用我的活动的 onSignInFailed 或 onSignInSucceeded,我可以检查 isSignedIn(如果调用了 onSignInSucceeded,则为 true)。

但是今天我发现它现在表现得很奇怪。遗憾的是我没有备份最后一个工作版本,但本质代码是一样的。

如果我要求应用程序登录,它会显示谷歌服务登录对话框(我的设备上有 2 个帐户)。我选择了一个帐户,按确定,它返回到我的应用程序,但既没有调用 onSignInSucceeded 也没有调用 onSignInFailed(之前如果我取消此对话框,我会看到“未知错误”消息)。当我第二次尝试登录时,它会启动一个旋转圆圈并无休止地等待。如果我点击屏幕,它会中止等待并返回我的视图。

尽管如果我关闭应用程序并再次启动它,它会在启动时成功登录,调用 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!

如果我退出然后尝试再次登录,它会显示帐户对话框并写道:

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.

当我选择一个帐户时,它会返回我的活动,并且不会调用 onSignInSucceeded 和 onSignInFailed。如果我签入运行时,我会看到该应用未连接到谷歌服务。当我再次尝试登录时,它会显示永远旋转的圆圈并说:

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 等等。

我无法想象出了什么问题。处理程序是在主线程上创建的。我有谷歌示例,它登录和注销没有任何问题,就像我的应用程序一样。有人能说出什么是错的吗?谢谢!

4

1 回答 1

25

花了 2 天时间才发现一个愚蠢的错误。当您扩展 BaseGameActivity 时,请确保在您的活动方法中调用其所有方法(如果您覆盖它们),例如:

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

BaseGameActivity 调用它的聚合 mHelper 的方法来完成所有的魔法。

于 2013-05-31T16:14:34.230 回答