推播式訂閱選項

Matt Gaunt

發生 pushsubscriptionchange 事件時,開發人員可以重新訂閱使用者的推播。這項做法的其中一個缺點是,如果要重新訂閱使用者,開發人員必須在網頁的 JavaScript 和服務工作者之間,保持 applicationServerKey (以及任何其他 subscribe() 選項) 的同步。

在 Chrome 54 以上版本中,您現在可以透過訂閱物件中的選項參數 (稱為 PushSubscriptionOptions) 存取選項。

您可以將下列程式碼片段複製並貼到 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  
    }));  
});

這只是一個小變更,但日後會非常實用。