Android сканер отпечатка пальца

Отпечаток пальца на Андроид. Не так давно производители смартфонов ввели новый уровень безопасности использования Андроид устройств, добавив сканер отпечатка пальца. Это очень удобная штука, которая умеет блокировать экран и приложения, а для разблокировки нужно просто приложить палец к сканеру. Давайте разберемся, как настроить отпечаток пальца.

Как настроить отпечаток пальца на Андроид

На большинстве Android – смартфонов инструкция выглядит примерно одинаково:

  • Откройте настройки системы
  • Найдите пункт «Безопасность» (безопасность и отпечаток, блокировка и отпечаток, отпечаток или что-то подобное)
  • Для активации сканера отпечатков пальцев для экрана блокировки необходимо установить пароль, для этого выберите «Задать пароль»
  • Установите пин-код, графический ключ или пароль по вашему усмотрению
  • Перейдите в «Управление отпечатками пальцев»
  • Подтвердите установленный ранее пароль
  • Нажмите «Добавить отпечаток пальца»
  • Теперь нужно несколько раз прикоснутся к сканеру отпечатков одним пальцем, который будет использоваться для разблокировки (можно добавлять и другие отпечатки). Во время прикосновений немного меняйте положение пальца на сканере, чтобы он мог захватить все участки пальца, так распознавание будет выдавать намного меньше ошибок
  • Готово! Вы настроили сканер отпечатков пальцев!

С вопросом как настроить отпечаток пальца разобрались, теперь рассмотрим, как можно использовать эту штуку.

Как установить отпечаток пальца на Андроид приложение

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

  • Откройте настройки
  • Пролистайте вниз до пункта «Замок приложений»
  • Установите пароль или приложите палец к сканеру
  • Включите переключатель на нужных приложениях
  • Нажмите на иконку настроек и убедитесь, что «Разблокировка отпечатком» включена
  • Готово!

Вы узнали, как установить отпечаток пальца на любое приложение в MIUI 8.2. В других оболочках такие настройки «прячутся» в других местах.

Как настроить отпечаток пальца для подтверждения платежей в Google Play

Подтверждение платежей отпечатком пальцев это очень удобно и при этом очень безопасно, так как никто кроме вас не сможет сделать покупку.

  • В телефоне должен быть сохранен хотя бы один отпечаток
  • Откройте Google Play
  • Перейдите в настройки
  • Поставьте галочку на «Аутентификация по отпечатку пальца»
  • Включите обязательную аутентификацию для всех покупок

Готово! Теперь при совершении покупок ваш смартфон будет запрашивать отпечаток пальца!

Еще несколько плюсов сканера отпечатков

Как ни странно, но сканер можно использовать не только в целях безопасности, но и для удобства использования. Рассмотрим несколько интересных вариантов использования сканера.

Кнопка для камеры

На смартфонах с дактилоскопическим сканером по умолчанию включена функция съемки при прикосновении к нему. Это очень удобно для селфи съемки, особенно если сканер расположен на задней панели смартфона.

Выключатель будильника

Да, будильник можно выключить просто прикоснувшись к сканеру на несколько секунд, очень удобно. Если вы используете сторонний будильник – можете включить или отключить эту функцию в настройках.

Дополнительная кнопка

На некоторых смартфонах сканер отпечатков можно использовать как кнопку «Назад» и «Домой», прикоснувшись к сканеру на 1 или на несколько секунд соответственно.

Читайте также:  Два источника имеют одинаковые эдс и токи

Ответ на вызов

Когда вам звонят можно не водить пальцем по экрану, а просто прикоснуться к сканеру и он подтвердит ответ на звонок.

Как видите, блокировка отпечатком пальца это еще не всё, что может сканер на Android-устройстве.

Оглавление

Вступление

реклама

Правда, на данный момент новая возможность поддерживается «из коробки» лишь одним гаджетом. Как же быть пользователям других устройств? Ведь опция программная и ее многие хотели бы видеть в своих смартфонах. Что ж, пока Google жадничает, сторонние разработчики не дремлют. Они уже попробовали перенести часть функций на привычный сканер отпечатков, создав несколько интересных приложений.

Участниками обзора стали Fingerprint Quick Action, Fingerprint Gestures и Fingerprint Scanner Tools – самые передовые и, к сожалению, единственные приложения для использования жестов сканера отпечатков пальцев. На примере данной тройки мы выясним, что из этого вышло и как они работают.

В качестве тестового оборудования использовалось следующее устройство:

  • Смартфон Xiaomi Redmi Note 3 Pro (OC Android 7.1, Resurrection Remix 5.8.1, процессор Snapdragon 650 64 бит, 6 х 1800 МГц, видеосопроцессор Adreno 510, 2 Гбайта ОЗУ).

реклама

Fingerprint Quick Action

Знакомство

