【问题标题】:Detect Sign Out from Google Play UI检测从 Google Play UI 退出
【发布时间】:2014-12-06 16:40:51
【问题描述】:

我的游戏目前正在使用菜单中的登录和退出按钮,以便使用 Google Play 排行榜/成就。不幸的是,用户也可以从 Google Play UI 中退出,但当他们通过 Google 的 UI 执行此操作时,GameHelper.isSignedIn() 仍然返回 true。当用户以这种方式退出后尝试查看排行榜或成就时,游戏会崩溃。

有谁知道检查用户是否通过 UI 退出的更新方法?我说更新了,因为我在 stackoverflow 中看到了一些不起作用的线程。

【问题讨论】:

  • 查看我的answer,它仍然有效 - 我刚刚在最新版本的 Google Play 服务 (6.1.71 (1501030-038)) 上对其进行了测试。
  • 谢谢,我稍作改动并删除了 RequestCode if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) { gameHelper.disconnect(); } else { gameHelper.onActivityResult(requestCode, resultCode, data); }

标签: android google-play-games achievements


【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 2017-05-03
      • 2018-12-16
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多