2

我最近将新的 play games api 集成到我的应用程序 WatchStop(下面的链接)中,我很难管理退出过程。

如果用户从排行榜或成就 UI(Google 的 UI)中退出,它不会在本地退出。调用时,GoogleApiClient 仍将报告为已连接mGoogleApi.isConnected()。此外,两者onConnectionFailed()onActivityResult()没有被调用,所以我无法知道他们是否已经退出。

我已经看到有些人onActivityResult()在以前版本的 API 中取得了成功,但没有找到任何关于新 API 的过程的信息,除了来自 Google 的信息:

实现 onActivityResult() 来处理连接解析的结果:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == RC_SIGN_IN) { mSignInClicked = false; mResolvingConnectionFailure = false; if (resultCode == RESULT_OK) { mGoogleApiClient.connect(); } else { // Bring up an error dialog to alert the user that sign-in // failed. The R.string.signin_failure should reference an error // string in your strings.xml file that tells the user they // could not be signed in, such as "Unable to sign in." BaseGameUtils.showActivityResultError(this, requestCode, resultCode, R.string.signin_failure); } } }

我以这种方式实现它以尝试收听注销:

@Override public void onActivityResult(int requestCode, int responseCode, Intent intent) { super.onActivityResult(requestCode, responseCode, intent); Toast.makeText(getApplicationContext(), CLASS_NAME + ".onActivityResult() - RESPONSE CODE: " + responseCode + ", REQUEST_CODE: " + requestCode, Toast.LENGTH_LONG).show(); if (requestCode == RC_SIGN_IN && responseCode == RESULT_OK) { mResolvingConnectionFailure = false; if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } } if (responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED && (requestCode == REQUEST_LEADERBOARDS || requestCode == REQUEST_ACHIEVEMENTS)) { mGoogleApiClient.disconnect(); signOutLocal(); } }

上面代码中的 toast 从未显示,向我表明该方法从未被调用。BaseGameActivity我从extends (我强制extends)调用它的Activity AppCompatActivity。我什至尝试覆盖 BaseGameActivityonActivityResult()以静态调用我的活动中的那个但无济于事(可能是因为它本身没有被称为 idk)。

我可以做些什么来确保如果玩家从 Google 用户界面退出,他们也会在本地退出?如果他们单击“查看排行榜”或“查看成就”而不修复此问题,它们将崩溃,因为在本地,api 仍然认为它们已连接。

4

1 回答 1

0

事实证明我上面的代码运行良好,我检查了错误的构建。对于那些感兴趣的人,您只需要寻找

responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED

onActivityResult()

并且您可以知道您不再连接,因此您应该调用您的注销方法。请参阅上面的片段。

于 2015-07-14T22:17:47.620 回答