如何让Play游戏服务在启动时不自动登录?

Hải*_*ong 28 android google-play-services google-play-games

谷歌提供BaseGameUtils图书馆,并建议我们扩展它BaseGameActivity.但是,该课程使游戏在游戏开始时自动登录.如果玩家不想或不能连接到他的Google帐户,那么在游戏开始这可能非常耗时.

所以我不想要这个功能.相反,我想提供一个登录按钮.只有当他点击该按钮时才能连接播放器.从那时起,每次玩家开始游戏时,他都会自动连接到他的Google帐户,而无需点击任何按钮.我怎样才能做到这一点?

Hải*_*ong 44

好的,我已经弄清楚,默认情况下,最大自动登录时间是3,这意味着如果用户取消3次,那么应用程序将永远不会再次(除非您清除应用程序的数据)自动登录.它已存储在GameHelper.java

 // Should we start the flow to sign the user in automatically on startup? If so, up to
 // how many times in the life of the application?
 static final int DEFAULT_MAX_SIGN_IN_ATTEMPTS = 3;
 int mMaxAutoSignInAttempts = DEFAULT_MAX_SIGN_IN_ATTEMPTS;
Run Code Online (Sandbox Code Playgroud)

它还提供了设置此最大数量的功能

public void setMaxAutoSignInAttempts(int max) {
        mMaxAutoSignInAttempts = max;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您根本不想要任何自动登录尝试,只需调用此函数即可

如果您不想扩展BaseGameActivity,那就是这样

gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
gameHelper.enableDebugLog(true);
gameHelper.setup(this);
gameHelper.setMaxAutoSignInAttempts(0);
Run Code Online (Sandbox Code Playgroud)

或者,如果您扩展BaseGameActivity

getGameHelper().setMaxAutoSignInAttempts(0);
Run Code Online (Sandbox Code Playgroud)

  • 谁在地球上想要它3次?曾经足够,两次已经很烦人..如果我在某个应用程序上看到它3次,我会认为APP开发者是一个愚蠢的地狱......即使这不是他的设计.. (11认同)

osm*_*alp 10

GameHelper.java文件中有一个boolean属性mConnectOnStart,默认情况下它被设置为true.只需false改为:

boolean mConnectOnStart = false;
Run Code Online (Sandbox Code Playgroud)

此外,还提供了一种从类外部管理此属性的方法:

// Not recommended for general use. This method forces the "connect on start"
// flag to a given state. This may be useful when using GameHelper in a 
// non-standard sign-in flow.
public void setConnectOnStart(boolean connectOnStart) {
    debugLog("Forcing mConnectOnStart=" + connectOnStart);
    mConnectOnStart = connectOnStart;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用上述方法来自定义登录过程.就我而言,与你类似,我不想第一次自动连接.但如果用户之前登录过,我确实想要自动连接.为了实现这一点,我将类中的getGameHelper()方法更改为BaseGameActivity:

public GameHelper getGameHelper() {
    if (mHelper == null) {
        mHelper = new GameHelper(this, mRequestedClients);
        mHelper.enableDebugLog(mDebugLog);

        googlePlaySharedPref = getSharedPreferences("GOOGLE_PLAY",
                Context.MODE_PRIVATE);
        boolean wasSignedIn = googlePlaySharedPref.getBoolean("WAS_SIGNED_IN", false);
        mHelper.setConnectOnStart(wasSignedIn);
    }
    return mHelper;
}
Run Code Online (Sandbox Code Playgroud)

每一次,getGameHelper()方法是从所谓的onStart()BaseGameActivity.在上面的代码中,我刚刚添加了共享首选项,以便在用户之前登录时保留.并setConnectOnStart()根据该案例称为方法.

最后,"WAS_SIGNED_IN"在用户启动登录过程后,不要忘记将(或其他用不同名称定义的内容)共享首选项设置为true.您可以onSignInSucceeded()BaseGameActivity类中的方法中执行此操作.

希望这会帮助你.祝好运.