我的游戏目前正在使用菜单中的登录和注销按钮,以便使用Google Play排行榜/成就。不幸的是,用户也可以从Google Play用户界面退出,但GameHelper.isSignedIn()在通过Google的用户界面执行此操作时仍然会返回true。当用户在用户以这种方式注销后尝试检查排行榜或成就时,游戏崩溃。
有没有人知道检查用户是否通过用户界面注销的更新方式?我说更新了,因为我在stackoverflow中看到了一些不起作用的线程。
答案 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();