我正在使用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(正如预期的那样)。
答案 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