注销后,Android API IsConnected返回TRUE

我正在使用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();
    }
}

注意:只需确保在代码中替换您使用的请求代码.您可能还需要检查多个请求代码.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...