gifts2017

Включение обновления мобильных конфигураций via http

Опубликовал SirStefan (SirStefan) в раздел Программирование - Мобильные приложения

Включение возможности быстрого обновления конфигурации мобильной платформы для конечного приложения через http.

Существует два варианта мобильного приложения:

  1. для разработчика со списком баз и обновлением через http
  2. конечное приложение с одной конфигурацией

Но у конечного приложения есть один нюанс - нет обновления конфигурации. Торговые представители постоянно в полях, да еще и по городам раскиданы. Периодическая передача нового apk неудобна и  громоздка, на google play публиковать конфигурацию для своих нет желания, а каждый раз после запуска выбирать в окне нужную конфигурацию конечные пользователи не хотят.

Покопавшись немного во внутренностях МП нашел интересную вещь: платформа одна и та же, механизмы есть, просто они недоступны. По сути есть файл ibases.v8i (как и в десктопной версии) со списком конфигураций и в нем путь к шаблону конфигурации прописан в параметре "AdditionalParameters=".

В конечном приложении в параметре ссылка на локальный шаблон, в приложении для разработчика это http ссылка. Попытался заменить одну на другую - заработало. Но можно ли это сделать на планшетах торговых? Они-то не рутованы как мой телефон. Помогла статья http://infostart.ru/public/464479/. Оказалось, что МП имеет полный доступ к своей папке. Осталось только внедрить замену текста.

В строке нужно прописать полный путь к файлу с конфигурацией:

AdditionalParameters=http://mysite.ru/1cema.xml

Если у вас файл отдается с авторизацией, то так:

AdditionalParameters=http://login:password@mysite.ru/1cema.xml

В результате в окно настроек приложения были добавлены поле для ввода пути обновления "ПутьОбновленияКонфигурации" и кнопка, применяющая эти настройки. Путь к файлу конфигурации специально храню в константе, поскольку у меня все настройки пользователю передаются через конфигурационный e-mail для исключения ошибки ввода.

И на кнопку прописан патч нужного нам файла:

&НаКлиенте
Процедура кмПатч(Команда)
    #Если МобильноеПриложениеКлиент Тогда
    масФайлы = НайтиФайлы("/data/data/<ИДЕНТИФИКАТОР ПРИЛОЖЕНИЯ КАК УКАЗАН В СБОРЩИКЕ>/files/","*.v8i",Истина);
    ФайлСпискаБаз = Новый ЧтениеТекста(масФайлы[0].ПолноеИмя);
    Текст = ФайлСпискаБаз.Прочитать();
    ФайлСпискаБаз.Закрыть();
    
    перПозиция = СтрНайти(Текст,"AdditionalParameters=");
    Если перПозиция>0 Тогда
        ФайлСпискаБаз = Новый ЗаписьТекста(масФайлы[0].ПолноеИмя);
        ФайлСпискаБаз.Записать(Лев(Текст,перПозиция+20)+ПутьОбновленияКонфигурации);
        ФайлСпискаБаз.Закрыть();
    КонецЕсли;    
    #КонецЕсли
КонецПроцедуры

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

и обновлять свою конфигурацию до последней когда нужно стандартным методоб "Обновить". При этом не теряется запуск сразу нужной конфигурации.

 Код не оптимальный и будет переписан - в статье пытался передать сам вариант решения.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Sergey Mosalov (dablack) 11.05.16 20:21
Спасибо! Отличный нюанс AdditionalParameters который я пропустил. Пытался обновить мобильное приложение загружая с сервера 1cema.xml и подменять его на тот который в папке и с базой и шаблоном. При перезапуске обновление вроде как происходит, а по факту - нет. Я уже стал подозревать, что это специально т.к. во вчерашней статьи на хабрре об этом писали, что такой способ обновления противоречит лицензионным соглашениям.
Еще раз спасибо! Вовремя как то прям для меня получилось.
2. Sergey Mosalov (dablack) 11.05.16 22:17
Что то рано я обрадовался...
Получается, но как то не адекватно.
Из приложения правлю файлик v8i.
Перезапускаю.
после перезапуска приложения, начинается установка новой базы (по файлам вижу что добавляется еще одна база)
причем в v8i она добавляется с тем же именем, что и оригинал. (У вас файл v8i не изменяется сам?)
Потом захожу в приложение в список баз и там либо давлю "обновить" либо ставлю переключатель "перезапуск конфигуратора"
После этого становить как надо, но как избежать добавления еще одной базы, которой даже в списке нет, не могу разобраться...
3. SirStefan (SirStefan) 12.05.16 06:05
(2),Способ противоречит, но удобство работы то нужно. И возможно в новых версиях платформы отключат эту возможность.
Никакой новой базы не появляется, обновляется текущая. Платформа 8.3.7.70. В папке 1cem никаких новых папок не появляется тоже.
Покажите, что в файлике у вас написано после патча? И свой код патча.
4. SirStefan (SirStefan) 12.05.16 06:14
(2), по поводу двух баз пришла идея - надо проверить. Прописать несколько баз и каждой свой путь к файлу обновления, проверить можно ли в конечном продукте использовать различные конфигурации.
5. SirStefan (SirStefan) 12.05.16 06:19
(1) И сами 1С пишут, что это противоречит лицензионному соглашению google play. "...Это запрещают делать лицензионные ограничения на приложения, которые распространяются через магазины приложений. Например, если ваше приложение будет загружать исполняемый код (в виде скрипта) через Интернет, то оно никогда не появится в магазине приложений Apple..."
Т.е. фактически они сами не против такого удобства, просто это ограничение сторонней компании к их продукту. А поскольку мы не собираемся выкладывать свою конфу на google - мы не сможем дискредитировать 1С :)
6. Sergey Mosalov (dablack) 12.05.16 10:25
Проблема решена! Оказывается из за того, что я на рутовом устройстве руками правил файл v8i - вылезали такие глюки, а если все делаю из мобильной платформы - все ок. В чем разница не понимаю, но тем не менее работает. Кстати если еще заменить в файле WA=0 на WA=1 то обновление будет проходить автоматом при запуске. Попробую еще из платформы заменять 1cema.xml, а то может у меня опять же это не получалось из-за того что я это делал не средствами платформы.
7. Иван Одинескин (odineskin2) 23.05.16 06:55
очень полезное решение, спасибо автору.
а не подскажите для айфонов не заморачивались с аналогичным вопросом? лам логи в аналогичном виде?
8. SirStefan (SirStefan) 24.05.16 04:49
(7), нет, у меня все торговые на android.
Сомневаюсь, что на айфоне так же.
9. Sergey Mosalov (dablack) 24.05.16 11:07
На яблоках путь к v8i вот такой:
"\Library\1C\1cem\ibases.v8i"
Далее все тоже самое...
odineskin2; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа