Модуль для Cordova (iOS или Android)

1 500 руб.за час
25 октября 2022, 18:40 • 4 отклика • 75 просмотров
Мы разрабатываем клиентские приложения на базе Cordova. Таких приложений несколько десятков и на данный момент мы обновляем их по стандартной процедуре: пересборка и отправка на модерацию в магазин, что занимает много времени и создает некоторые неудобства.

Мы хотим ускорить процесс обновления и для достижения этой цели необходимо разработать плагин для Cordova, который будет обновлять файлы в www-контейнере минуя основной магазин приложений (App Store, Google Play и другие), скачивая свежую версию файлов с сервера. Плагин с подобной функциональностью уже существует, но, к сожалению, с новыми версиями iOS и Android уже не работает: nordnet/cordova-hot-code-push.


Подробности технической реализации


Вариантов решения задачи может быть два: (обсудим)

  1. Написать новый плагин, заточенный конкретно под наши нужды (можно условно разделить на два этапа):
    1. Автоматическая работа
    2. Возможность конфигурирования поведения плагина и ручное управление
  2. Довести до ума уже существующий плагин cordova-hot-code-push (исправить неработающие части)

Схема работы плагина:

  1. В проекте приложения с данным плагином будет находится конфигурационный файл, в котором прописываются необходимые для работы настройки: см. Параметры (ниже).
  2. Во время запуска приложения, еще до события “device-ready”, плагин должен осуществить попытку соединения с сервером для получения команды на обновление.
  3. В случае получения команды на обновление, в зависимости от “Способа установки новой версии” (см. Параметры) плагин будет работать по-разному:

    1. При “установке сразу при получении команды” приложение скачивает и производит установку, в это время на экране продолжает показываться сплешскрин. При обрыве соединения или таймауте приложение прекращает процедуру обновления и продолжает инициализацию по стандартной схеме.
    2. При “установке при следующем запуске” приложение продолжает стандартную процедуру инициализации без блокировки экрана, а загрузка нового контента осуществляется в фоновом режиме. Установка же будет осуществлена уже при следующем запуске приложения. Причем уже при следующем запуске приложение блокируется на экране со сплешскрином до установки новой версии. Важное примечание: при “установке при следующем запуске” этап проверки на новую версию все равно должен быть осуществлен, и это должно произойти перед попыткой установки: если плагин обнаружит, что появилась более свежая версия, то он должен скачать с сервера новую и заменить ей ту, которая была скачана в прошлый раз, а затем уже производить установку).
  4. Обновление файла конфигурации. При получении ответа от сервера помимо команды на обновления, сервер может попросить обновить файл конфигурации плагина, например изменить способ установки новой версии.
  5. Ручной вызов различных методов из webview (условно второй этап, обсудим): запрос на проверку необходимости обновления, принудительный запуск обновления и т.п.

Параметры: (конфигурационный файл)

  • URL для получения команды на обновление (структуру ответа обсудим подробнее перед началом работ)
  • Исходная версия приложения (та, которая будет указана в магазине на момент загрузки сборки в стор)
  • Таймаут попытки соединения
  • Способ установки новой версии:

    • Установка сразу при получении команды
    • Установка при следующем запуске
  • Отключение плагина (должна быть возможность его просто отключить)

Обработка ошибок:

  1. В случае нештатной работы плагина (какой-либо из этапов нарушен, что-то не получилось сделать, после обновления приложение перестало запускаться, и прочее):

    1. Плагин сбрасывает состояние на момент последней исправной версии и продолжает работу в штатном режиме.
    2. Последующие запросы к серверу на получение команды на обновление должны содержать в себе данные о произошедшем сбое. Эта информация будет слаться с каждым таким запросом до тех пор, пока плагин штатно и без ошибок не обновится до следующей версии. Структуру данных обсудим подробнее перед началом работ.
  2. (опционально, по согласованию) Мы используем в наших проекта Sentry, хотелось бы прикрутить к плагину SDK для работы с этой системой, чтобы мы могли отслеживать ошибки обновлений на уровне Cordova.

Требования:

  1. Плагин должен работать с iOS (начиная с версии iOS 11.2) и Android (начиная с версии 5.1).
  2. Плагин должен поддерживать версию Cordova 10 (и желательно 11).
  3. Плагин необходимо оформить в виде стандартного плагина для Cordova в виде репозитория.

Мы предоставим:

  1. Доступ к репозиторию с проектом (который нужно будет развернуть у себя)
  2. Быструю реакцию на уточняющие вопросы по ТЗ и во время выполнения задания (в будние дни)
  3. Свободу выбора решений по обмену данными с сервером и по самой реализации плагина