无法订阅推送通知

时间:2016-12-26 17:10:23

标签: javascript google-chrome push-notification service-worker

我试图订阅PushManager来发送推送通知,但是我在调​​用订阅时总是收到错误。

这是我的订阅电话

manifest.json

你看不出任何奇怪的东西,而且这个召唤总是在抛出

  

DOMException:注册失败 - 推送服务错误

我不确定为什么会这样。 我到目前为止所检查的内容

  • 我的registration.pushManager.getSubscription()中有null个属性。
  • 通知的权限在客户端授予。
  • registerServiceWorker始终获取<ul class="ingred-list ">并且订阅总是抛出上述错误。

我还应该看看什么?我们欢迎任何成功订阅推送通知的帮助,顺便说一句,我使用chrome 55,如果您需要更多信息,请告诉我。

编辑//ul[@class="ingred-list "]/li函数上的所有注册码均为here

感谢。

2 个答案:

答案 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引起我的注意。