[英]Receive notifications 24/7 via service-worker.js in Chrome
我一直在進行推送通知,當我注冊頁面然后通過curl命令對其進行測試時,我收到了通知!
但是,過了一會兒(也許是1-2分鍾),當我關閉選項卡,通知推送作用域已被注冊,然后再次測試通知時,我無法收到通知。 這種情況通常發生在移動設備的Google Chrome瀏覽器中。
我在這里所做的解決方法是,我需要先轉到作用域頁面的頁面,然后當我再次測試通知時,它現在可以工作了。 盡管我無法做到這一點,因為我需要客戶端來接收通知,而不必一直在網站上。
這是我在服務人員中的推送活動
self.addEventListener('push', function(event) {
var SOME_API_ENDPOINT = "https://somewhre.com/push_notification_api/service_worker_endpoint";
event.waitUntil(
fetch(SOME_API_ENDPOINT, {
method: 'post',
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: 'subscription_id=' + subscriptionId
}).then(function(response) {
return response.json().then(function(data) {
var title = data.notification.title;
var message = data.notification.message;
var icon = base + "assets/images/logo_notification.png";
var notificationTag = data.notification.url;
// var notificationTag = 'https://google.com'; //data.notification.tag;
return self.registration.showNotification(title, {
body: message,
icon: icon,
tag: notificationTag
});
});
})
);
});
即使我不在SW的注冊范圍之內,如何使我的服務人員成為24/7全天候服務?
我是否需要使用eventListeners的“安裝”,“激活”和“獲取”?
服務人員似乎堅持不懈,但實際上並非如此-響應事件,一個新實例啟動了。 在移動設備上重新啟動以處理推送事件時將是這種情況,但也有人建議繁忙的服務工作者應允許並行運行多個實例。
您的subscriptionId
是一個全局參數,因此在您的push
事件觸發時很可能undefined
。
要解決此問題,您需要將subscriptionId
保留在某種類型的存儲中(Mayber IndexedDB)。
我還認為,為了使服務人員能夠持久運行,它需要有一個install
事件,並且該事件需要成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.