Android 如何检查用户是否签名';是否从游戏服务默认视图中退出?

Android 如何检查用户是否签名';是否从游戏服务默认视图中退出?,android,google-plus,securityexception,google-play-games,Android,Google Plus,Securityexception,Google Play Games,我在游戏中集成了谷歌游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置中注销 如何检查用户是否实际登录?getGamesClient.isConnected()仍然为真,尽管用户已从google视图注销 如果我单击注销按钮(由于gamesClient仍处于连接状态,因此该按钮仍然存在),我会得到一个SecurityException: 08-16 11:01:21.262 14288-14288/?E/AndroidRuntime:致命异常:主 java.lang.S

我在游戏中集成了谷歌游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置中注销

如何检查用户是否实际登录?getGamesClient.isConnected()仍然为真,尽管用户已从google视图注销

如果我单击注销按钮(由于gamesClient仍处于连接状态,因此该按钮仍然存在),我会得到一个SecurityException:

08-16 11:01:21.262 14288-14288/?E/AndroidRuntime:致命异常:主 java.lang.SecurityException 位于android.os.Parcel.readException(Parcel.java:1425) 在android.os.Parcel.readException(Parcel.java:1379) 在com.google.android.gms.internal.bm$a$a.a(未知来源) 登录com.google.android.gms.internal.bj.signOut(未知来源) 登录com.google.android.gms.games.GamesClient.signOut(未知来源)


目前,我正在检查ActivityForResult响应代码并断开GamesClient(如果它处于不一致的状态),但我不喜欢这种方法。

我认为您需要的是:isSignedIn(); 像这样:

    public boolean getSignedIn() {
    return isSignedIn();
}
如果用户是否签名,这将返回true或false。 GameHelper.java中的方法:

    /** Returns whether or not the user is signed in. */
public boolean isSignedIn() {
    return mState == STATE_CONNECTED;
}

希望有帮助。

尝试处理活动结果:

public boolean onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == RC_YOUR_UNIQUE_ID 
            && resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) {
        mHelper.disconnect();
        // update your logic here (show login btn, hide logout btn).            
    } else {
        mHelper.onActivityResult(requestCode, resultCode, data);
    }
    return false;
}

RC\u YOUR\u UNIQUE\u ID是您用于显示排行榜或成就活动的ID。

在我的情况下,我将执行以下操作。在
main活动上
ovveride
onActivityResult()
RC_UNUSED
是当您调用Google Play service app打开
排行榜
成就
设置
时的
请求代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == RC_UNUSED 
&& resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) {
        signOut();
    }

    Log.i("test", "On Activity result called");
}   
按如下所示编写
signOut()
方法

public void signOut() {
    try {
        Games.signOut(mGoogleApiClient);
    }catch (SecurityException se){
        Log.i("test", "mGoogleApiClient status was disconnected when callin signOut status. message = " + se.getMessage());
    }
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
    // update your UI logic here (show login btn, hide logout btn).
}

不要忘了在
注销()结束时更新UI

问题是,我(或者更确切地说是GameHelper)设置了MSState,例如在onStop()或signOut()中。但是,如果用户从谷歌提供的排行榜活动设置中注销,则不会发生类似signOut()的情况,因此,mState变量不会更改,甚至会给出错误的状态,因为它表示我已登录,但我没有。谢谢,为我节省了大量时间。这应该更新为
mHelper.disconnect()
。谢谢你的回答,帮了我很多忙!