Android 如何检查用户是否签名';是否从游戏服务默认视图中退出?
我在游戏中集成了谷歌游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置中注销 如何检查用户是否实际登录?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(未知来源)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
目前,我正在检查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活动上
ovverideonActivityResult()
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()
。谢谢你的回答,帮了我很多忙!