بما أننا حصلنا أخيرًا على إشعارات الدفع على PWA لنظام iOS
، كنت أبحث في التأخير المطبق قبل إرسال إشعار الدفع - لأنه بدا أنه يستغرق وقتًا أطول من المتوقع.
الـ 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
لكن هذا يعني أنه في الواقع يمكن أن يستغرق الأمر ضعف الوقت المتوقع تقريبًا لأن 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 - (الآن - شوهد منذ)