Я рассматриваю IMEI как одну из немногих возможностей для монетизации моего скромного труда. Однозначно идентифицировав устройство, на котором исполняется полезная нагрузка, автором которой являюсь я, собственной персоной, имею право на "введите регистрационный ключ". Ссылку на шифровальщик строк, который я использую как кейген оставлю ниже.
В классическом приложении для андроид результатом работы этой процедуры будет IMEI. С одной оговоркой:
В файле манифеста сначала нужно задекларировать потребность в данных телефона. Пользователь будет уведомлен при установке приложения о том что оно собирается собирать такую информацию. И может отказать приложению в этом.
В самом простом случае для получения IMEI в мобильной платформе нужно написать нативное приложение с соответствующим функционалом, проинсталлировать его на устройство пользователя и запускать его в нужный момент из 1С с возвратом результата работы обратно. Более изящный способ - внешняя компонента для реализации такой, казалось бы, насущной потребности, не столь проста в исполнении по причине того факта, что она как то должна получить разрешение на сами возможности работы с телефонией. Манифест нативного мобильного приложения, встраиваемого во внешнюю компоненту не берётся в расчёт мобильной платформой. Не знаю по каким причинам, да это уже и не важно с приходом Android 10.
Если верить официальной документации от Google по разработке приложений для Android, начиная с 10 версии операционной системы разрешение типа "READ_PHONE_STATE" имеют право запрашивать только системные приложения. И все имеющиеся наработки в данном направлении становятся никому не нужны. Даже я сам на своём собственном телефоне в моих личных целях собственноручно написанным кодом IMEI больше никогда не получу. По крайней мере в Android 10 гарантированно нет.
В результате представляю внешнюю компоненту, которая возвращает в 1С не IMEI, но всё же очень длинный номер, который так же уникален, несменяем и легко доступен. Использую из него первые 15 знаков, и пока этого было достаточно для добрых дел.
Package.zip необходимо загрузить в макет внешней компоненты.
Использование в коде:
Procedure Demo ()
AttachAddIn ( "CommonTemplate.phone_id", "Sample", AddInType.Native );
Lib = New ( "AddIn.Sample.SimonsID" );
//Кириллица
uid = Lib.ПолучитьАйДи ();
//Латиница
uid = Lib.GetID ();
EndProcedure
Работа компоненты проверена на платформе 8.3.15.59.
И на некоторых телефонах от Samsung, Xiaomi, Motorola, Huawei.
Тестирование на ТСД от SUNMI на базе Android 9, к сожалению выявило невозможность применения данной компоненты. В итоге, малоизвестные китайские версии железа ( а может андроида на этом железе ) могут не давать никаких гарантий.