Выход из экрана лидеров игрового сервиса google play
Когда доска лидеров отображается на экране, есть опция, называемая "настройка". Внутри этого есть опция "Signout". Когда я нажал кнопку "Выход", таблица лидеров закрыта,
Вопрос.
Если я проверил статус входа в систему, функция ниже всегда возвращает true. Означает, что mGoogleApiClient подключен. и поэтому, когда я пытался щелкнуть значок, который показывает таблицу лидеров, он всегда имеет responseCode RESULT_RECONNECT_REQUIRED.
Эта проблема исчезнет, если я перезагрузки моего приложения
public boolean isSignedIn() {
return mGoogleApiClient != null && mGoogleApiClient.isConnected();
}
Вопрос.
Как программа узнает, что пользователь вышел из системы на экране лидеров.
2 ответа:
Вы должны поймать signout в
onActivityResult
и вызватьGoogleApiClient.disconnect()
себя, так как соединение находится в несогласованном состоянии ( Источник).Итак, при открытии таблицы лидеров используется следующий код:
activity.startActivityForResult(Games.Leaderboards.getLeaderboardIntent(googleApiClient, leaderboardId), MY_CUSTOM_LEADERBOARD_RESULT_CODE);
Событие signout следует обрабатывать следующим образом:
public void onActivityResult(int requestCode, int responseCode, Intent intent) { boolean userLoggedOut = (responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) && (requestCode == MY_CUSTOM_LEADERBOARD_RESULT_CODE); if (userLoggedOut) { googleApiClient.disconnect(); } }
Вы должны обработать RESULT_RECONNECT_REQUIRED, вызвав reconnect().
Если возникла временная ошибка с подключением, это автоматически восстановит соединение с плеером. Если они действительно выполнили выход, onConnectionFailed () будет вызван, и вы можете сбросить пользовательский интерфейс/игру, чтобы быть подходящим для состояния не вошел в систему.
if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED) { mGoogleApiClient.reconnect(); }