0

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

为了确保用户不会两次收到相同的通知,我将他尚未收到的“待处理”通知的 ID 保存在一个数组中。每次 service worker 对服务器执行 ping 操作时,都会从数组中取出最后一项并将其从数组中删除。

问题是,如果在发送过程中或服务工作者在获取通知时抛出任何异常,服务工作者会落后一个通知,这意味着如果只有一个新的待处理通知,则数组总是包含 2 个项目.

我该如何处理?

4

1 回答 1

2

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

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

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

于 2016-05-17T13:06:41.693 回答