Внутренняя кухня обновления данных в Solo и Jazz

24 3

Данные – это любые объекты системы Directum RX или Directum, доступные в мобильном приложении, например папки, задания, задачи, документы и пользователи.

Если у вас есть доступ к сети, вы можете загрузить эти данные из системы в любой момент. Но если сеть нестабильна, важно как можно дольше поддерживать актуальность загруженных в мобильные приложения данных. Например, чтобы иметь возможность прочитать в салоне самолета последнюю версию документа или ознакомиться перед совещанием с материалами, которые недавно прислали.

В статье рассмотрим, как в Solo и Jazz поддерживается актуальность данных:

  • как сейчас в NOMAD 2.18 и ниже происходит обновление данных;
  • что такое фоновая работа обновление и почему её возможности ограничены;
  • какие шаги предпринимаем в новой версии NOMAD 2.19, чтобы сохранить удобство работы с Solo и Jazz;
  • что в ближайших планах (версии NOMAD 2.19.1 и далее).

Обновление данных

Сервер NOMAD периодически проверяет содержимое папок текущего пользователя: «Входящие», «Исходящие», «Избранное», «Общая», «Личное», а также папок потока и «Входящие» замещаемых пользователей. По умолчанию проверка запускается через каждые 5 минут, однако периодичность можно изменить в настройках сервера. Цель такой проверки – выяснить, есть ли изменения и нужно ли запускать обновление данных.

Дополнительно в Directum RX сервис WorkflowBlockService моментально передаёт серверу NOMAD сообщение о том, что пользователь получил новое задание.

  1. Сервер NOMAD находит хотя бы одно изменение в данных пользователя или получает сообщение от WorkflowBlockService.
  2. Отправляет на мобильное устройство push-уведомление о том, что есть новые данные и их нужно загрузить.

Что происходит далее, зависит от активности мобильного приложения:

Приложение Solo или Jazz активно: пользователь работает в нём в текущий момент. Скорее всего, данные уже актуальны, так как приложение обновляет их при запуске. Если в ходе работы поступают новые данные, то приложение получает push-уведомление и запрашивает их у сервера NOMAD.

Приложение Solo или Jazz не активно: пользователь не работает в нём в текущий момент и фоновые процессы приложения не запущены. Такая ситуация возможна, если для приложения запрещена фоновая активность или пользователь перезагрузил смартфон, а потом не запустил приложение. В этом случае Solo или Jazz не получает push-уведомление и не запрашивает обновление. Чтобы всегда иметь под рукой актуальные данные, рекомендуем разрешить автозапуск для Solo и Jazz и не ограничивать их фоновую активность.

Приложение Solo или Jazz активно в фоне: пользователь не работает в нём в текущий момент, экран приложения не отображается на экране устройства, но процесс приложения запущен. В этом случае после получения push-уведомления приложение обновляет данные незаметно для пользователя. При следующем входе в Solo или Jazz они будут актуальны. А если в полученном пакете есть новые задания, то пользователь это легко заметит: на панели быстрого доступа в шторке устройства отобразится уведомление.

Теоретически, мобильное приложение может работать в фоновом режиме бесконечно долго, а значит, данные в нём всегда будут актуальными. Если бы не одно НО, о котором чуть позже.

Вернемся к серверу NOMAD. Итак, ранее он отправил push-уведомление для мобильного приложения, о том что есть новые данные. Когда Solo или Jazz обращается за ними, происходит следующее:

  1. Сервер NOMAD сканирует объекты на наличие изменений. На этот раз он проверяет все содержимое папок пользователя и формирует полный набор изменений.
  2. Если у пользователя накопилось много изменений, этот набор получается довольно большим. NOMAD делит его на несколько пакетов.
  3. Мобильное приложение загружает данные по одному пакету. В каком из них окажется новое задание, а в каком – вложенный в него документ, предугадать нельзя. Поэтому считаем, что пользователь получает новое задание, когда загрузятся все пакеты.

А какую роль в этом процессе играет работа приложения в фоне?

Фоновая работа и ее ограничения

Итак, ещё немного теории. Работа приложения в фоне имеет свои плюсы и минусы.

Что хорошо: отображаемые данные всегда актуальны. Приложение незаметно обрабатывает их и при необходимости обновляет.

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

  • Компания Apple отказалась от гарантированной доставки push-уведомлений в фоне с выходом iOS 13 в 2019 году:
Система рассматривает фоновые уведомления как низкоприоритетные: вы можете использовать их для обновления содержимого вашего приложения, но система не гарантирует их доставку. Кроме того, система может ограничивать доставку фоновых уведомлений, если общее количество становится чрезмерным. Количество фоновых уведомлений, разрешенных системой, зависит от текущих условий, но не пытайтесь отправлять более двух или трех в час.
  • Компания Google добавила ограничения на фоновую работу части приложений, которые потребляют много ресурсов и редко запускаются, с выходом Android 11 в 2020 году.
    Теперь для таких приложений гарантируется своевременная доставка только 5 push-уведомлений в день.
  • Обе ОС ограничивают время на активность приложения в фоне.

