iOS PWA でついにプッシュ通知が利用可能になったので
、プッシュ通知が送信される前に適用される遅延について調べていました。予想よりも時間がかかっているように思えたからです。
code は、ユーザーが最近オンラインだったかどうか(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
しかし、これは実際には予想の最大 2 倍の時間がかかる可能性があることを意味します。なぜなら、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 に送信される。
したがって、オンライン時間における 1 分の違いで、通知配信が push_notification_time_window_mins 近く変わる可能性があります。特に設定値が高い場合、これはかなりの違いを生む可能性があります。
遅延は push_notification_time_window_mins - (now - seen_since) になることを期待します。