我试图订阅PushManager来发送推送通知,但是我在调用订阅时总是收到错误。
这是我的订阅电话
manifest.json
你看不出任何奇怪的东西,而且这个召唤总是在抛出
DOMException:注册失败 - 推送服务错误
我不确定为什么会这样。 我到目前为止所检查的内容
registration.pushManager.getSubscription()
中有null
个属性。 registerServiceWorker
始终获取<ul class="ingred-list ">
并且订阅总是抛出上述错误。我还应该看看什么?我们欢迎任何成功订阅推送通知的帮助,顺便说一句,我使用chrome 55,如果您需要更多信息,请告诉我。
编辑://ul[@class="ingred-list "]/li
函数上的所有注册码均为here。
感谢。
答案 0 :(得分:2)
假设您已正确注册服务工作者,请使用以下内容:
navigator.serviceWorker.register('/serviceworker.js', {
scope: '/'
});
我建议您像我一样使用服务工作者的相对路径,而不是像在代码中那样使用 window.location.origin ,并且最好将serviceworker文件保留在的根强>
使用此方法订阅推送并获取端点。
navigator.serviceWorker.ready
.then(function(serviceWorkerRegistration) {
return serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true
});
})
.then(function(subscription) {console.log(subscription.endpoint);});
如果仍然无效: - 尝试从chrome:// serviceworker-internals注销现有工作人员,并确保在执行此操作时关闭所有选项卡。
如果仍然无效: - 点击Chrome右上角的名称,尝试创建新的Chrome配置文件。 (我曾经面对这一次)
检查this代码以供参考。
答案 1 :(得分:1)
我想提及与DOMException有关的事情,同时使用FCM推送服务订阅浏览器/ Web推送用户,即订阅工作就像魔术一样,但是当我测试我的应用程序时,我遇到了FCM推送服务/服务器很多。这导致了TOO_MANY_REGISTRATIONS错误,可以通过chrome://gcm-internals进行检查。该解决方案非常合乎逻辑,只需在chrome上创建一个新的配置文件/用户即可。
FCM拒绝了以前的chrome用户的任何注册请求,我相信FCM会将其视为垃圾邮件或黑客入侵其服务器的人。感谢@Dhruv Batheja引起我的注意。