Как обновлять собранное мобильное приложение 1С без использования Google Play?

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

При разработке и сопровождении корпоративных мобильных приложений на платформе 1С разработчики нередко сталкиваются с необходимостью доставлять обновления пользователям напрямую, минуя официальный каталог Google Play. Это актуально для закрытых корпоративных контуров, терминалов сбора данных (ТСД), распределенных филиалов или в случаях, когда регистрация и публикация приложения в публичных сервисах нецелесообразна или недоступна. Разберем по шагам, как выстроить надежный процесс доставки и запуска обновления собственного мобильного приложения средствами встроенного языка 1С и механизмов операционной системы Android.

Общая схема процесса обновления мобильного приложения

Когда мы отказываемся от внешнего магазина приложений, вся логика отслеживания релизов ложится на плечи самого приложения и корпоративного веб-сервера. Проанализируем типовой алгоритм автоматического обновления:

  1. Хранение дистрибутивов: на корпоративном веб-ресурсе или внутреннем веб-сервере публикуется новый файл сборки с расширением .apk. Рядом с ним обычно размещается легкий текстовый манифест (например, в формате JSON или XML), где указаны номер актуальной версии сборки, описание изменений и контрольная сумма.
  2. Проверка версии при запуске: мобильное приложение при старте (или по нажатию сервисной кнопки пользователем) обращается к серверу, считывает файл манифеста и сравнивает номер удаленной версии с текущим номером установленного приложения.
  3. Загрузка дистрибутива: если обнаружена новая версия, приложение предлагает пользователю выполнить обновление. После согласия файл .apk загружается во внутреннее файловое хранилище мобильного устройства.
  4. Передача управления установщику ОС: средствами платформы 1С вызывается системная команда запуска полученного APK-файла, после чего операционная система Android открывает штатный диалог подтверждения обновления.

Программная загрузка и запуск установки нового APK-файла

Рассмотрим подробнее реализацию этого механизма на встроенном языке 1С. Для взаимодействия с удаленным сервером задействуем объекты HTTPСоединение и HTTPЗапрос. Сохранение файла выполняем в каталог, доступный мобильному приложению, после чего инициируем установку с помощью метода ЗапуститьПриложение().

Обратим внимание на важный нюанс: метод ЗапуститьПриложение() выполняется в контексте мобильного клиента. Передача полного пути к загруженному APK-файлу активирует стандартное системное намерение (Intent) Android на установку пакета.

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


&НаКлиенте
Процедура ЗагрузитьИУстановитьОбновление(АдресСервера, ПутьКФайлуНаСервере)
    
    // Определяем путь для сохранения APK во временную папку приложения
    ИмяФайла = "update.apk";
    ПутьКЛокальномуФайлу = КаталогВременныхФайлов() + ИмяФайла;
    
    // Создаем защищенное HTTP-соединение
    Соединение = Новый HTTPСоединение(
        АдресСервера, 
        443, 
        , 
        , 
        , 
        30, 
        Новый ЗащищенноеСоединениеOpenSSL()
    );
    
    Запрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере);
    
    Попытка
        // Получаем файл и записываем его на устройство
        Ответ = Соединение.Получить(Запрос, ПутьКЛокальномуФайлу);
        
        Если Ответ.КодСостояния = 200 Тогда
            // Инициируем вызов системного установщика Android
            ЗапуститьПриложение(ПутьКЛокальномуФайлу);
        Иначе
            ВызватьИсключение "Ошибка загрузки: сервер вернул код " + Ответ.КодСостояния;
        КонецЕсли;
        
    Исключение
        ИнформацияОбОшибке = ОписаниеОшибки();
        Сообщить("Не удалось обновить приложение: " + ИнформацияОбОшибке);
    КонецПопытки;
    
КонецПроцедуры

После вызова ЗапуститьПриложение() операционная система перехватывает управление, проверяет содержимое пакета и предлагает пользователю подтвердить установку новой версии поверх существующей.

Критические требования и ограничения операционной системы Android

Для того чтобы обновление прошло гладко и без ошибок, необходимо строго соблюдать правила безопасности и архитектурные ограничения платформы Android. Выясним причину возможных сбоев и меры по их предотвращению:

  1. Идентичность цифровой подписи и идентификатора пакета: новый APK-файл обязан иметь точно такое же имя пакета (package name) и должен быть подписан тем же сертификатом разработчика (файлом хранилища ключей keystore), что и текущая установленная сборка. Если ключи подписи различаются, Android выдаст критическую ошибку INSTALL_FAILED_UPDATE_INCOMPATIBLE и заблокирует установку. В этом случае обновиться поверх невозможно: придется удалять старое приложение, что приведет к безвозвратной утере всех локальных данных и таблиц информационной базы 1С.
  2. Контроль номера сборки (versionCode): целочисленный идентификатор версии в манифесте сборщика мобильных приложений 1С для новой сборки обязан быть строго больше текущего. Попытка установить пакет с таким же или меньшим versionCode будет отклонена системой Android.
  3. Разрешение на установку сторонних пакетов: начиная с Android 8.0, для каждого приложения запрашивается персональное системное право «Установка неизвестных приложений» («Разрешить установку из этого источника»). При первой попытке запуска инсталляции пользователю необходимо перейти в появившееся окно настроек безопасности и предоставить данное разрешение приложению 1С.
  4. Изолированное хранилище (Scoped Storage): в современных версиях Android сохранять полученный инсталлятор следует строго во внутреннюю рабочую область приложения, доступ к которой возвращает функция КаталогВременныхФайлов(). Попытка записать APK в произвольные публичные папки накопителя без настройки специальных разрешений приведет к ошибке доступа при попытке запуска установщика.
  5. Невозможность полностью фоновой («тихой») установки: в обычной пользовательской среде Android запустить установку абсолютно скрытно без участия человека невозможно — диалог подтверждения обновления выводится всегда. Полная автоматизация доступна только в корпоративных сценариях с использованием прав суперпользователя (root) или при переводе терминалов в режим владельца устройства (Device Owner).

Альтернативные архитектурные решения

Помимо прямой перезаписи APK-файла, проанализируем другие подходы к распространению доработок в мобильных решениях 1С:

  1. Мобильный клиент с автономным режимом: в этой архитектуре на мобильном устройстве используется универсальная оболочка, а сама конфигурация информационной базы хранится локально и синхронизируется с центральной базой 1С по сетевым протоколам. При изменении логики конфигурации в основной базе мобильное приложение обновляет структуру и программный код автоматически при очередном сеансе связи без переустановки APK-файла. Пересборка дистрибутива требуется лишь при переходе на новую версию самой мобильной платформы 1С.
  2. Использование систем управления парком устройств (MDM / EMM): на корпоративных устройствах и ТСД целесообразно использовать платформы централизованного управления. MDM-агент позволяет администраторам удаленно доставлять и обновлять пакеты в фоновом режиме по расписанию, полностью исключая участие конечных сотрудников.
  3. Альтернативные каталоги приложений: если публичный Google Play не подходит из-за региональных ограничений или сложностей с регистрацией, приложение можно разместить в каталогах RuStore или Huawei AppGallery, либо организовать закрытый приватный репозиторий, поддерживающий централизованную доставку обновлений.
← На главную