При разработке корпоративных решений на мобильной платформе 1С часто возникает задача упростить вход для пользователей, отказавшись от стандартного ввода логина и пароля. Естественное желание разработчика в этом случае — автоматически определить собственный номер телефона смартфона средствами мобильного приложения и привязать к нему рабочие заявки или профиль сотрудника. Рассмотрим подробнее, возможно ли это сделать на платформе 1С и какие альтернативные способы идентификации устройств существуют.
Проанализируем техническую сторону вопроса. В составе мобильной платформы 1С присутствует объект СредстваТелефонии, однако он предназначен исключительно для набора номеров, отправки сообщений, а также взаимодействия со списками вызовов и сообщений. Штатных свойств или функций для считывания собственного абонентского номера (MSISDN), IMEI или серийного номера SIM-карты в платформе не предусмотрено.
Даже при попытке реализовать чтение номера через механизм внешних компонент разработчик сталкивается с непреодолимыми системными ограничениями:
null в подавляющем большинстве случаев. Телефонный номер не хранится непосредственно в памяти SIM-карты (блок EF_MSISDN), а маршрутизируется оператором связи по внутреннему идентификатору чипа. Кроме того, современные версии Android жестко ограничивают доступ к телефонным интерфейсам даже при наличии специальных разрешений, резервируя эти механизмы для системного ПО оператора.Таким образом, автоматически считать абонентский номер из мобильного приложения гарантированным способом невозможно. Выясним, какие архитектурные сценарии позволяют обойти эту проблему и обеспечить надежную привязку пользователя.
Если бизнес-процесс жестко требует привязки документов именно к номеру сотового телефона, разберем по шагам схему верификации через одноразовые пароли:
Также возможна обратная схема: приложение инициирует отправку сервисного SMS с мобильного устройства сотрудника на специализированный номер корпоративного модема или шлюза. Сервер фиксирует входящий номер отправителя и автоматически подтверждает сессию для связанного кода устройства.
Посмотрим на пример, когда явный номер телефона не требуется, а стоит лишь задача избавиться от логинов и паролей. В этом случае наиболее надежным подходом является связка сотрудника с уникальным идентификатором приложения.
Платформа 1С предоставляет системное свойство СистемнаяИнформация.ИдентификаторКлиента, возвращающее уникальный GUID конкретной установки мобильного приложения. Рассмотрим пример первичной инициализации:
// Пример получения уникального идентификатора мобильного клиента
ИдентификаторУстройства = СистемнаяИнформация.ИдентификаторКлиента;
// Формируем структуру для отправки на центральный сервер
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("ИдентификаторКлиента", Строка(ИдентификаторУстройства));
ПараметрыРегистрации.Вставить("КодАктивации", ВведенныйПользователемКод);
// Передаем параметры через веб-сервис или HTTP-сервис центральной базы
ОтветСервера = ОтправитьЗапросРегистрации(ПараметрыРегистрации);
При таком подходе администратор в центральной информационной базе заранее создает карточку сотрудника и выдает ему короткий одноразовый код активации. При первом входе сотрудник вводит этот код, приложение передает его вместе со свойством СистемнаяИнформация.ИдентификаторКлиента в центральную базу, где происходит постоянная связка устройства с пользователем. Все последующие запросы к центральной базе выполняются бесшовно, с передачей подтвержденного GUID устройства.
Важный момент: при полном удалении приложения или очистке его данных идентификатор клиента генерируется платформой заново, что потребует повторной процедуры привязки устройства администратором.
Для корпоративных приложений отличной альтернативой ручному вводу логинов является вход по QR-коду:
Этот сценарий полностью исключает ошибки ручного ввода и обеспечивает высокий уровень безопасности корпоративного контура без необходимости выяснять телефонный номер смартфона.