В прошлом месяце я посетил встречу разработчиков iOS в Apple App Accelerator в Бангалоре, Индия. Там они обсудили многие функции iOS 11 и лучшие практики, которые нам необходимо реализовать в наших приложениях. Автозаполнение пароля было одной из таких функций. Здесь я объясню, что это такое и как это сделать.

Вы, возможно, видели компьютерные браузеры, такие как Chrome и Safari, предлагающие варианты паролей и автозаполнение паролей. Для меня это было настоящим спасением. Нам не нужно запоминать пароли для всех без исключения веб-сайтов в Интернете. Начиная с iOS 11 введено автозаполнение (смотреть видео WWDC). Любой элемент управления, который соответствует UITextInput протоколу, например UITextField, UITextView, может использовать эту функцию.

WWDC Video iOS 11: Представляем автозаполнение паролей для приложений

WWDC Video iOS 12: Автоматические надежные пароли и Автозаполнение кода безопасности.

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

Apple не имеет доступа к учетным данным, хранящимся в Связке ключей, поэтому конфиденциальность пользователей также сохраняется.

Как включить автозаполнение?

UITextFiled или UITextView подтверждает UITextInput протокол, как упоминалось ранее. UITextInput подтверждает UIKeyInput и UIKeyInput подтверждает UITextInputTraits протокол. UITextInputTraits имеет необязательную переменную с именем textContentType, которая предоставит клавиатуре дополнительную информацию о семантическом назначении текстового документа.

На данный момент до iOS 11 доступны следующие типы textContentTypes:

Последние два textContentTypes добавлены в iOS 11.ie; имя пользователя и пароль.

Просто установите textContentType для каждого textField.

usernameTF.textContentType = .username
passwordTF.textContentType = .password

Вы также можете установить это из раскадровки xcode. В инспекторе атрибутов в разделе UITextInputTraits:

Скомпилируйте и запустите приложение. Щелкните текстовое поле, и вы увидите клавиатуру со значком ключа сбоку. Эта панель инструментов называется панелью быстрого набора.

Нажмите на значок ключа, и он запросит аутентификацию. Если устройство имеет TouchID, оно запросит аутентификацию touchID.

Важно: при появлении запроса на экран аутентификации приложение переходит в неактивное состояние. Вы не должны закрывать логин или экран с текстовыми полями, когда приложение становится неактивным. Вот как это обычно работает.

После аутентификации ОС покажет список сохраненных паролей, из которого вы можете выбрать тот, который, по вашему мнению, подходит для приложения. Это автоматически заполнит все текстовые поля в соответствии с заданным textContentType.

Вот и все !

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

ДА!. Если вы пользователь iOS, возможно, вы видели это:

Итак, ранее ОС перечисляла все пароли, сохраненные в связке ключей, потому что не знала, что это приложение связано с доменом. Чтобы исправить это, мы должны включить связанные домены в настройках проекта xcode.

В настройках проекта Xcode → Возможности → Связанные домены добавьте домен вашего веб-сайта. Имя домена должно начинаться с ключевого слова webcredentials:, потому что мы используем службу веб-учетных данных, и это важно. Пример: webcredentials:facebook.com

Это будет выглядеть примерно так:

Это все, что нам нужно сделать, чтобы сообщить iOS, что приложение связано с веб-сайтом. Теперь нам нужно, чтобы веб-сайт согласился и указал на приложение, чтобы iOS могла установить двустороннее соединение.

Взгляните на мою другую статью Универсальные ссылки в iOS, в которой объясняется, как настроить файл AASA. Я не объясняю это здесь. Просто обратите внимание, что универсальные ссылки используют префикс applinks: вместо префикса webcredentials: для использования общих веб-учетных данных.

Содержимое файла AASA будет выглядеть так:

Как видите, это json-файл с массивом строк идентификаторов приложений для ключей «apps».

Идентификатор приложения - это в основном идентификатор группы, за которым следует символ точки (.), А затем идентификатор пакета приложений.

Этот файл json следует поместить в папку .well-known или в root папку вашего веб-сайта. Предпочтительна папка .well-known.

Примечание: при тестировании убедитесь, что вы используете настоящее устройство. Связанные домены доступны только для устройств.

Скомпилируйте и запустите приложение. Если все в порядке и общие веб-учетные данные содержат некоторые данные, относящиеся к вашему домену, они будут показаны над клавиатурой на панели быстрого набора, как показано выше.

Если он не отображается, это должно быть связано с тем, что ваш файл AASA недоступен для iOS. Посмотрите Видео WWDC, чтобы узнать больше.

Как добавить / удалить / изменить пароли?

Ну а в iOS 11 эта функция добавлена ​​в настройки устройства.

Как автозаполнить одноразовый код безопасности или OTP (iOS 12+)?

Это работает так же, как имя пользователя и пароль. Вам необходимо изменить textContentType текстового поля OTP на .oneTimeCode.

myOTPTextField.textContentType = .oneTimeCode

iOS поддерживает автозаполнение пароля для UITextField, UITextView и любого пользовательского представления, которое принимает протокол UITextInput.

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

Вот и все. !

Наслаждаться!!

Если вам понравилось читать этот пост, поделитесь и дайте несколько хлопков, чтобы другие могли его найти 👏👏👏👏👏 !!!!

Следите за мной на Medium за свежими статьями. Также свяжитесь со мной в LinkedIn.

Если у вас есть какие-либо комментарии, вопросы или рекомендации, не стесняйтесь размещать их в разделе комментариев ниже!