如何检查用户是不是从游戏服务默认视图中退出?
Posted
技术标签:
【中文标题】如何检查用户是不是从游戏服务默认视图中退出?【英文标题】:How can i check if user sign's out from games services default view?如何检查用户是否从游戏服务默认视图中退出? 【发布时间】:2013-08-18 18:36:05 【问题描述】:我在我的游戏中集成了谷歌游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置中退出。
如何检查用户是否实际登录? getGamesClient.isConnected() 仍然为 true,尽管用户已从 google 视图中注销。
如果我单击注销按钮(它仍然存在,因为 gamesClient 仍处于连接状态),我会收到 SecurityException:
08-16 11:01:21.262 14288-14288/? E/androidRuntime: 致命异常: main 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,如果它处于不一致状态,但我不喜欢这种方法。
【问题讨论】:
【参考方案1】:尝试处理onActivityResult:
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_YOUR_UNIQUE_ID 是您用于显示排行榜或成就活动的 ID。
【讨论】:
谢谢,节省了我很多时间。 这应该更新为mHelper.disconnect()
。感谢您的回答,对我帮助很大!【参考方案2】:
我认为你需要的是: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;
希望对你有帮助。
【讨论】:
问题是,我(或者更确切地说是 GameHelper)设置了 mState,例如在 onStop() 或 signOut() 中。但是,如果用户从 google 提供的 Leaderboard Activity 设置中注销,则不会发生类似 signOut() 的事情,因此,mState 变量不会更改,甚至会给出错误的状态,因为它表明我已登录但我不是。【参考方案3】:就我而言,我正在执行以下操作。在MainActivity
ovveride onActivityResult()
。 RC_UNUSED
是当您调用从 Google Play 服务应用打开 Leaderboards
、Achievements
和 Settings
活动时的 requestCode
。
@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).
别忘了在signOut()
结尾处更新你的用户界面
【讨论】:
以上是关于如何检查用户是不是从游戏服务默认视图中退出?的主要内容,如果未能解决你的问题,请参考以下文章