service worker 通过 push 事件响应服务器经 push service 发送的加密推送消息,调用 shownotification() 展示通知;需确保 sw 已注册激活、消息加密合规、图标用绝对 url,并在 notificationclick 中处理点击跳转与权限兼容性。

Service Worker 本身不直接接收推送消息,而是作为后台事件处理器,在收到推送(PushEvent)时被唤醒,再调用 showNotification() 展示通知。
推送消息由服务器触发,SW 负责响应
浏览器不会主动轮询,而是依赖 Push Service(如 Firebase Cloud Messaging 或 Web Push 协议兼容服务)。当服务器向 Push Service 发送加密的推送载荷后,Push Service 将其转发至用户设备,系统唤起已注册的 Service Worker,并触发 push 事件。
- 确保 SW 已正确注册且处于激活状态(可通过
navigator.serviceWorker.ready检查) - 推送消息体必须是加密的(遵循 RFC 8291),明文会被拒绝
- 即使页面未打开,只要 SW 已注册,推送仍可送达并触发事件
在 push 事件中解析数据并展示通知
在 Service Worker 脚本中监听 push 事件,从 event.data 提取内容(需调用 .json() 或 .text()),然后调用 self.registration.showNotification()。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 注意:
event.data可能为null(例如仅用于唤醒的“静默推送”),需判空处理 - 通知标题、图标、正文、动作等通过参数传入,支持
data字段携带自定义结构化数据 - 图标路径必须是绝对 URL(相对路径在 SW 环境中会解析失败)
用户点击通知后的跳转与交互
通过 notificationclick 事件监听用户点击行为,可聚焦已有标签页或打开新窗口。
- 使用
clients.matchAll()查找已打开的页面,优先focus()而非重复打开 -
event.notification.data可存跳转 URL 或业务 ID,便于页面加载后定位内容 - 若需在点击后关闭通知,调用
event.notification.close()
权限与兼容性注意事项
展示通知前必须获得用户授权(Notification.requestPermission()),且仅在 HTTPS 环境下可用(localhost 除外)。
- Chrome、Edge、Firefox 支持完整 Web Push;Safari 不支持标准 Web Push,仅提供 APNs 集成方案
- 部分 Android WebView 或旧版浏览器可能缺少 Push API 或 Notification API
- 避免在
push事件中执行耗时操作(如大量计算或未 await 的 fetch),否则可能被浏览器中断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










