Временное окно для push-уведомлений в минутах может быть вдвое больше этого времени

Поскольку у нас теперь наконец-то есть push-уведомления для iOS PWA :tada:, я изучил задержку, применяемую перед отправкой 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 - (текущее время - время последнего присутствия).

8 лайков

Это должно исправить проблему

9 лайков

Эта тема была автоматически закрыта через 3 дня. Новые ответы больше не принимаются.