Как использовать биометрию в мобильном приложении 1С и управлять системными кнопками на Android

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка мобильных приложений на платформе 1С для терминалов сбора данных (ТСД) часто ставит перед программистом специфические задачи, такие как аутентификация пользователя по отпечатку пальца или ограничение доступа к системным функциям Android. В этой статье мы подробно разберем, как работает встроенный механизм биометрии, почему нельзя получить «отпечаток» напрямую и какими способами можно скрыть системную панель навигации.

Понимание работы биометрии в 1С: Метод НачатьПолучениеДанных

Начнем с анализа самого частого заблуждения: многие разработчики ожидают, что метод НачатьПолучениеДанных (BeginGetData) вернет уникальный идентификатор пальца или его хэш-сумму, которую можно сохранить в базе данных. Однако, проанализировав архитектуру мобильных ОС (Android и iOS), мы увидим, что прямой доступ к биометрическим данным закрыт по соображениям безопасности.

Рассмотрим реальную механику работы:

Биометрия в 1С тесно связана с объектом БезопасноеХранилищеДанных. Суть метода заключается не в «считывании» пальца, а в «разблокировке» доступа к секрету, который вы заранее положили в хранилище. Алгоритм действий выглядит следующим образом:

  1. Мы создаем некий секрет (например, токен авторизации или пароль пользователя) и помещаем его в БезопасноеХранилищеДанных, устанавливая флаг требования биометрии при чтении.
  2. Когда нам нужно авторизовать пользователя, мы вызываем метод НачатьПолучениеДанных.
  3. Операционная система (Android) перехватывает управление и выводит стандартное системное окно: «Приложите палец».
  4. Если палец распознан, ОС расшифровывает данные из защищенной области памяти телефона и передает их обратно в приложение 1С.
  5. Если палец не подошел или пользователь нажал «Отмена», 1С получает ошибку доступа.

Проанализируем пример того, как это выглядит в коде. Поскольку метод асинхронный, нам обязательно потребуется ОписаниеОповещения.


// Подготовим оповещение для обработки результата
Оповещение = Новый ОписаниеОповещения("ПослеПолученияБиометрии", ЭтотОбъект);

// Пытаемся получить данные из хранилища (ключ "UserSecret")
// Сама система запросит отпечаток у пользователя
ДанныеБиометрии.НачатьПолучениеДанных(Оповещение, "UserSecret");

Проблема идентификации разных пользователей на одном устройстве

Выясним важную деталь: можно ли по отпечатку понять, КТО именно приложил палец? К сожалению, стандартными средствами Android и мобильной платформы 1С это сделать невозможно. Система выдает бинарный ответ: «это один из разрешенных владельцев устройства» или «это посторонний».

Если на одном ТСД работают три кладовщика и все они добавили свои пальцы в настройки Android, то при вызове биометрии в 1С любой из их пальцев успешно «откроет» секретный ключ. Поэтому биометрию в 1С стоит использовать как второй фактор защиты или как замену ввода пароля для текущего владельца устройства, но не как средство первичной идентификации разных лиц.

Хитрость для реализации авторизации: «Фиктивный секрет»

Если нам нужно просто проверить сам факт наличия прав доступа, мы можем применить следующий прием: запишем в безопасное хранилище любую константу (например, строку "Authorized") с требованием отпечатка. При входе в приложение вызываем чтение этой строки. Если метод вернул "Authorized" — значит, проверку прошел доверенный пользователь. Если возникло исключение — доступ запрещен.

Как скрыть системные кнопки «Назад», «Домой» и «Меню» на Android

Второй важный вопрос обсуждения касается интерфейса ТСД. Часто требуется ограничить пользователя рамками приложения 1С, чтобы он случайно не вышел на рабочий стол или не закрыл форму кнопкой «Назад».

1. Использование программных свойств формы

В современных версиях платформы (8.3.18+) появилось больше возможностей для управления окнами. Разберем свойство РежимПолноэкранногоОтображения. Если установить его в значение «Истина» в свойствах мобильного клиента или конфигурации, приложение будет стремиться занять весь экран, скрывая статус-бар.

2. Обработка кнопки «Назад»

Чтобы системная кнопка Android «Назад» не приводила к нежелательным последствиям, необходимо использовать обработчик события формы ПриНажатииКнопкиНазад. Рассмотрим пример блокировки выхода:


&НаКлиенте
Процедура ПриНажатииКнопкиНазад(Отказ)
    // Отменяем стандартное действие ОС (закрытие формы)
    Отказ = Истина;
    
    // Вместо закрытия можно вывести свой диалог или просто проигнорировать нажатие
    ПоказатьПредупреждение(, "Для выхода из системы используйте кнопку 'Выход' в меню.");
КонецПроцедуры

3. Режим киоска (Kiosk Mode)

Если задача стоит радикально — полностью убрать нижнюю панель навигации (треугольник, круг, квадрат), — то одних средств 1С будет недостаточно. Для профессиональных ТСД (Zebra, Honeywell, Urovo) рекомендуется использовать специализированные утилиты «Launcher» (например, Enterprise Home Screen). Эти приложения позволяют жестко закрепить 1С на экране, блокируя любые попытки пользователя выйти в настройки Android или свернуть программу.

Использование внешних компонент для работы со специфическим железом

Если ваше ТСД оборудовано не стандартным емкостным сканером Android, а специализированным оптическим сканером отпечатков, то стандартный объект ДанныеБиометрии может с ним не заработать. В этом случае путь один — использование Внешних Компонент (ВК).

Разберем, почему это необходимо: производитель ТСД предоставляет SDK (библиотеку на Java/Kotlin), которая умеет работать напрямую с драйвером сканера. Чтобы «подружить» 1С с этим SDK, пишется прослойка (ВК), которая вызывает методы производителя и возвращает результат в 1С. Только через такие компоненты иногда удается получить сырые данные (raw data) отпечатка для сравнения их на сервере, хотя это требует серьезных навыков разработки на Android Native.

Подведем итог:

  1. Стандартная биометрия в 1С — это удобный способ авторизации (подтверждения личности), но не идентификации (поиска пользователя в базе).
  2. Метод НачатьПолучениеДанных работает асинхронно и требует предварительной записи данных в БезопасноеХранилищеДанных.
  3. Управление системными кнопками Android эффективно решается сочетанием настроек 1С (обработка кнопки «Назад») и системных средств ОС (Kiosk Mode).
← На главную