Выход из Android Smart Lock для паролей

В документации Google указано, что «когда пользователь выходит из системы, вызовите CredentialsApi.disableAutoSignIn(), чтобы предотвратить немедленный повторный вход пользователя (...)».

Вот что происходит:

  1. У пользователя сохранены только 1 учетные данные. Когда он входит в приложение, он автоматически входит в систему;
  2. Пользователь выходит из системы, и вызывается CredentialsApi.disableAutoSignIn();
  3. Теперь каждый раз, когда пользователь входит в приложение, вместо автоматического входа в систему ему предоставляется средство выбора, хотя у средства выбора есть только 1 вариант для единственного сохраненного удостоверения.

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

Это ожидаемое поведение? Я почти уверен, что когда я тестировал эту функцию в январе, все было не так. Теперь я запускаю эту функцию в производство, и если это ожидаемое поведение, возможно, мне нужно сохранить флаг в общих настройках для обнаружения выхода пользователя из системы.

Функция запроса учетных данных находится в основном действии приложения, и каждый раз, когда я захожу туда, появляется диалоговое окно выбора для запроса входа в систему.


person Rui    schedule 27.04.2016    source источник


Ответы (1)


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

Если вход в систему необязателен для вашего приложения, вот что мы видели в некоторых приложениях:

  • отслеживать, является ли это первым запуском на устройстве (например, в общих настройках), если это так, запускать вход автоматически и отображать средство выбора, позволяя пользователю войти в систему одним касанием, если автоматический вход отключен или у них несколько аккаунтов

  • при последующих запусках приложения вы все равно можете попытаться выполнить автоматический вход (например, после того, как пользователь зарегистрируется в Интернете или на другом устройстве, а затем откроет приложение), но не разрешайте результат, если это не первый запуск (т. е. не показывать сборщик, просто откажитесь от намерения для разрешения или оставьте его на потом)

  • если пользователь явным образом инициирует действие входа (т. е. нажимает кнопку входа), вы можете использовать намерение или снова вызвать API, чтобы помочь ему снова войти в свою учетную запись или переключиться между учетными записями.

Извините, для этого требуется немного состояния с вашей стороны; CredentialsApi.disableAutoSignIn() устанавливает состояние отключения входа, но не отслеживает состояние входа пользователя в приложение (которое зависит от логики разработчика приложения и должно управляться приложением).

Надеюсь, что это поможет / имеет смысл, не стесняйтесь оставлять комментарии. Посмотрим, сможем ли мы добавить некоторые рекомендации в документы для этого!

person Steven    schedule 22.05.2016
comment
Спасибо, Стивен. Да, аналогичный подход был реализован, когда состояние пользователя контролируется приложением: - В домашней активности всегда пытайтесь войти в систему пользователя, если пользователь ранее не вышел из системы вручную; - В действии входа в систему (отличном от домашнего действия) всегда пытайтесь войти в систему пользователя, даже если он ранее вручную вышел из системы. Вот и все. Я храню только логическое значение в SharedPrefereces, 'userHasSignedOut' для управления состоянием. - person Rui; 23.05.2016