Web推送通知服务工作者设计

时间:2016-04-09 09:11:02

标签: javascript web-push

我有一个服务工作者,它能够从我们的服务器接收推送事件,到目前为止一切正常。当前版本的Chrome不支持收到的通知中的数据有效负载。因此,我需要在推送事件发生后从服务器获取有关通知的信息(标题,文本,..)。

为了确保用户没有两次收到相同的通知,我保存了尚未在数组中收到的“待处理”通知的ID。每次服务工作者ping服务器时,都会从数组中获取数组中的最后一项并将其从数组中删除。

问题是,如果在获取通知期间在发送期间或服务工作者期间抛出任何异常,则服务工作者是后面的一个通知,这意味着例如如果只有一个新的待处理通知,则数组始终包含2个项目。

我该如何处理?

1 个答案:

答案 0 :(得分:1)

只要ServiceWorker捕获了push事件,通知就会被视为已发送给GCM ;无论输出如何(即已显示提取良好的通知,或在提取过程中发生错误)。

然而,当您从服务器获取每个通知内容时,您可以处理“提取的”内容。标志服务器端。通过这种方式,获取可以返回 n 有效负载,然后您的ServiceWorker可以在单个self.registration.showNotification()事件中生成 n push

最后,如果在向GCM发送通知时error occurred,即Internal Server Error,则必须重新向GCM发送请求。但是,如果您的请求成功,但您的ServiceWorker从未收到push事件,那么您必须考虑您的通知已丢失...

相关问题