发生 pushsubscriptionchange
事件时,开发者可以重新订阅用户的推送通知。这其中的一个痛点是,若要重新订阅用户,开发者必须让网页的 JavaScript 和其 Service Worker 之间的 applicationServerKey
(以及任何其他 subscribe()
选项)保持同步。
在 Chrome 54 及更高版本中,您现在可以通过订阅对象(称为 PushSubscriptionOptions)中的 options 参数访问选项。
您可以将以下代码段复制并粘贴到 simple-push-demo 中,查看这些选项的显示效果。该代码只会获取当前订阅并输出 subscription.options
。
=======
navigator.serviceWorker.ready.then(registration => {
return registration.pushManager.getSubscription();
})
.then(subscription => {
if (!subscription) {
console.log('No subscription 😞');
return;
}
console.log('Here are the options 🎉');
console.log(subscription.options);
});
有了这些信息,您就可以在 pushsubscriptionchange 事件中重新订阅用户,如下所示:
self.addEventListener('pushsubscriptionchange', e => {
e.waitUntil(registration.pushManager.subscribe(e.oldSubscription.options)
.then(subscription => {
// TODO: Send new subscription to application server
}));
});
这是一个小改动,日后会非常有用。