Разработка мобильных приложений на платформе 1С для терминалов сбора данных (ТСД) часто ставит перед программистом специфические задачи, такие как аутентификация пользователя по отпечатку пальца или ограничение доступа к системным функциям Android. В этой статье мы подробно разберем, как работает встроенный механизм биометрии, почему нельзя получить «отпечаток» напрямую и какими способами можно скрыть системную панель навигации.
Начнем с анализа самого частого заблуждения: многие разработчики ожидают, что метод НачатьПолучениеДанных (BeginGetData) вернет уникальный идентификатор пальца или его хэш-сумму, которую можно сохранить в базе данных. Однако, проанализировав архитектуру мобильных ОС (Android и iOS), мы увидим, что прямой доступ к биометрическим данным закрыт по соображениям безопасности.
Рассмотрим реальную механику работы:
Биометрия в 1С тесно связана с объектом БезопасноеХранилищеДанных. Суть метода заключается не в «считывании» пальца, а в «разблокировке» доступа к секрету, который вы заранее положили в хранилище. Алгоритм действий выглядит следующим образом:
БезопасноеХранилищеДанных, устанавливая флаг требования биометрии при чтении.НачатьПолучениеДанных.Проанализируем пример того, как это выглядит в коде. Поскольку метод асинхронный, нам обязательно потребуется ОписаниеОповещения.
// Подготовим оповещение для обработки результата
Оповещение = Новый ОписаниеОповещения("ПослеПолученияБиометрии", ЭтотОбъект);
// Пытаемся получить данные из хранилища (ключ "UserSecret")
// Сама система запросит отпечаток у пользователя
ДанныеБиометрии.НачатьПолучениеДанных(Оповещение, "UserSecret");
Выясним важную деталь: можно ли по отпечатку понять, КТО именно приложил палец? К сожалению, стандартными средствами Android и мобильной платформы 1С это сделать невозможно. Система выдает бинарный ответ: «это один из разрешенных владельцев устройства» или «это посторонний».
Если на одном ТСД работают три кладовщика и все они добавили свои пальцы в настройки Android, то при вызове биометрии в 1С любой из их пальцев успешно «откроет» секретный ключ. Поэтому биометрию в 1С стоит использовать как второй фактор защиты или как замену ввода пароля для текущего владельца устройства, но не как средство первичной идентификации разных лиц.
Если нам нужно просто проверить сам факт наличия прав доступа, мы можем применить следующий прием: запишем в безопасное хранилище любую константу (например, строку "Authorized") с требованием отпечатка. При входе в приложение вызываем чтение этой строки. Если метод вернул "Authorized" — значит, проверку прошел доверенный пользователь. Если возникло исключение — доступ запрещен.
Второй важный вопрос обсуждения касается интерфейса ТСД. Часто требуется ограничить пользователя рамками приложения 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.
Подведем итог:
НачатьПолучениеДанных работает асинхронно и требует предварительной записи данных в БезопасноеХранилищеДанных.