Для разминки и понимания задумки жестов сканера отпечатков пальцев мы взглянем на достаточно простое приложение под названием Fingerprint Quick Action.

Разработчик постарался перенести все функциональные возможности из Google Pixel и при этом внести кое-что свое в приложение, сделав его понятным для обывателей.

Fingerprint Quick Action поддерживает следующие функции:

  • Сон;
  • Возврат;
  • Дом;
  • Показать последние приложения;
  • Показать меню питания;
  • Переключение разделения экрана;
  • Панель уведомлений;
  • Панель уведомлений с переключателями;
  • Развернуть быстрые настройки;
  • Запуск приложения;
  • Создание скриншота.

Первый взгляд

Первый запуск Fingerprint Quick Action не сопровождается фанфарами, торжественными надписями и логотипами, нас просто «забрасывают» в недра программы и оставляют наедине.

Прямо на главном и единственном экране собраны все функции и настройки, для доступа к ним необходимо активировать программу. Для ее работы нам не нужны Root-права и какие-либо «костыли», все работает сразу после установки из Google Play.

В Fingerprint Quick Action мы можем настроить определенные действия на одиночное нажатие на сканер отпечатков пальцев, на двойное нажатие и «быстрый свайп». Увы, две последние функции работают не идеально.

реклама

Мы можем перенести на сканер управление системными клавишами, открытие разнообразных системных меню, опций, запуск того же фонарика и прочих приложений. Это достаточно удобно, например, в моем случае я установил «сон» аппарата на одиночное нажатие. В случае 5.5-дюймового устройства нам не придется тянуться к клавише включения/выключения экрана. При этом в удобстве использования или в минимализме я нисколько не потерял.

«Быстрый свайп» – удобная возможность, но здесь она работает не очень хорошо. А вот опция с двойным нажатием меня реально разочаровала, так как из-за конструктивных особенностей устройства (а точнее расположения сканера отпечатков пальцев на задней панели) я не могу очень быстро нажимать на клавиши, в то время как максимальная задержка может составлять до 750 миллисекунд. Если объективно, этого времени мало для совершения подобной операции.

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

Настройки

реклама

В данном случае мы сможем отдать фоновой службе Fingerprint Quick Action приоритет, выбрать метод засыпания устройства, автоматическую работу приложения в фоне и «черный список» программ, которые могут закрываться, чтобы не конфликтовать с приложением.

Тестирование

Для работы Fingerprint Quick Action нам потребуется самый простейший смартфон с OC Android 6.0 и новее. Кроме того, необходимо выделить программе до 5 Мбайт встроенной памяти и около 60-70 Мбайт ОЗУ в режиме работы.

Читайте также:  Зайти в яндекс алису
Версия приложения 0.11.2
Размер дистрибутива 1.06 Мбайт
Размер приложения в установленном виде 3.87 Мбайта
Потребление ОЗУ 60-70 Мбайт

реклама

Единственная проблема – это «потеря сознания» устройства с рекомендуемым режимом сна, который поддерживает разблокировку сканером. Однако с данным режимом бывают проблемы – аппарат не всегда просыпается. Для этого рекомендуется использовать сторонние алгоритмы, в том числе и с задействованием Root-прав, хотя все это индивидуально.

Выводы

Fingerprint Quick Action – простая и в то же время удобная, функциональная программа, добавляющая дактилоскопическому сенсору новые возможности. Она качественно сделана, потребляет минимум ресурсов, содержит рекламу в меню и при этом абсолютно бесплатна.

Оценка приложения: 8 по десятибалльной шкале.

Привет, Хабр! Прошло достаточно много времени, как появился Fingerprint API для Android, в сети много разрозненных сэмплов кода по его внедрению и использованию, но на Хабре по какой-то причине эту тему обходили стороной. На мой взгляд, настало время исправить это недоразумение. Всех заинтересовавшихся прошу под кат.

Кратчайший ликбез

Итак, что же представляет собой Fingerprint API? API позволяет пользователю аутентифицироваться посредством своего отпечатка, очевидно. Для работы с сенсором API предлагает нам FingerprintManager, достаточно простой в освоении.

Как его использовать? А вот это уже интереснее. Практически везде, где требуется аутентификация по паролю, можно прикрутить аутентификацию по отпечатку. Представьте себе приложение, состоящее из LoginActivity и MainActivity. При запуске мы попадаем на экран логина, вводим пин-код, проходим к данным. Но мы хотим заменить вход по пин-коду на вход по отпечатку. К слову, полностью заменить не получится, мы можем лишь избавить пользователя от ручного ввода пин-кода, подставляя ранее сохраненный пин-код (имеется ввиду клиент-серверное приложение, в котором нужно отправить пароль серверу).

Где сенсор?

Чтобы начать получать профит от нового API, первым делом нужно добавить permission в манифесте:

