PushManager - 接收来自第三方服务器的通知,以及请求 URL 以获得推送通知
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
PushManager
是 Push API 的接口,提供了一种来接收来自第三方服务器的通知,以及请求 URL 以获得推送通知的方法。
可通过 ServiceWorkerRegistration.pushManager
属性访问此接口。
注意:此接口取代了过时的
PushRegistrationManager
接口以前提供的功能。
属性
PushManager.supportedContentEncodings
返回支持的内容编码的数组,这些内容可用于加密推送消息的内容。
方法
PushManager.getSubscription()
检索现有的推送订阅。它返回一个 Promise
对象,该对象解析为包含现有订阅详细信息的 PushSubscription
对象。如果不存在现有订阅,则解析为 null
值。
PushManager.permissionState()
返回一个 Promise
,它解析为当前 PushManager
的许可状态,该状态将是 'granted'
,'denied'
或 'prompt'
。
PushManager.subscribe()
订阅推送服务。它返回一个 Promise
对象,该对象解析为包含推送订阅详细信息的 PushSubscription
对象。如果当前服务工作者没有现有的订阅,则会创建一个新的推送订阅。
废弃的方法
PushManager.hasPermission()
返回一个 Promise
,它解析为发出请求的 Web 应用程序的 PushPermissionStatus
,值是 granted
,denied
,default
之一。被替换为 PushManager.permissionState()
。
PushManager.register()
订阅推送订阅。被替换为 PushManager.subscribe()
。
PushManager.registrations()
检索现有的推送订阅。被替换为 PushManager.getSubscription()
。
PushManager.unregister()
注销并删除指定的订阅端点。在更新的 API 中,通过调用 PushSubscription.unsubscribe()
方法取消注册订阅。
实例
this.onpush = function(event) {
console.log(event.data);
// 从这里我们可以将数据写入 IndexedDB,将其发送到任何打开的窗口,显示通知等。
}
navigator.serviceWorker.register('serviceworker.js').then(
function(serviceWorkerRegistration) {
serviceWorkerRegistration.pushManager.subscribe().then(
function(pushSubscription) {
console.log(pushSubscription.endpoint);
// 应用服务器所需的推送订阅详细信息现在可用,并且可以发送给它,例如使用 XMLHttpRequest。
}, function(error) {
// 在开发过程中,通常将错误记录到控制台。在生产环境中,也可能将有关错误的信息报告回应用服务器。
console.log(error);
}
);
});
规范
规范 | 状态 | 备注 |
---|---|---|
Push API PushManager 的定义 |
工作草案 | 初始定义。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
getSubscription | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
hasPermission | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
permissionState | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
register | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
registrations | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
subscribe | 423 | 16 17 | 441 | 不支持 | 29 | 不支持 |
supportedContentEncodings | 60 | 16 17 | 441 | 不支持 | 47 | 不支持 |
unregister | 42 | 16 17 | 441 | 不支持 | 29 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
getSubscription | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
hasPermission | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
permissionState | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
register | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
registrations | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
subscribe | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
supportedContentEncodings | 不支持 | 60 | 未知 | 482 | 未知 | 44 | 不支持 |
unregister | 不支持 | 42 | 未知 | 482 | 未知 | 29 | 不支持 |
1. 在 Firefox 45 和 52 扩展支持版本(ESR)中,服务 worker(和 Push)已被禁用。
2. Push enabled by default.
3. options
参数的 applicationServerKey
必须有值。