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

检测用户退出 Google Play 游戏登录

Google Play 游戏服务退出回调

如何从 Google Play 服务通知中检测意图

检测是不是从 Google Play 与 Amazon 与其他下载了 Android 应用程序

从 google play 游戏服务排行榜屏幕注销

Google Play 应用签名证书和上传证书都在 Google Play 控制台中创建了相同的 SHA1 密钥