2013-08-16 29 views
2

我在我的游戏中集成了Google游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置退出。如何检查用户是否从游戏服务默认视图中签出?

如何检查用户是否实际登录? getGamesClient.isConnected()仍然成立,尽管用户从谷歌视图退出。

如果我点击退出按钮(这是仍然存在,GamesClient的因为...仍然连接),我得到一个抛出:SecurityException:

11月8日至16日:01:21.262 14288-14288 /? E/AndroidRuntime:致命异常:主要在android.os.Parcel.readException(Parcel.java:1425) 在android google.android.gms.internal.bm $ a $ aa(未知来源) at com.google.android.gms.internal.bj.signOut(未知来源) at com.google.android.gms.game.games.GamesClient。 signOut(Unknown Source)

目前,我正在检查ActivityForResult响应代码并断开GamesClient,如果它处于不一致的状态,但我不喜欢这种方法。

回答

19

尝试处理onActivityResult:

public boolean onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == RC_YOUR_UNIQUE_ID 
      && resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) { 
     mHelper.disconnect(); 
     // update your logic here (show login btn, hide logout btn).    
    } else { 
     mHelper.onActivityResult(requestCode, resultCode, data); 
    } 
    return false; 
} 

RC_YOUR_UNIQUE_ID是你用来显示排行榜和成就活动ID。

+1

这应该是被接受的答案。 – nhaarman

+0

谢谢,节省了我很多时间。 – QuantumKarl

+0

这应该更新为'mHelper.disconnect()'。感谢这个答案,帮了我很多! –

0

我认为你需要的是:isSignedIn(); 像这样:

public boolean getSignedIn() { 
    return isSignedIn(); 
} 

这是,如果用户登录或不将返回一个true或false。 GameHelper.java中的方法:

/** Returns whether or not the user is signed in. */ 
public boolean isSignedIn() { 
    return mState == STATE_CONNECTED; 
} 

希望它有帮助。

+0

到底问题是更新UI,我(或者说GameHelper)设置mState,例如在onStop()或signOut()中。但是,如果用户从谷歌提供的排行榜活动设置中注销,则不会发生类似signOut()的情况,因此,mState变量不会更改,甚至会给出错误的状态,因为它表示我已登录但我不是。 – trapzerapzerix

0

在我的情况下,我正在做如下。在MainActivity ovveride onActivityResult()RC_UNUSED是您致电LeaderboardsAchievementsSettings从Google Play服务应用中执行的活动时的requestCode

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
if (requestCode == RC_UNUSED 
&& resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) { 
     signOut(); 
    } 

    Log.i("test", "On Activity result called"); 
} 

撰写您signOut()方法如下

public void signOut() { 
    try { 
     Games.signOut(mGoogleApiClient); 
    }catch (SecurityException se){ 
     Log.i("test", "mGoogleApiClient status was disconnected when callin signOut status. message = " + se.getMessage()); 
    } 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
    // update your UI logic here (show login btn, hide logout btn). 
} 

不要忘记对signOut()

相关问题