Что делает эта часть модуля
Когда заказ аренды меняется, у клиента в Apple Wallet должна автоматически обновиться его карта заказа: новый статус, новые даты, актуальная сумма к оплате. Эта часть модуля отвечает за то, чтобы система вовремя «заметила» значимое изменение заказа, отметила соответствующие пропуска как обновлённые и разослала телефонам клиентов сигнал «пора скачать свежую версию карты».Автоматическая связка «отметка обновления + push» в этой части работает только для карт Apple Wallet. Карты Google Wallet в модуле тоже поддерживаются, но обновляются по другому пути и этим механизмом не затрагиваются.
- Перехват изменений заказа — автоматический обработчик, который срабатывает при каждом сохранении заказа.
- Пометка пропуска обновлённым — общая процедура, которая находит нужные карты, поднимает у них отметку времени изменения и ставит фоновые задачи на отправку push.
- Регистрация обработчика при старте — подключение перехватчика к событиям заказа в момент запуска приложения.
Отметка времени изменения на пропуске (поле «Обновлён») — это тот самый признак, по которому устройство Apple понимает, что карта устарела и её нужно перекачать. Push лишь «будит» телефон, а решение об обновлении устройство принимает, сверяя эту отметку. Поэтому поднять отметку времени так же важно, как и отправить push.
Отслеживание изменений заказа
При каждом сохранении заказа аренды автоматически вызывается обработчик изменения заказа. Он решает, нужно ли беспокоить карты клиента, по двум правилам:- Создание заказа игнорируется. Если заказ только что создан, обработчик сразу завершает работу. Пропуск для нового заказа выпускается в другом месте (при выдаче карты клиенту), а не по факту создания заказа.
- Фильтр по значимым полям. Если сохранение указывает конкретный список изменённых полей, обработчик реагирует только тогда, когда этот список пересекается с набором «значимых полей заказа». Изменение любого другого поля (например, служебной пометки) карту не трогает.
Значимые поля заказа
Обновление карты запускают изменения именно тех полей, которые видны клиенту на лицевой стороне пропуска:
Если изменилось хотя бы одно из этих полей — карта считается устаревшей и запускается процедура пометки пропуска обновлённым для типа «Заказ».
Пометка пропуска обновлённым
Это общая процедура, к которой обращается обработчик заказа (а также, при необходимости, другие места модуля). Она получает на вход тип пропуска (здесь — «Заказ») и идентификатор связанного объекта (здесь — идентификатор заказа) и выполняет следующие шаги.Шаг 1. Проверка контекста компании
Процедура сначала убеждается, что известна текущая компания. Пропуска хранятся в общих (глобальных) таблицах, но привязаны к конкретной компании, поэтому без установленного контекста компании выбрать «свои» карты невозможно. Если контекст компании не определён — процедура молча завершается, ничего не делая.Обработчик заказа всегда работает уже внутри контекста конкретной компании (заказы принадлежат компании), поэтому в штатном потоке этот контекст присутствует. Проверка защищает от вызовов вне обычного веб-запроса.
Шаг 2. Выбор непогашенных пропусков
Процедура находит все пропуска, у которых одновременно совпадают:- компания — активная компания;
- тип пропуска — «Заказ»;
- идентификатор связанного объекта — идентификатор изменившегося заказа;
- признак аннулирования — пропуск не аннулирован.
Шаг 3. Подъём отметки времени изменения
Для всех найденных пропусков одним групповым обновлением проставляется текущий момент времени в поле «Обновлён». Именно эта отметка сигнализирует устройству клиента, что его версия карты устарела.Шаг 4. Отложенная рассылка push
Рассылка push-задач ставится не сразу, а «после успешного сохранения изменений в базу». Только когда изменения гарантированно зафиксированы, на каждый серийный номер ставится отдельная фоновая задача push-обновления пропуска.Фоновая доставка уведомления
Каждое уведомление отправляется в фоне, отдельно по каждой карте. При сбое отправка повторяется автоматически — до трёх раз с паузой около 10 секунд. Если карта установлена сразу на нескольких телефонах, уведомление уходит на каждый из них.Подключение обработчика при старте
Отслеживание изменений заказа включается автоматически при запуске системы — отдельной настройки для этого не требуется.Как это связано с остальным модулем
Эта часть не выпускает карты и не формирует их содержимое — она лишь следит за изменениями заказа и запускает обновление уже выпущенных карт. Само содержимое собирается позже, когда телефон клиента приходит за свежей версией — см. «Как телефон получает свежую карту».Связанные страницы
Глоссарий: Отслеживание изменений и оповещение
Полный перечень значимых полей заказа, типов пропусков и параметров рассылки.
Карты в Apple Wallet и Google Wallet
Обзор раздела: какие бывают карты, как их получает клиент и как они обновляются.
Проблемы и логические ошибки
Сводный список известных подводных камней и ошибок по всему модулю.
Что хранится о карте
Какие сведения система хранит о выпущенной карте и о телефонах, подписанных на обновления.
Выдача карты клиенту
Ссылки, по которым клиент получает карту для Apple Wallet или Google Wallet.
Оформление карты Apple
Что клиент видит на карте: поля, QR-код, фирменные цвета и логотип.
Карта в Google Wallet
Как формируется карта и ссылка сохранения для Google Wallet.
Как телефон получает свежую карту
Что происходит между телефоном клиента и системой, когда карта обновляется.
Уведомления об обновлении карты
Бесшумные уведомления, которые заставляют телефон перекачать карту.