检测从 Google Play UI 退出
Posted
技术标签:
【中文标题】检测从 Google Play UI 退出【英文标题】:Detect Sign Out from Google Play UI 【发布时间】:2014-12-06 16:40:51 【问题描述】:我的游戏目前正在使用菜单中的登录和退出按钮,以便使用 Google Play 排行榜/成就。不幸的是,用户也可以从 Google Play UI 中退出,但当他们通过 Google 的 UI 执行此操作时,GameHelper.isSignedIn() 仍然返回 true。当用户以这种方式退出后尝试查看排行榜或成就时,游戏会崩溃。
有谁知道检查用户是否通过 UI 退出的更新方法?我说更新了,因为我在 *** 中看到了一些不起作用的线程。
【问题讨论】:
How to handle disconnect from Google Game Services?的可能重复 查看我的answer,它仍然有效 - 我刚刚在最新版本的 Google Play 服务 (6.1.71 (1501030-038)) 上对其进行了测试。 谢谢,我稍作改动并删除了 RequestCode if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) gameHelper.disconnect(); else gameHelper.onActivityResult(requestCode, resultCode, data); 【参考方案1】:我刚刚关注了https://developers.google.com/games/services/training/signin 一切正常。 它正在使用
boolean mExplicitSignOut = false;
boolean mInSignInFlow = false; // set to true when you're in the middle of the
// sign in flow, to know you should not attempt
// to connect in onStart()
GoogleApiClient mGoogleApiClient; // initialized in onCreate
@Override
protected void onStart()
super.onStart();
if (!mInSignInFlow && !mExplicitSignOut)
// auto sign in
mGoogleApiClient.connect();
@Override
public void onClick (View view)
if (view.getId() == R.id.sign_out_button)
// user explicitly signed out, so turn off auto sign in
mExplicitSignOut = true;
if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
Games.signOut(mGoogleApiClient);
mGoogleApiClient.disconnect();
【讨论】:
【参考方案2】:我创建了一个名为 Sign in Play Games 的成就,并尝试在 onSingIn() 上解锁它。
@Override
public boolean unlockAchievements()
boolean r = true;
if (gameHelper.isSignedIn())
try
Games.Achievements.unlock(gameHelper.getApiClient(), getString(R.string.achievement_sign_in_play_games));
catch(Exception ex)
r = false;
finally
else
r = false;
return r;
在我的登录按钮所在的屏幕调整大小事件中,我实现了以下代码:
@Override
public void resize(int width, int height)
//...
if(game.gameHelper.isSignedIn())
if (!game.gameHelper.unlockAchievements())
game.gameHelper.forceSignOut();
forceSignOut() 在 GameHelper 类上实现
public void forceSignOut()
if (mGoogleApiClient != null)
mGoogleApiClient.disconnect();
最后在 BaseGameActivity 中:
protected void forceSignOut()
mHelper.forceSignOut();
别忘了实现你的 GameServiceInterface:
public void forceSignOut();
【讨论】:
以上是关于检测从 Google Play UI 退出的主要内容,如果未能解决你的问题,请参考以下文章