Поскольку у нас теперь наконец-то есть push-уведомления для iOS PWA
, я изучил задержку, применяемую перед отправкой push-уведомления, так как она казалась дольше ожидаемой.
код проверяет, был ли пользователь онлайн недавно (менее push_notification_time_window_mins минут назад). Если да, то уведомление задерживается на push_notification_time_window_mins минут.
if user.seen_since?(SiteSetting.push_notification_time_window_mins.minutes.ago)
Jobs.enqueue_in(
SiteSetting.push_notification_time_window_mins.minutes,
...
)
else
Jobs.enqueue(:send_push_notification, user_id: user.id, payload: payload)
end
Но на практике это означает, что время отправки может быть почти в два раза больше ожидаемого, поскольку push_notification_time_window_mins применяется как при проверке онлайн-статуса, так и при задержке.
Пример:
push_notification_time_window_mins установлен в 10 минут.
13:00
Я покидаю сайт.
13:10
Происходит событие, вызывающее уведомление.
Код проверяет, был ли я онлайн менее 10 минут назад.
Был, поэтому уведомление будет отправлено в 13:20.
12:59
Я покидаю сайт.
13:10
Происходит событие, вызывающее уведомление.
Код проверяет, был ли я онлайн менее 10 минут назад.
Не был, поэтому уведомление будет отправлено немедленно, в 13:10.
Таким образом, разница в одну минуту во времени моего присутствия в сети может изменить доставку уведомления почти на push_notification_time_window_mins. Особенно если значение настройки увеличено, это может привести к существенной разнице.
Я ожидал, что задержка будет равна push_notification_time_window_mins - (текущее время - время последнего присутствия).