Lin*_*ham 7 google-chrome service-worker push-api progressive-web-apps
PushManager.getSubscription()
检索现有推送订阅.它返回一个Promise,它解析为包含现有订阅详细信息的PushSubscription对象.如果不存在现有订阅,则解析为空值.
[...]
PushManager.subscribe()
订阅推送服务.它返回一个Promise,它解析为一个PushSubscription对象,其中包含推送订阅的详细信息.如果当前服务工作者没有现有订阅,则会创建新的推送订阅.
根据MDN的pushManager文档.除了getSubcription()可能使用空值解析的点之外,方法几乎相同.
我基本上明白我可以简单地使用subscribe(),Service Worker将尝试获取订阅以备不时使用,并且如果不可用则创建新订阅.
=>但我正在尝试做别的事情.我想先尝试订阅,如果解决了,null我会尝试订阅它.
navigator.serviceWorker.register('./worker.js')
.then(function(reg) {
// Subscribe push manager
reg.pushManager.getSubscription()
.then(function(subscription) {
if(subscription){
// TODO... get the enpoint here
} else {
reg.pushManager.subscribe()
.then(function(sub){
// TODO... get the endpoint here
});
}
}, function(error) {
console.error(error);
})
});
Run Code Online (Sandbox Code Playgroud)
但后来我最终得到了错误:
未捕获(在承诺中)DOMException:订阅失败 - 没有活动的服务工作者
这很令人困惑,我怀疑这是Chrome服务工作者的推送API的限制,或者可能是一个错误.有没有人有关于这种奇怪行为的任何信息?
问题是您的服务工作者已注册,但尚未激活.
注册服务工作者后,您可以使用navigator.serviceWorker.ready而不是订阅.
如果要尽快使服务工作程序处于活动状态,可以使用skipWaiting和Clients.claim,如本ServiceWorker Cookbook配方中所述.
| 归档时间: |
|
| 查看次数: |
1723 次 |
| 最近记录: |