从Google Play用户界面检测退出

时间:2014-10-11 17:58:27

标签: android google-play-games achievements

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

有没有人知道检查用户是否通过用户界面注销的更新方式?我说更新了,因为我在stackoverflow中看到了一些不起作用的线程。

2 个答案:

答案 0 :(得分: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();
    }
}
}

答案 1 :(得分:0)

我创建了一个名为登录Play游戏的成就,并尝试在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;
}

在Screen的resize事件中,我的登录按钮在哪里,我实现了这个代码:

@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();