簡體   English   中英

通過Chrome中的service-worker.js 24/7接收通知

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM