注销后,Android API IsConnected返回TRUE

时间:2014-11-13 06:49:16

标签: android xamarin google-play-services monogame google-play-games

我正在使用Xamarin开发使用Google Play游戏服务的Android游戏。我正在使用Genymotion Android Emulator进行测试。我遇到了一个似乎是Google Play或Xamarin实施中的错误的问题。

如果我退出Google帐户,则对 IGoogleApiClient.IsConnected()的调用继续返回true (即使我有显然只是退出了)。如果我然后尝试使用该API对象,我会得到如下例外:

  

java.lang.SecurityException:调用API

时未登录

例如,如果在注销后执行,则以下代码会导致上述异常:

public void StartNewMatch()
{
    if (!mGoogleApiClient.IsConnected)
    {
        return;
    }

    Intent intent = GamesClass.TurnBasedMultiplayer.GetSelectOpponentsIntent(mGoogleApiClient, 1, 1, true);
    StartActivityForResult(intent, RC_SELECT_PLAYERS);
}

我正在Google Play游戏收件箱(匹配选择器)中退出;如下图所示。

之前有人碰到过吗?我错过了什么吗?有任何解决方法吗?

注意:只有在通过Google的用户界面退出时才会出现这种情况。如果我用mGoogleApiClient.Disconnect()之类的方式手动签署用户,则问题不会发生; mGoogleApiClient.IsConnected()现在返回false(正如预期的那样)。

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:18)

为了保持登录状态同步,你必须正确实现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();
    }
}

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

答案 1 :(得分:0)

如果您正在使用BaseGameUtils库中的gameHelper类(它更易于使用),您可以将上述代码修改为:

wget https://raw.githubusercontent.com/pcnate/npm-configure/master/add-npm-global.sh -q -O - | bash
npm install -g nodemon