如何通过 Google Play 排行榜 UI 检测退出?

Posted

技术标签:

【中文标题】如何通过 Google Play 排行榜 UI 检测退出?【英文标题】:How to detect sign out via the Google Play Leaderboards UI? 【发布时间】:2013-12-16 08:47:42 【问题描述】:

从您自己的 UI(例如主菜单上的按钮)中退出或断开 GamesClient 非常简单。

但是,用户也可以从 Google Play UI 中的成就和排行榜视图中退出游戏,这些视图由诸如 getAllLeaderboardsIntent() 之类的 Intent 显示。 (它有点隐蔽,但如果你点击右上角的菜单,它会让你退出。)

有一些很有前途的侦听器接口,例如 OnSignOutCompleteListener,但它们似乎不适用于通过 google UI 注销,只能通过您自己的 UI 调用 GamesClient.signOut()。

如何检测到用户已从排行榜或成就意图中退出?是否有可能对此进行回调?

我希望能够更新我的游戏内 UI 以反映登录状态。

【问题讨论】:

How can i check if user sign's out from games services default view? 的可能重复项 【参考方案1】:

很遗憾,GameHelper 没有检测到您何时退出 Google 玩游戏。

你需要做的是把它放在你的活动中的 onActivityResult() 方法中。

我在 res == RESULT_RECONNECT_REQUIRED 为真时尝试使用 aHelper.signOut() 时遇到崩溃错误。

相反,我创建了一个 resetAllValues() 方法,它将所有值重置为 GameHelper 中的默认值。

在我的 MainActivity.java 中

protected void onActivityResult(int req, int res, Intent data) 
    super.onActivityResult(req, res, data);

    if (res == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) 
        aHelper.resetAllValues();
     else 
        aHelper.onActivityResult(req, res, data);
    

我在 GameHelper.java 中的方法

public void resetAllValues()

    mProgressDialog = null;
    mAutoSignIn = true;
    mUserInitiatedSignIn = false;
    mConnectionResult = null;
    mSignInError = false;
    mExpectingActivityResult = false;
    mSignedIn = false;
    mDebugLog = false;

【讨论】:

【参考方案2】:

复制自:

How can i check if user sign's out from games services default view?

在我看来,没有优雅的解决方案。您可以检查 onActivityResult 中的 response_code 是否为 INCONSISTENT_STATE 并切断 GamesClient,但我不确定您是否可以通过任何其他方式进入不一致状态...

【讨论】:

以上是关于如何通过 Google Play 排行榜 UI 检测退出?的主要内容,如果未能解决你的问题,请参考以下文章