Разработка авторизации по биометрии (распознавание лица) в Android-приложении
— «Хочу вход по лицу, как в iPhone, но на Android». Знакомая фраза? Проблема в том, что экосистема Android фрагментирована: от флагманских устройств с инфракрасным сенсором до бюджетных моделей с обычной фронтальной камерой, где распознавание лица — лишь удобная замена swipe-жеста. Вместо единого стандарта — зоопарк реализаций: BiometricPrompt, собственная биометрия от Huawei (HMS), а иногда и вовсе отсутствие аппаратной поддержки.
Наш опыт: за 7 лет мы реализовали биометрическую аутентификацию на лице в 20+ проектах, включая банковские приложения и финтех-сервисы. Согласно BiometricPrompt API, использование Class 3 рекомендуется для финансовых операций. Реализация биометрической аутентификации Android с распознаванием лица требует учёта фрагментации.
Биометрия на Android делится на три класса защиты. Для финансовых операций подходит только Class 3 — аппаратная гарантия с верификацией в TEE. Если использовать Class 1 или 2, спуфинг-атаки с фотографией неизбежны.
Какие классы биометрии существуют и почему это важно?
Android разделяет биометрию на три класса. Вот их сравнение:
| Класс | Тип датчика | Уровень защиты | Допустимые сценарии |
|---|---|---|---|
| Class 1 (Convenience) | Фронтальная камера без IR | Низкий — возможен спуфинг по фото | Только разблокировка экрана |
| Class 2 (Weak) | Камера с улучшенным алгоритмом | Средний — частичная защита | Авторизация в нефинансовых приложениях |
| Class 3 (Strong) | IR-сенсор + TEE | Высокий — аппаратная гарантия | Платежи, банкинг, чувствительные данные |
BiometricPrompt при грамотном использовании в 3 раза безопаснее самописных решений, так как полагается на TEE. Вызов BiometricManager.canAuthenticate(BIOMETRIC_STRONG) вернёт корректный класс только при наличии аппаратного сенсора. Для финансовых приложений мы принимаем только Class 3.
Как реализовать BiometricPrompt для распознавания лица?
Код идентичен fingerprint-аутентификации — тот же BiometricPrompt, тот же CryptoObject. Разница в том, что система сама выбирает промпт в зависимости от доступной биометрии. Однако на некоторых прошивках (Honor, MIUI) промпт может показывать и лицо, и отпечаток одновременно — это штатное поведение.
val biometricManager = BiometricManager.from(context) val canAuthenticate = biometricManager.canAuthenticate( BiometricManager.Authenticators.BIOMETRIC_STRONG ) when (canAuthenticate) { BiometricManager.BIOMETRIC_SUCCESS -> launchBiometricPrompt() BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> showFallback() BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> showTemporaryError() BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> promptEnrollment() } promptEnrollment() открывает системные настройки через Intent(Settings.ACTION_BIOMETRIC_ENROLL) с extras. Важно: при повороте экрана или пересоздании Activity открытый промпт исчезает без callback. Решение — отслеживать флаг isAuthenticating в ViewModel и перезапускать промпт в onResume. Альтернатива — использовать rememberLauncherForActivityResult в Jetpack Compose.
Почему BiometricPrompt не работает на Huawei без GMS?
Huawei с HMS — отдельная головная боль. Стандартный BiometricPrompt отсутствует. Выход: подключаем com.huawei.hms:base и используем HuaweiBiometricManager через рефлексию или условную компиляцию под HMS flavor. Это добавляет 2–3 дня к срокам разработки.
Подробнее о Huawei HMS
На устройствах Huawei без GMS подключите `com.huawei.hms:base` и используйте `HuaweiBiometricManager` через рефлексию или условную компиляцию. Это добавляет 2–3 дня к срокам.Фрагментация устройств: что проверяем вручную
| Производитель | Особенность |
|---|---|
| Samsung (One UI 5+) | Face ID Strong на флагманах, Weak на бюджетных |
| Xiaomi / MIUI 14 | canAuthenticate может вернуть неверный класс — нужна дополнительная проверка |
| Pixel 6+ | Полноценный Strong через сенсор под экраном или фронтальный IR |
| Huawei (HMS) | Собственный FaceManager API при отсутствии GMS |
Безопасность: как защититься от спуфинга?
Распознавание по 2D-фото уязвимо к атаке фотографией. Мы никогда не используем Class 1 для операций с деньгами. Если клиент настаивает на поддержке старых бюджетных устройств — предлагаем двухфакторную схему: лицо (Class 1) + PIN. Это формально удовлетворяет требованиям 2FA без компрометации безопасности.
Что входит в работу
- Аудит целевого парка устройств и определение минимального класса биометрии
- Реализация KeyStore + CryptoObject flow с хранением ключей в TEE
- Обработка сценария Huawei HMS (при необходимости)
- Тестирование на физических устройствах — не менее 10 моделей разных вендоров
- Документация с перечислением ограничений по производителям
- Поддержка после релиза в течение 14 дней
Этапы и сроки
- Аналитика — определяем целевые устройства и класс биометрии (1–2 дня)
- Проектирование — схема аутентификации с fallback-методами (1 день)
- Реализация — интеграция BiometricPrompt, обработка ошибок, key management (3–5 дней)
- Тестирование — на реальных устройствах разных вендоров (2–3 дня) — экономия до 30% за счёт автоматизации
- Документирование — ограничения по моделям и рекомендации (1 день)
Сроки: от 5 до 10 рабочих дней в зависимости от необходимости поддержки HMS и объёма тестирования. Бюджет рассчитывается индивидуально.
Закажите разработку под ключ: мы гарантируем корректную работу на 95% популярных устройств и полное соответствие рекомендациям BiometricPrompt API по безопасности. Получите бесплатную консультацию по вашему проекту — свяжитесь с нами.







