Quando um evento pushsubscriptionchange
ocorre, o desenvolvedor tem a
oportunidade de assinar novamente o usuário para push. Um dos pontos problemáticos disso é que,
para assinar novamente um usuário, o desenvolvedor precisa manter o applicationServerKey
(e qualquer
outra opção de subscribe()
) sincronizado entre o JavaScript da página da Web e o
service worker.
No Chrome 54 e posterior, agora é possível acessar as opções por meio do parâmetro "opções" em um objeto de assinatura, conhecido como PushSubscriptionOptions.
Você pode copiar e colar o seguinte snippet de código em simple-push-demo para ver como são as opções. O código simplesmente recebe a assinatura atual e imprime
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);
});
Com essa pequena informação, você pode inscrever novamente um usuário no evento pushsubscriptionchange da seguinte forma:
self.addEventListener('pushsubscriptionchange', e => {
e.waitUntil(registration.pushManager.subscribe(e.oldSubscription.options)
.then(subscription => {
// TODO: Send new subscription to application server
}));
});
É uma mudança pequena que será muito útil no futuro.