При работе с мобильными устройствами, лишенными предустановленных сервисов Google (GMS), пользователи нередко сталкиваются с проблемой: штатные функции 1С для работы с координатами возвращают пустые значения. Давайте разберем, почему это происходит и как мы можем заставить приложение работать корректно.
Когда мы вызываем стандартные методы платформы СредстваГеопозиционирования.ИспользованиеДанныхГеопозиционированияВключено() или пытаемся получить список провайдеров через СредстваГеопозиционирования.ПолучитьПровайдеров(), мы получаем Ложь или Неопределено. Это происходит потому, что мобильная платформа 1С на уровне ядра жестко привязана к API сервисов Google для обработки данных GPS.
На смартфонах HONOR и HUAWEI новых моделей, где вместо Google Mobile Services используются Huawei Mobile Services (HMS), эти системные вызовы не находят ответной реакции от ОС. В результате 1С просто не «видит» аппаратный модуль GPS, так как не имеет механизмов прямого доступа к нему без посредничества Google-библиотек.
Первый и самый доступный способ — создание «песочницы», внутри которой 1С будет «думать», что сервисы Google присутствуют. Для этого мы можем использовать специальные приложения-контейнеры, такие как GSpace или GBox.
СредстваГеопозиционирования.Если использование сторонних контейнеров неприемлемо для вашего бизнес-процесса, мы можем рассмотреть вариант разработки или подключения внешних компонентов. Поскольку платформа не обновляется для работы с HMS напрямую, опытные разработчики создают надстройки, позволяющие подменить стандартные вызовы 1С на прямые запросы к системным API устройства через механизмы нативного программирования (например, на Kotlin или Java).
Для этих целей существуют готовые наработки и библиотеки, которые позволяют получать геопозицию, минуя ограничения платформы. Интегрируя такие модули в конфигурацию, мы получаем возможность управлять геолокацией программно:
// Пример логики обращения к внешней компоненте для получения координат
КомпонентаГео = ПодключитьВнешнююКомпоненту("Name.Component");
Если КомпонентаГео <> Неопределено Тогда
Координаты = КомпонентаГео.ПолучитьТекущиеКоординаты();
КонецЕсли;
Помимо геолокации, пользователи часто сталкиваются с ошибкой сертификата при попытке обновления конфигурации через HTTPS. Это связано с тем, что в системе отсутствуют актуальные корневые сертификаты, которые в обычном Android подтягиваются через Google Play. В этом случае мы рекомендуем:
Анализируя ситуацию, мы приходим к выводу, что проблема носит системный характер. Использование мобильной 1С на устройствах без GMS требует либо создания виртуальной среды, либо глубокой доработки приложения с использованием внешних компонентов. Мы советуем всем разработчикам при работе с парком устройств на HMS учитывать эти ограничения еще на этапе проектирования архитектуры мобильного приложения, чтобы избежать сюрпризов в эксплуатации.