如何通过 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 检测退出?的主要内容,如果未能解决你的问题,请参考以下文章

使用 google play 游戏检索玩家排名

Google Play 排行榜 UI 颜色更改

Google Play 游戏 Android 排行榜意外响应代码 410

如何通过 LibGdx 使用 Google Play 游戏服务

写入 Google Play 排行榜 API 回调成功返回,但未记录分数

iOS Google Play Games SDK - 如何邀请好友加入社交圈?