如何更新我的订户的服务工作者版本?

时间:2018-12-19 09:39:04

标签: push-notification service-worker

我使用minishlink/web-push进行发送推送。然后,我使用serviceworker.jspushnotificationclick事件监听器使服务人员notificationclose进行推送消息。 到进行订阅的网站,有sw.js:

let timeStampInMs = new Date().getTime();
importScripts('https://super-push-site.com/serviceworker.js?ts=' + timeStampInMs);

它工作正常。

但是我制作了新版本的Service Worker,并将其放在了旧地方(https://super-push-site.com/serviceworker.js)。

如何在不访问订阅者访问站点的情况下更新我的订阅者的服务工作者版本?

1 个答案:

答案 0 :(得分:0)

在回答您的问题之前,我想指出,向您的服务工作者URL添加缓存无效化参数是一种不好的做法,因为如果浏览器的字节与现有的服务人员。您可以在The Service Worker Lifecycle

上阅读有关此内容的更多信息。

现在,回答您的实际问题:

收到推送消息后,您可以通过调用服务工作者注册的var accessToken = await AuthenticationHttpContextExtensions.GetTokenAsync( HttpContext, OpenIdConnectParameterNames.AccessToken); 方法来手动触发更新:

update()

您可能还想仅在实际上有更新版本的Service Worker时才触发self.addEventListener('push', function (event) { ... event.waitUntil( Promise.all([ self.registration.showNotification(title, options); self.registration.update() ]) ); }); 。为此:

  1. 将软件的版本标识符存储在变量中。
  2. 始终在您的推送消息有效载荷内发送最新的软件版本标识符。
  3. 比较两者,如果不匹配则触发self.registration.update()

希望这会有所帮助!