2016-12-26 125 views
0

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

这是我的订阅调用

registration.pushManager.subscribe({ userVisibleOnly: true }) 
    .then(function (subscription) { /* ... */}) 
    .catch(function (err) { /* ... */}) 

没有什么奇怪的,你可以看到,而且呼叫总是抛出

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

我我不确定这是为什么。 我已经检查到目前为止

  • 我在manifest.json一个gcm_sender_id属性。
  • 通知允许在客户端授予。
  • registration.pushManager.getSubscription()总是得到null并订阅总是抛出上述错误。

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

编辑:所有注册码为hereregisterServiceWorker函数。

感谢。

回答

2

假设你已经注册的服务人员正确,使用类似:

navigator.serviceWorker.register('/serviceworker.js', { 
       scope: '/' 
      }); 

我建议像我一样,而不是使用的window.location.origin喜欢你,你使用相对路径为您服务工作者在你的代码中做了这样的事情,最好将服务工程文件保存在根目录

使用此方法订阅推送并获取端点。

navigator.serviceWorker.ready 
      .then(function(serviceWorkerRegistration) { 
       return serviceWorkerRegistration.pushManager.subscribe({ 
        userVisibleOnly: true 
       }); 
      }) 
      .then(function(subscription) {console.log(subscription.endpoint);}); 

如果仍然不工作: - 尝试从Chrome中注销现有职工:// serviceworker-内部,并确保您关闭所有选项卡,当你做到这一点。

如果仍然不起作用: - 尝试通过点击您在Chrome浏览器右上角的姓名来创建新的Chrome配置文件。 (我曾遇到过这种情况)

查询this代码供您参考。

+0

我用'window.location.origin',因为当有人导航到另一个路线时,我得到一个服务工作人员没有找到错误,也许'范围'选项会解决这个问题。其余代码相当于您的答案 –

+0

经过一番搜索后,我找到了我的解决方案。我在我的'manifest.json'文件中使用了错误的'gcm_sender_id'。我在Google开发者控制台中使用了项目ID,当我[通过项目编号改变它](https:// github。com/YerkoPalma/blank-app-shell/commit/34cd59cfb37e6247f3d8bdc69b94e926753052ad#diff-4b1eb3dc48c4e16d49db5b42298fe654),它工作! –

+0

:)对你有好处!但这不应该是问题。只有当您触发推送而不是您订阅时,您才会遇到错误的gcm_sender_id问题。我猜测根范围为你做了窍门! :) –