3

我在我的游戏中集成了谷歌游戏服务,包括排行榜和成就。如果用户打开排行榜或成就活动,他可以从右上角的设置中退出。

如何检查用户是否实际登录?getGamesClient.isConnected() 仍然是 true,尽管用户从 google 视图中注销。

如果我单击注销按钮(它仍然存在,因为 gamesClient 仍然连接)我得到一个 SecurityException:

08-16 11:01:21.262 14288-14288/? E/AndroidRuntime:致命异常:com.google.android 的 android.os.Parcel.readException(Parcel.java:1379) 的 android.os.Parcel.readException(Parcel.java:1425) 的主要 java.lang.SecurityException。 gms.internal.bm$a$aa(Unknown Source) at com.google.android.gms.internal.bj.signOut(Unknown Source) at com.google.android.gms.games.GamesClient.signOut(Unknown Source)

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

4

3 回答 3

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。

于 2013-12-04T16:05:51.597 回答
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;
}

希望能帮助到你。

于 2013-09-05T16:09:11.503 回答
0

就我而言,我正在执行以下操作。在MainActivityovveride上onActivityResult()RC_UNUSED是您调用从 Google Play 服务应用程序requestCode打开Leaderboards和活动Achievements的时间。Settings

@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).
}

不要忘记在结束时更新您的 UIsignOut()

于 2016-10-13T11:53:55.860 回答