伴随着移动设备的普及,Web 应用逐渐成为人们生活必备的组成部分。PWA(Progressive Web Apps)作为 Web 应用的一种新形态,正在逐渐被广泛认可和使用。其中,Push Notification 作为衔接 Web 应用和用户的桥梁,也在 PWA 中扮演着重要的角色。本文将会介绍 PWA 实现 Push Notification 的方法以及在浏览器中的展示,并附有代码示例。
实现 Push Notification
PWA 实现 Push Notification 主要依赖于两个 API:Push API 和 Notification API。
其中,Push API 负责推送消息给用户的浏览器,而 Notification API 则负责在浏览器中展示通知消息。两者的相互配合才能实现完整的 Push Notification。
Push API
Push API 提供了向用户浏览器推送消息的能力。具体而言,它提供了以下两个主要对象:
- PushManager:推送管理器,负责管理订阅信息以及推送消息。
- PushSubscription:推送订阅,代表了浏览器对某个服务器的消息推送订阅。
下面是一个简单的 PushManager 示例:
// 初始化 PushManager navigator.serviceWorker.ready.then(registration => { registration.pushManager.getSubscription().then(subscription => { if (subscription) { // 已经订阅过 console.log(subscription); } else { // 没有订阅过,发起订阅请求 registration.pushManager.subscribe({ userVisibleOnly: true }) .then(newSubscription => { console.log(newSubscription); }) .catch(error => { console.warn(error); }); } }); });
上述代码中,通过 navigator.serviceWorker.ready
获取到 Service Worker 的 registration,再通过 registration.pushManager
获取到 PushManager。随后,使用 pushManager.getSubscription()
来检查是否已经订阅过。如果已经订阅过,直接用 console.log()
输出订阅信息;否则,使用 pushManager.subscribe()
来发起订阅请求,并将 userVisibleOnly
设置为 true
,表示当前仅推送可见的通知。
Notification API
Notification API 负责在浏览器中展示通知消息。为了保证用户体验和隐私安全,现代浏览器对通知消息的展示和交互都有了更加精细的规定。
在 Chrome(版本 80+)和 Edge(版本 84+)中,通知消息必须经过用户的许可才能展示。具体而言,需要在页面中请求 permission,用户授权后才能进行展示:
// 请求 permission Notification.requestPermission().then(permission => { console.log(permission); }); // 展示通知 if (Notification.permission === "granted") { new Notification("Hello, world!", { body: "This is a test notification.", icon: "/images/icon-192x192.png" }); }
在 Safari 中,通知消息必须是 HTTPS 环境下的 Web App,且必须经过用户的许可或者具有合法的交互操作。
在浏览器中的展示
Push Notification 通知消息在浏览器中的展示分为三种情况:用户当前在浏览器页面内、用户当前在系统使用其他应用程序、用户当前处于系统锁屏状态。各种情况下的通知消息展示方式如下:
用户当前在浏览器页面内
推送消息时,如果用户的浏览器页面有打开,则当前页面会同时收到消息并在通知栏中展示通知。
用户当前在系统使用其他应用程序
如果用户当前不在浏览器页面,则系统将自动弹出通知消息,通知用户有新消息到达。
用户当前处于系统锁屏状态
如果用户当前处于系统锁屏状态,则通知栏会展示消息摘要和应用程序图标,同时会提供通知预览功能:
总结
本文介绍了 PWA 如何实现 Push Notification 的方法以及在浏览器中的展示方式,并附有代码示例。在实现 Push Notification 的过程中,需要注意考虑用户体验和隐私安全等方面的问题。推送消息时,尽量给用户提供有价值的内容,最大程度地避免对用户造成骚扰。同时,为了确保用户的隐私安全,推送消息也需要满足浏览器的要求和规定。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ae146dadd4f0e0ff7a0c8c