드디어 iOS PWA에서 푸시 알림이 지원되기 시작했네요
그래서 푸시 알림이 전송되기 전에 적용되는 지연 시간을 살펴봤습니다. 예상보다 더 오래 걸리는 것 같아서요.
코드는 사용자가 최근( 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가 온라인 확인과 지연 모두에 적용되므로, 예상보다 최대 2배까지 오래 걸릴 수 있음을 의미합니다.
예시:
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)가 되어야 한다고 기대합니다.