如何向Web Push添加提醒我的动作?

时间:2019-09-13 11:17:08

标签: service-worker web-push service-worker-events

当显示我的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

是什么原因造成的,我该如何解决?

1 个答案:

答案 0 :(得分:1)

浏览器将自动有意地限制您的setTimeouts,以防止滥用等。跟踪用户。换句话说,您不能仅在客户端上实现您想要的东西。

要再次(可靠地)显示通知,您需要从服务器再次发送通知。您可能会在x分钟左右的时间内通知服务器要提醒用户。

相关问题