当显示我的Web推送通知时,我在选项中添加了一个操作,以便用户可以要求在30分钟内再次收到通知。
const options = {
...,
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
....
}
然后我在Service Worker中处理该操作:
self.addEventListener('notificationclick', function(event) {
if (!event.action) return
switch (event.action) {
...
case 'remind-action':
event.notification.close()
event.waitUntil(
new Promise((resolve, reject) => {
setTimeout(() => {
const options = {
...
actions: [
{
action: 'remind-action',
title: 'Remind again in 30',
icon: '/remind.png'
}
],
...
}
self.registration.showNotification('Reminder', options)
resolve(true)
}, 30 * 60 * 1000)
})
)
break
}
})
如果只有一种方法可以重新发送推送事件。
上述代码的问题在于,它不会在30分钟后显示通知,但是如果我将超时设置为1分钟,则可以正常工作。
我认为有些地方Chrome忽略了event.waitUntill
并杀死了setTimeout
。
是什么原因造成的,我该如何解决?
答案 0 :(得分:1)
浏览器将自动有意地限制您的setTimeouts,以防止滥用等。跟踪用户。换句话说,您不能仅在客户端上实现您想要的东西。
要再次(可靠地)显示通知,您需要从服务器再次发送通知。您可能会在x分钟左右的时间内通知服务器要提醒用户。