我正在使用Xamarin开发使用Google Play游戏服务的
Android游戏.我正在使用Genymotion Android Emulator进行测试.我遇到了一个似乎是Google Play或Xamarin实施中的错误的问题.
如果我退出Google帐户,则对IGoogleApiClient.IsConnected()的调用将继续返回true(即使我已经明确注销).如果我然后尝试使用该API对象,我会得到以下异常:
java.lang.SecurityException: Not signed in when calling API
public void StartNewMatch() { if (!mGoogleApiClient.IsConnected) { return; } Intent intent = GamesClass.TurnBasedMultiplayer.GetSelectOpponentsIntent(mGoogleApiClient,1,true); StartActivityForResult(intent,RC_SELECT_PLAYERS); }
我正在Google Play游戏收件箱(匹配选择器)中退出;如下图所示.
有没有人遇到过这个?我错过了什么吗?有任何解决方法吗?
注意:只有通过Google的用户界面退出时才会出现这种情况.如果我用mGoogleApiClient.Disconnect()之类的方式手动签出用户,则不会出现问题; mGoogleApiClient.IsConnected()现在返回false(按预期方式).
解决方法
为了保持登录状态同步,你必须正确实现onActivityResult.
这应该看起来如下:
注意:这是java代码,我不确定这将如何使用Xamarin,但希望你应该能够弄明白:)
@Override protected void onActivityResult(int requestCode,int responseCode,Intent data) { // check for "inconsistent state" if ( responseCode == GamesActivityResultCodes.RESULT_RECONNECT_required && requestCode == <your_request_code_here> ) { // force a disconnect to sync up state,ensuring that mClient reports "not connected" mGoogleApiClient.disconnect(); } }