这是意料之中的。 service worker运行在与应用程序所用线程不同的线程上。这就是为什么即使您(或您的用户)当前未访问网站,您的Web应用程序仍然可以接收和显示通知的原因。 因此,如果未安装PWA(意味着软件未在客户端运行),则没有代码等待传入通知。 I wrote an article about service workers,如果您想深入PWAs主题。
总之,这是不正常的,无论是否安装了PWA,只要注册了service worker,推送通知就应该起作用。您需要注意的是service worker注册和推送事件处理。 Service Worker Push API 对于接收推送消息的应用程序,它必须具有活动的service worker。当service worker处于活动状态时,它可以使用PushManager.subscribe()订阅推送通知。
// example of service-worker.js
// can receive push notification from server even PWA not installed
self.addEventListener('push', (event) => {
// Parse the notification payload (assuming it's in JSON format)
const { toPage, title, body, icon } = event.data.json();
let iconResult
const options = {
// Customize the notification here
actions: [
{ action: toPage, title: 'Visit ' + toPage.toUpperCase() },
],
icon: icon || undefined,
body, // The content of the notification
title, // The title of the notification
vibrate: [200, 100, 200], // Vibration pattern for supported devices (optional)
toPage
// Other options like actions, renotify, requireInteraction, etc.
};
// Show the notification to the user
event.waitUntil(self.registration.showNotification(title, options));
});
self.addEventListener('notificationclick', (event) => {
// Get the URL to navigate to (in this case, '/home')
const urlToOpen = new URL(`${event.action || 'index'}.html`, self.location.origin).href;
// Prevent other listeners from handling the event
event.notification.close();
// Open a new window/tab with the specified URL
event.waitUntil(clients.openWindow(urlToOpen));
});
2条答案
按热度按时间zbsbpyhn1#
这是意料之中的。
service worker运行在与应用程序所用线程不同的线程上。这就是为什么即使您(或您的用户)当前未访问网站,您的Web应用程序仍然可以接收和显示通知的原因。
因此,如果未安装PWA(意味着软件未在客户端运行),则没有代码等待传入通知。
I wrote an article about service workers,如果您想深入PWAs主题。
更新
如果您的浏览器不显示网络通知,您可以在“我可以使用”网站上验证您的浏览器版本是否支持通知和推送API,并最终更新它。
prdp8dxp2#
总之,这是不正常的,无论是否安装了PWA,只要注册了service worker,推送通知就应该起作用。您需要注意的是service worker注册和推送事件处理。
Service Worker Push API
对于接收推送消息的应用程序,它必须具有活动的service worker。当service worker处于活动状态时,它可以使用PushManager.subscribe()订阅推送通知。
字符串