Как получить идентификатор мобильного устройства в 1С?

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

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

Стандартный способ: использование объекта СистемнаяИнформация

В платформе 1С предусмотрен встроенный механизм для получения уникального идентификатора клиента. Для этого используется свойство ИдентификаторКлиента объекта СистемнаяИнформация.

Разберем простой пример получения этого значения в коде:


СистемнаяИнформация = Новый СистемнаяИнформация;
Сообщить(СистемнаяИнформация.ИдентификаторКлиента);

Данный метод возвращает уникальный идентификатор (GUID), сформированный платформой. Посмотрим на особенности работы этого свойства:

  1. Стабильность в рамках установленного приложения: Идентификатор сохраняется при обычных перезапусках приложения.
  2. Сброс при переустановке: Если пользователь полностью удалит приложение, очистит данные приложения через настройки операционной системы или выполнит сброс базы, платформа сгенерирует новый GUID.

Сохранение идентификатора при первом запуске

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


&НаСервере
Процедура ПроверитьИдентификаторНаСервере()
    Если НЕ ЗначениеЗаполнено(Константы.СистемныйИдентификатор.Получить()) Тогда
        СИ = Новый СистемнаяИнформация;
        Константы.СистемныйИдентификатор.Установить(СИ.ИдентификаторКлиента);
        Сообщить("Установлен системный идентификатор");
    КонецЕсли;
КонецПроцедуры

Почему не удается получить IMEI напрямую из 1С?

Многие разработчики пытаются использовать IMEI или жесткие аппаратные идентификаторы оборудования. Однако штатный язык 1С не имеет прямых методов для считывания IMEI. Выясним основные причины и нюансы этого ограничения:

  1. Отсутствие IMEI на некоторых устройствах: Планшеты без GSM-модуля (Wi-Fi версии) не имеют IMEI-кода. В таких случаях вызов аппаратных функций возвращает пустую строку.
  2. Многосимочные аппараты: Устройства с двумя SIM-картами имеют два разных IMEI, что усложняет логику однозначной привязки.
  3. Ограничения операционных систем: В современных версиях Android и iOS прямое чтение аппаратных идентификаторов (IMEI, MAC-адрес) заблокировано политикой безопасности ОС для обычных приложений.

Альтернативные варианты привязки к устройству

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

1. Использование внешних компонент (Java/Kotlin)

Разработка внешней компоненты под мобильную платформу позволяет обращаться к системному API операционной системы Android и получать Settings.Secure.ANDROID_ID (SSAID). Этот код уникален для комбинации устройства и разработчика и сохраняется при переустановке приложения (до полного сброса устройства к заводским настройкам).

2. Вызов сторонних приложений через ЗапускПриложенияМобильногоУстройства

Использование штатного объекта 1С ЗапускПриложенияМобильногоУстройства позволяет передать Intent вспомогательному нативному приложению, которое считывает параметры ОС и возвращает результат обратно в 1С через массив ДополнительныеДанные.

3. Использование защищенных хранилищ ОС (KeyStore / Keychain)

С помощью внешней компоненты генерируется уникальный GUID при первом запуске и сохраняется в системное защищенное хранилище (KeyStore в Android или Keychain в iOS). Данное значение не удаляется даже при полной очистке кэша или переустановке самого мобильного приложения 1С.

← На главную