3

リーダーボードや実績など、Google ゲーム サービスをゲームに統合しました。ユーザーがリーダーボードまたはアチーブメント アクティビティを開くと、右上隅の設定からサインアウトすることができます。

ユーザーが実際にサインインしているかどうかを確認するにはどうすればよいですか? ユーザーは Google ビューからログアウトしましたが、getGamesClient.isConnected() は依然として true です。

ログアウト ボタンをクリックすると (gamesClient がまだ接続されているため、まだそこにあります)、SecurityException が発生します。

08-16 11:01:21.262 14288-14288/? E/AndroidRuntime: FATAL EXCEPTION: main java.lang.SecurityException at android.os.Parcel.readException(Parcel.java:1425) at android.os.Parcel.readException(Parcel.java:1379) at com.google.android. gms.internal.bm$a$aa (提供元不明) com.google.android.gms.internal.bj.signOut (提供元不明) com.google.android.gms.games.GamesClient.signOut (提供元不明)

現時点では、ActivityForResult の応答コードを確認し、矛盾した状態であれば GamesClient を切断していますが、私はその方法が気に入りません。

4

3 に答える 3

0

私の場合は以下のようにしています。オヴェライドMainActivityonActivityResult()RC_UNUSEDopen を呼び出したrequestCodeときLeaderboardsAchievementsおよびSettingsGoogle Play サービス アプリからのアクティビティです。

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

最後にUIを更新することを忘れないでくださいsignOut()

于 2016-10-13T11:53:55.860 に答える