Как узнать, авторизовано ли приложение пользователем для использования игровых сервисов Google Play

Я использую GPGS в своем приложении для достижений. Я хотел бы подключиться к GPGS при запуске, чтобы я мог загружать и устанавливать пользовательские достижения. Но я хочу подключиться, только если пользователь ранее подключился к нему, нажав кнопку подключения в приложении.

Сценарий 1:

- User opens app
- App does not connect to GPGS

Сценарий использования 2:

- User opens app
- Clicks button to connect to GPGS
- Closes app

days later
- User opens app
- App connects to GPGS

Раньше я сохранял логический флаг в общих настройках, чтобы знать, авторизовано ли приложение. Проблема в том, что у меня нет возможности узнать, когда пользователь выходит из системы достижений или отключает приложение в настройках Google устройств.

То, что я хотел бы сделать, это что-то вроде

if(mGoogleApiClient.isAutorized(){
    mGoogleApiClient.connect();
}

Любые идеи, как я могу выяснить, авторизовано ли приложение?


person SimonSays    schedule 10.11.2014    source источник


Ответы (1)


Когда вы вызываете mGoogleApiClient.connect(), это не видно пользователю, если вход в систему не был успешным (и появляется баннер с изображением их профиля).

Вы должны специально вызвать result.startResolutionForResult() с result из onConnectionFailed, чтобы запустить видимый пользователю процесс входа в систему. Пока вы не вызываете это, пока пользователь не нажмет кнопку входа в систему, вы получите желаемое поведение.

Обратите внимание: если вы используете классы GameHelper/BaseGameActivity, вам может потребоваться отключить поведение по умолчанию для автоматический вход в систему и вызов beginUserInitiatedSignIn() (который вызывает указанный выше startResolutionForResult() за вас) только тогда, когда пользователь специально нажимает кнопку входа.

В FAQ говорится:

[4] Почему GameHelper/BaseGameActivity пытается выполнить вход при запуске приложения?

По умолчанию BaseGameActivity и GameHelper показывают пользователю процесс входа (диалоговые окна согласия и т. д.) сразу после запуска приложения. Естественно, как только пользователь войдет в систему в первый раз, он больше не увидит поток согласия, поэтому это будет беспроблемный опыт. Важно, чтобы пользователь выполнил вход как можно раньше, чтобы ваше приложение могло сразу же воспользоваться преимуществами Google Play Games API (например, сохранить прогресс пользователя с помощью сохранения в облаке, разблокировать достижения и т. д.). Если пользователь отменит процесс входа, BaseGameAcitivity/GameHelper запомнит эту отмену. Если общее количество отмен достигает заданного максимума (по умолчанию 3), пользователю больше не будет предлагаться войти в систему при запуске приложения. В этом случае они все равно смогут войти в систему, нажав кнопку «Войти» в вашем приложении, если вы ее предоставите.

[5] Мне не нравится новая функция «автоматического входа» в GameHelper. Как я могу отключить его?

Чтобы отключить эту функцию и вернуться к старому поведению, вы можете отредактировать GameHelper.java и установить для константы DEFAULT_MAX_SIGN_IN_ATTEMPTS значение 0 или вызвать GameHelper.setMaxAutoSignInAttempts(0) во время выполнения перед вызовом GameHelper.setup() (или, соответственно, из вашего Метод onCreate активности).

person ianhanniballake    schedule 11.11.2014
comment
Вы абсолютно правы. Как я мог этого не видеть :-) - person SimonSays; 11.11.2014
comment
@ianhanniballake - как это можно использовать, чтобы определить, вышел ли пользователь из приложения / отключил его от «Настройки Google», как указано в исходном вопросе? Возможно, вы могли бы взглянуть на мой вопрос здесь: stackoverflow.com/questions/33127858/. Спасибо - person Zippy; 14.10.2015