无法订阅推送通知

Posted

技术标签:

【中文标题】无法订阅推送通知【英文标题】:Can't subscribe to Push notification 【发布时间】:2016-12-26 17:10:22 【问题描述】:

我正在尝试订阅 PushManager 以发送推送通知,但调用 subscribe 时总是出错。

这是我的订阅电话

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

如您所见,没有什么奇怪的,而且那个调用总是抛出

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

我不知道为什么会这样。 到目前为止我检查过的内容

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

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

编辑registerServiceWorker函数上的所有注册码都是here。

谢谢。

【问题讨论】:

【参考方案1】:

假设您已经正确注册了 service worker,使用类似:

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

我建议您像我一样为您的 Service Worker 使用相对路径,而不是像您在代码中那样使用 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 代码以供参考。

【讨论】:

我使用了window.location.origin,因为当有人导航到另一条路线时,我收到了找不到服务人员的错误,也许scope 选项可以解决这个问题。其余代码等价于你的答案 经过一番搜索,我找到了解决方案。我在manifest.json 文件中使用了错误的gcm_sender_id。我在谷歌开发者控制台中使用了项目ID,当我changed it by the project number时,它工作了! :) 对你有好处!但这不应该是问题。仅当您触发推送而不是订阅时,您才会遇到 gcm_sender_id 不正确的问题。我猜根范围对你有用! :) 我不这么认为,因为我还没有做出改变。并且只有在发送推送时使用的 gcm 密钥是在服务器中注册的 gcm api 密钥,与清单的 id 不同。实际上,如果您尝试在清单中没有 gcm_sender_id 属性的情况下进行订阅,则会引发不同的错误【参考方案2】:

我想提一下在使用 FCM 推送服务订阅浏览器/网络推送用户时发生在我身上的与 DOMException 相关的事情,也就是说,订阅就像魔术一样工作,但是当我测试我的应用程序时,我遇到了 FCM 推送服务/服务器很多。这导致了一个 TOO_MANY_REGISTRATIONS 错误,可以通过chrome://gcm-internals 进行检查。该解决方案非常合乎逻辑,只需在 chrome 上创建一个新的配置文件/用户。

FCM 拒绝了以前 chrome 用户的任何注册请求,我相信 FCM 将其视为垃圾邮件或有人入侵了他们的服务器。感谢@Dhruv Batheja 让我注意到这一点。

【讨论】:

:) - - - - - -(:

以上是关于无法订阅推送通知的主要内容,如果未能解决你的问题,请参考以下文章

MobileFirst - Android 推送 - 无法订阅,通知令牌未在服务器上更新

Google Drive API 推送通知订阅 400“解析错误”

Android&Quickblox (api 3.2):订阅推送通知

Quickblox:无法获得推送通知

节点 js 中的 EWS 推送通知

一次通话向所有订阅者发送网络推送通知