Само собой, использовать Fingerprint API можно только на устройствах, его поддерживающих: соответственно, это устройства Android 6+ с сенсором.

Совместимость можно легко проверить с помощью метода:

FingerprintManagerCompat — это удобная обертка для обычного FingerprintManager’а, которая упрощает проверку устройства на совместимость, инкапсулируя в себе проверку версии API. В данном случае, isHardwareDetected() вернет false, если API ниже 23.

Дальше, нам нужно понять, готов ли сенсор к использованию. Для этого определим enum состояний:

И воспользуемся методом:

Код достаточно тривиальный. Небольшое недопонимание может вызвать момент, когда мы проверяем заблокировано ли устройство. Нам нужна эта проверка, так как, хоть Android и не позволяет добавлять отпечатки в незащищенное устройство, некоторые производители это обходят, поэтому подстраховаться не помешает.

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

Подготовка

Итак, не зацикливаясь на проверке пин-кода на валидность, прикинем следующую упрощенную логику действий:

  • Пользователь вводит пин-код, если SensorState.READY, то мы сохраняем пин-код, запускаем MainActivity.
  • Рестартим приложение, если SensorState.READY, то считываем отпечаток, достаем пин-код, имитируем его ввод, запускаем MainActivity.

Схема была бы достаточно простой, если бы не одно но: Гугл настойчиво рекомендует не хранить приватные данные пользователя в открытом виде. Поэтому нам нужен механизм шифровки и расшифровки для, соответственно, сохранения и использования. Займемся этим.

Что нам нужно для шифровки и расшифровки:

  1. Защищенное хранилище для ключей.
  2. Криптографический ключ.
  3. Шифровальщик

Хранилище

Для работы с отпечатками система предоставляет нам свой кейстор — “AndroidKeyStore” и гарантирует защиту от несанкционированного доступа. Воспользуемся им:

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

Читайте также:  Samsung exynos 7 octa 7580

На выбор у нас два варианта ключей: симметричный ключ и пара из публичного и приватного ключа. Из соображений UX мы воспользуемся парой. Это позволит нам отделить ввод отпечатка от шифрования пин-кода.

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

При инициализации мы указываем, в какой кейстор пойдут сгенерированные ключи и для какого алгоритма предназначен этот ключ.

Сама же генерация происходит следующим образом:

Здесь следует обратить внимание на два места:

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

Проверять наличие ключа будем следующим образом:

Шифровальщик

Шифровкой и дешифровкой в Java занимается объект Cipher.

Адовая мешанина в аргументе — это строка трансформации, которая включает в себя алгоритм, режим смешивания и дополнение.

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

где initDecodeCipher() и initEncodeCiper() следующие:

Нетрудно заметить, что зашифровывающий Cipher несколько сложнее инициализировать. Это косяк самого Гугла, суть которого в том, что публичный ключ требует подтверждения пользователя. Мы обходим это требование с помощью слепка ключа (костыль, ага).

Момент с KeyPermanentlyInvalidatedException — если по какой-то причине ключ нельзя использовать, выстреливает это исключение. Возможные причины — добавление нового отпечатка к существующему, смена или полное удаление блокировки. Тогда ключ более не имеет смысла хранить, и мы его удаляем.

Метод, который собирает всю цепочку подготовки:

Шифровка и расшифровка

Опишем метод, который зашифровывает строку аргумент:

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

Для расшифровки же используем следующий метод:

Опа, на вход он получает не только зашифрованную строку, но и объект Cipher. Откуда он там взялся, станет ясно позднее.

Не тот палец

Для того чтобы наконец использовать сенсор, нужно воспользоваться методом FingerprintManagerCompat:

Хендлер и флаги нам сейчас не нужны, сигнал используется, чтобы отменить режим считывания отпечатков (при сворачивании приложения, например), коллбеки возвращают результат конкретного считывания, а вот над криптообъектом остановимся поподробнее.

CryptoObject в данном случае используется как обертка для Cipher’a. Чтобы его получить, используем метод:

Как видно из кода, криптообъект создается из расшифровывающего Cipher. Если этот Cipher прямо сейчас отправить в метод decode(), то вылетит исключение, оповещающее о том, что мы пытаемся использовать ключ без подтверждения.

Строго говоря, мы создаем криптообъект и отправляем его на вход в authenticate() как раз для получения этого самого подтверждения.

Если getCryptoObject() вернул null, то это значит, что при инициализации Chiper‘а произошел KeyPermanentlyInvalidatedException. Тут уже ничего не поделаешь, кроме как дать пользователю знать, что вход по отпечатку недоступен и ему придется заново ввести пин-код.

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

В случае успешного распознавания мы получаем AuthenticationResult, из которого можем достать объект Cipher c уже подтвержденным ключом:

Теперь можно с чистой совестью отправить его на вход в decode(), получить пин-код, сымитировать его ввод и показать пользователю его данные.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector