Google chrome “pushManager.subscribe”和“pushManager.getSubscription”服务工作者&x27;s
PushManager.getSubscription() 检索现有的推送订阅。它返回解析为包含现有订阅详细信息的PushSubscription对象的承诺。如果不存在现有订阅,则解析为空值 [……] PushManager.subscribe() 订阅推送服务。它返回解析为包含推送订阅详细信息的推送订阅对象的承诺。如果当前服务工作者没有现有订阅,则会创建新的推送订阅 根据MDN的Google chrome “pushManager.subscribe”和“pushManager.getSubscription”服务工作者&x27;s,google-chrome,service-worker,progressive-web-apps,push-api,Google Chrome,Service Worker,Progressive Web Apps,Push Api,PushManager.getSubscription() 检索现有的推送订阅。它返回解析为包含现有订阅详细信息的PushSubscription对象的承诺。如果不存在现有订阅,则解析为空值 [……] PushManager.subscribe() 订阅推送服务。它返回解析为包含推送订阅详细信息的推送订阅对象的承诺。如果当前服务工作者没有现有订阅,则会创建新的推送订阅 根据MDN的pushManager文档。除了在getSubcription()的情况下可能会使用空值解析外,其他方法几乎相同 我
pushManager
文档。除了在getSubcription()
的情况下可能会使用空值解析外,其他方法几乎相同
我基本上理解,我可以简单地使用subscribe()
,如果订阅可用,服务人员将尝试获取订阅,如果订阅不可用,还将创建新的订阅
=>但我想做些别的事。我想先尝试获取订阅,如果使用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);
})
});
但我最终还是犯了一个错误:
未捕获(承诺中)DomeException:订阅失败-无活动服务工作进程
这是令人困惑的,我怀疑这是Chrome对服务人员推送API的限制,或者可能是一个bug。有人知道这种奇怪行为的相关信息吗?问题是您的服务人员已注册,但尚未激活
您可以在注册服务人员后立即使用而不是订阅
如果要尽快激活服务人员,可以使用和,如中所述