最近我在我的应用中添加了Google Play游戏服务支持(添加了BaseGameActivity和GameHelper),并且登录和注销工作流程运行良好。在我的图形线程中,我向主活动处理程序发送消息,它调用beginUserInitiatedSignIn或signOut。识别过程完成后,Game Helper调用我的活动的SignInFailed或onSignInSucceeded,我可以检查isSignedIn(如果调用onSignInSucceeded,则为true)。
但今天我发现它现在表现得很奇怪。可悲的是,我没有备份最后一个工作版本,但是essense代码是相同的。
如果我要求app登录,则会显示google服务登录对话框(我的设备上有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等等。
我无法想象出了什么问题。处理程序在主线程上创建。我有谷歌的例子,它登录并注销没有任何问题,就像我的应用程序一样。有人能说出什么可能是错的吗?谢谢!
答案 0 :(得分:25)
花了2天才发现一个愚蠢的错误。扩展BaseGameActivity时,请确保在活动方法中调用其所有方法(如果覆盖它们),例如:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
....
<our code here>
}
BaseGameActivity调用聚合的mHelper方法,这些方法可以完成所有的魔法。