Распространение мобильных приложений через официальные магазины, такие как Google Play или App Store, не всегда удобно или возможно, особенно когда речь идет о внутренних корпоративных решениях. В таких случаях перед разработчиком встает задача организовать механизм автоматического или полуавтоматического обновления приложения собственными силами. Разберем подробно, как это реализовать, какие нюансы существуют для разных мобильных платформ и как правильно настроить серверную часть.
Этот способ подходит в тех ситуациях, когда на устройствах пользователей установлена стандартная мобильная платформа 1С, а само приложение добавлено в список информационных баз по сетевому пути. Рассмотрим этот механизм подробнее.
Суть метода заключается в том, что на веб-сервере (например, Apache или IIS) публикуется не само скомпилированное приложение (APK/IPA), а база данных (конфигурация). При добавлении базы на мобильном устройстве указывается URL этой публикации. Для автоматизации процесса обновления выполним следующие шаги:
Важно понимать разницу: в данном сценарии мы обновляем только метаданные (формы, модули, макеты), но не саму мобильную платформу 1С. Данные базы (файлы .1cd) при этом сохраняются на мобильном устройстве.
Если вы используете "Сборщик мобильных приложений" и распространяете готовые пакеты (APK для Android или IPA для iOS), механизм UpdateURL требует более детальной настройки. Простого указания пути к файлу в параметрах сборки недостаточно. Проанализируем, как работает этот процесс.
Для успешного обновления мобильная платформа ожидает найти по указанному URL не само приложение, а специальный файл описания в формате XML. Разберем структуру этого файла (например, version.xml):
<?xml version="1.0" encoding="UTF-8"?>
<update xmlns="http://v8.1c.ru/8.3/mobile/application/update">
<version>1.0.2.5</version>
<url>https://myserver.ru/updates/myapp.apk</url>
</update>
В этом файле мы указываем актуальный номер версии и прямую ссылку на скачивание нового пакета. Когда приложение запускается, оно обращается к этому XML-файлу, сравнивает номер версии внутри тега version с номером версии, установленным на устройстве. Если номер в файле выше, инициируется процесс загрузки.
Выясним причину, по которой часто не срабатывает скачивание файла обновления даже при наличии правильного XML-файла. Основная проблема заключается в настройках веб-сервера. Если сервер не знает, как обрабатывать файлы с расширением .apk или .ipa, он может передать их как обычный текст или выдать ошибку 404/403.
Для корректной работы необходимо добавить следующие MIME-типы в настройках вашего сервера (Apache или IIS):
application/vnd.android.package-archive (расширение .apk).application/octet-stream (расширение .ipa).text/xml или application/xml (расширение .plist).Кроме того, современные мобильные операционные системы, особенно iOS, требуют обязательного использования защищенного протокола HTTPS с валидным SSL-сертификатом. Использование самоподписанных сертификатов может привести к блокировке загрузки системой безопасности смартфона.
Для устройств на базе Android установка приложений в обход магазина (так называемый Sideloading) является стандартной функцией, но она требует соблюдения правил подписи приложений. Рассмотрим этот момент подробнее.
Система Android позволит обновить существующее приложение новым APK-файлом только в том случае, если оба файла подписаны одним и тем же сертификатом (файлом .keystore). Если при сборке новой версии вы создадите новый ключ или используете другой сертификат, пользователь получит ошибку "Приложение не установлено", так как система посчитает новую версию сторонним продуктом, конфликтующим по имени пакета.
Также не забывайте о параметре Version Code в Сборщике мобильных приложений. Это целое число, которое должно строго увеличиваться при каждом обновлении. Android ориентируется именно на него, а не на строковое представление версии (Version Name).
С устройствами Apple ситуация сложнее. Для установки приложений вне App Store у вас есть два основных пути:
Для реализации обновления через веб-сервер на iOS вам потребуется не только файл .ipa, но и файл манифеста в формате .plist. Ссылка в параметре UpdateURL в данном случае должна использовать специальный протокол:
itms-services://?action=download-manifest&url=https://myserver.ru/manifest.plist
В самом файле манифеста прописываются метаданные приложения и ссылка на физическое расположение .ipa файла.
Мы можем реализовать проверку обновлений более гибко, используя встроенный язык 1С. Это позволит, например, выводить пользователю информативное сообщение с описанием изменений перед началом загрузки. Посмотрим на пример логики проверки версии через HTTP-запрос:
&НаКлиенте
Процедура ПроверитьОбновление()
Соединение = Новый HTTPСоединение("myserver.ru",,,, Неопределено, 60, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/version.xml");
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
// Здесь должна быть логика парсинга XML и сравнения версий
// Если версия на сервере выше, вызываем команду установки
СистемнаяИнформация = Новый СистемнаяИнформация;
ТекущаяВерсия = СистемнаяИнформация.ВерсияПриложения;
// Сравниваем и предлагаем обновление
КонецЕсли;
Исключение
Сообщить("Не удалось проверить обновление: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Такой подход позволяет избежать автоматического поведения платформы и дает разработчику полный контроль над процессом: можно реализовать принудительные обновления для критических версий и необязательные для минорных изменений. Для организации серверной части раздачи файлов и релизов подойдёт конфигурация для централизованной доставки обновлений через HTTP-сервисы.
Если парк устройств в компании значителен, разберем вариант использования систем Mobile Device Management (MDM). Такие инструменты, как Headwind MDM или специализированные решения от разработчиков антивирусного ПО, позволяют централизованно управлять установленными приложениями. Администратор просто загружает новую версию APK в панель управления, и приложение обновляется на всех целевых устройствах автоматически, часто даже без подтверждения пользователем.
Также стоит обратить внимание на сервисы дистрибуции для разработчиков, такие как AppCenter. Они предоставляют готовое SDK, которое можно интегрировать в мобильное приложение (хотя для 1С это потребует использования внешних компонент), для удобного управления версиями и получения отчетов об ошибках обновления.
Подведем итог и составим чек-лист для настройки автономного обновления:
Version Code и используйте один и тот же файл подписи (Keystore).Следуя этим рекомендациям, вы сможете создать надежную систему доставки обновлений для своих мобильных решений на платформе 1С, полностью независимую от сторонних магазинов приложений.