Таким образом, пользователи, которые редко запускают Solo и Jazz, могут редко получать уведомления о новых заданиях и в результате всё реже заходить в приложения. Это приводит к тому, что в итоге сервер NOMAD присылает им большую порцию новых и измененных данных, сформированную за длительный период нахождения офлайн. Для его загрузки требуется больше времени.

Именно время, которое в итоге требуется на обновление, играет важную роль в вопросе удобства работы с Solo и Jazz на последних версиях мобильных операционных систем.

Сохранение удобства работы

Мы перепробовали много разных механизмов, чтобы оптимизировать работу в фоне и обеспечить оперативное уведомление пользователей об обновлении данных. К сожалению, ни один из них не был результативным. Фоновая загрузка данных по-прежнему может работать у тех, кто регулярно работает с приложением, однако гарантировать ее стабильность мы не можем.

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

В первую очередь ускорили получение наиболее важных для работы пользователя данных: новых заданий и вложенных в них документов. Благодаря этому пользователь может работать с ними почти сразу после входа в приложение. Менее приоритетные изменения, например появление новой ветки переписки или правки в тексте документа в ранее полученном задании, загружаются постепенно в ходе активной работы.

Следующим шагом планируем переработать механизм доставки push-уведомлений о приходе новых заданий. Гарантировать их стабильную доставку мы сможем за счет перехода на другой тип уведомлений. При нажатии на такое уведомление будет происходить запуск приложения и обновления данных. Об этом выйдет отдельная статья.

Быстрое получение новых заданий

Итак, сравним.

Как было. Когда сервер NOMAD находит новое задание, он отправляет push-уведомление в Solo или Jazz. Мобильное приложение обращается за данными, и сервер NOMAD сканирует все папки пользователя, помещает модели новых и изменившихся объектов в пакет для отправки на устройство. Если у пользователя накопилось много изменений, этот пакет получится довольно большим и будет отправляться в приложение частями. Пользователь получает новое задание, когда загружается весь пакет данных.

Как стало:

  1. Когда сервер NOMAD находит хотя бы одно новое задание во входящих пользователя или получает сообщение от WorkflowBlockService, он помещает модель нового задания и модели других связанных с ним объектов в пакет для отправки на мобильное устройство. Это могут быть вложенные в задание документы, карточки сотрудников, указанных в маршруте и так далее.
  2. Отправляет push-уведомление в Solo или Jazz.

  1. Когда мобильное приложение запрашивает данные, сервер NOMAD сразу же отдает ему пакет с новым заданием. Чтобы прочитать новое задание, пользователю понадобится пара касаний.
  2. Только после отправки пакета с новым заданием NOMAD сканирует все папки пользователя на наличие изменений.
  3. NOMAD подготавливается пакет с обновлениями остальных данных, если они менялись. Большой набор изменений распределяется по нескольким пакетам.
  4. Пакеты загружаются в мобильное приложение позже, в ходе работы пользователя с Solo или Jazz.

Этот механизм уже реализован в новой версии NOMAD 2.19. Она совместима Directum 5.2-5.8 и вошла в состав Directum RX 4.2.

Какое именно ускорение даст новинка и какой будет эффект для пользователя, однозначно сказать нельзя. Оно зависит от ряда факторов:

  • Количество новых заданий. У руководителя могут быть десятки новых заданий в день, а у рядовых пользователей – единицы.
  • Каким образом происходит обновление данных. Приложение может быть активным или работать в фоне.
  • Частота использования. Пользователь может запускать приложение редко, например только когда отправляется в командировку. Или часто, если обращается к нему на каждой встрече.

Ускорение обновления будет наиболее заметно, если требуется разово загрузить большой пакет изменений. Например, если поток входящих большой, пользователь редко заходит в приложение, и оно не работает в фоне.

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

***

Желаем вам быстрого получения новых заданий в Solo и Jazz! А рассказ про обновление данных продолжим в следующих версиях.

Сергей Шитов

Следующим шагом планируем переработать механизм доставки push-уведомлений о приходе новых заданий.
 

А статья вышла в итоге?

Анна Тернавская

Сергей, механизм доставки push-уведомлений переработали почти сразу же. Они теперь приходят независимого от того запущено приложение в фоне или нет. А вот статью так и не написали.  Нужна она?

Светлана Соколова

Очень бы хотелось увидеть свежую статью

Авторизуйтесь, чтобы написать комментарий