Добавляем Face и Touch ID в iOS приложение с помощью Swift

face и touch id ios swift

Сегодня мы научимся добавлять в iOS приложение Face и Touch ID с помощью языка программирования Swift. Сам процесс очень легкий, поэтому не думайте, что нам придется потратить много времени. При написании статьи использовался Xcode версии 12.1.

Подготовка

Для начала давайте создадим тестовый проект. Мы лично просто выбрали шаблон Single Page View (сейчас просто App) и установили такие настройки:

Стартовый проект для работы в Xcode

Поэтому в примере Face/Touch ID мы будем запускать из под класса UIViewController, фреймворка UIkit.

Добавляем Face и Touch ID в приложение

Для более удобной демонстрации мы создали в центре нашего тестового приложения label, у которого будем менять содержание в зависимости от результата прохождения Face/Touch ID. Вы же можете выводить print(“…”) или сделать также.

Связываем label и storyboard с помощью Xcode

Связываем label и storyboard с помощью Xcode.

Теперь нам нужно сделать несколько вещей:

1. Импортировать библиотеку от Apple – LocalAuthentication, с помощью которой у нас появится возможность обращаться к биометрическим функциям операционной системы iOS.

2. Создать функцию, которая будет запускать процесс авторизации по Face или Touch ID (устройство само будет решать что запускать).

3. Добавить в override функцию viewDidLoad() инициализацию нашей функции из пункта два.

Вот пример того, что должно получиться:

Пример кода на Swift с помощью которого подключаем Face и Touch ID

Чтобы все не переписывать вручную, возьмите готовый код с GitHub:

Давайте отметим пару важных вещей внутри функции indetifyYourself():

На 4 строчке мы создаем контекст, он обеспечивает взаимодействие между Вашим приложением и биометрическими функциями.

В 5 строке мы создаем переменную с типом NSError, которая опционально будет хранить ошибки. Сам тип NSError приходит из библиотеки LocalAuthentication, которая, в случае возникновения ошибок, вернет Enum соответствующий протоколу NSError.

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

Если возможность есть, в 10 строке запускаем процесс аутентификации, передавая в один из аргументов переменную reason, которая будет в себе хранить причину, по которой Вы запрашиваете биометрию (т.е это увидит пользователь).

Если авторизация прошла успешно, в 12 строчке сообщаем об этом пользователю через DispatchQueue.main.async. DispatchQueue.main.async – это метод, позволяющий работать с многопоточностью Вашего приложения, в данном случае он позволяет нам перейти к основному потоку и объявить пользователю об успешной авторизации. В документации Apple пишут, что обновление состояния метода evaluatePolicy вызывает изменения пользовательского интерфейса, поэтому нам нужно использовать DispatchQueue.main.async, чтобы перейти в основной поток.

Ну и последнее, что нам нужно сделать, это добавить в Info.plist текстовую строку, которая должна объяснять пользователю: зачем ему нужно использовать биометрию (без этого наш код не будет работать).

Поэтому переходим в Info.plist и добавляем новую строку:

Добавляем поддержку face и touch id в info.plist

Далее начинаем вбивать “Privacy – Face ID Usage Description”:

Ищем “Privacy - Face ID Usage Description”

Ну а причину себе сами придумайте:

вводим причину по котором мы запрашиваем авторизацию по биометрии

Теперь запускаем наше приложение в эмуляции и видим это:

результат без включения face и touch id в эмуляции

А все потому, что нам нужно включить поддержку данной функции в эмуляции:

готово face и touch id подключен

Enrolled значит, что Face и Touch ID “включены” в эмуляции. Non-matching Touch эмулирует ошибку – отпечаток или лицо не было считано. Matching Touch эмулирует успешное прохождение биометрии.

Вот и всё, правда было не сложно?

Пару советов

У Apple есть определенный свод правил хорошего тона, связанный с работой Face и Touch ID. Например, если после “неудачной” биометрической аутентификации Вы будете закрывать приложение, то такой функционал будет признан “не дружелюбным” для пользователя. Это значит, что Ваше приложение не пройдет ручную модерацию в App Store.

Если у пользователя нет возможности “перезапустить” биометрическую аутентификацию, то это тоже считается “не дружелюбным” интерфейсом. Поэтому рекомендуем сделать кнопку, по которой пользователь сам сможет вызывать данный функционал приложения.

Спасибо за внимание. Если вдруг что-то не получилось или в статье есть ошибка — смело оставляйте комментарии. В случае недопонимания мы постараемся помочь. А в случае с ошибкой модератор призовет программиста-автора и заставит исправить грязное недоразумение.

Рассказать друзьям: