PushManager订阅承诺从未被实现或拒绝。

11

我目前正面临一些Chrome (Chromium)版本的问题,其中来自ServiceWorker的PushManager.subscribe承诺处于挂起状态。

代码本身相当简单:

return serviceWorkerRegistration.pushManager.subscribe({
    userVisibleOnly: true
  });

我有一个有效且可访问的JSON清单,提供了GCM Sender ID。 我还尝试了不同的实现,如这个帖子中所述,但结果仍然相同。

订阅部分在每个47+版本中都可以正常工作,旧版本存在问题。(我使用Chromium连续构建来测试不同的主要版本)。

同时请注意,在Ubuntu上使用Chromium 46(及以下版本)时,承诺会在15分钟后被拒绝,并显示Internal Server Error


你需要支持这么老的Chrome版本吗?当前稳定版本是49。也许Chrome与GCM通信方式发生了变化,不再支持旧版本? - Marco Castelluccio
实际上,由于Chrome具有自动更新功能,因此旧版本用户的差异为2或3个版本是较小的。尽管如此,这是一个全球性的数字,可能在某些地区/国家更新会稍晚一些。GCM缺乏支持是来自我使用的Chromium构建还是“旧稳定版”Chrome发布的问题? - Arturo
我不确定,我在我的Web推送库(https://github.com/marco-c/web-push)中运行测试,Firefox和Chromium都可以工作,但是在测试中我总是使用最新版本。 - Marco Castelluccio
7个回答

1

我在使用公司代理时遇到了同样的问题。由于没有互联网连接,因此无法建立订阅,Promise 永远不会解决。


1

我在清单文件中设置了一个名为 gcm_user_visible_only 的参数,并将其设置为 true。但是,如果我从 subscribe 方法中删除该参数,我会收到一个错误消息:“Chrome 目前仅支持 Push API 用于订阅用户可见消息的推送 [...]”。我认为你的示例是在 Chrome44+ 中介绍的。 - Arturo
仍然无法工作。没有返回或拒绝承诺! - mythicalcoder

1

看起来Chromium团队正在处理。如果我没有记错,修复将在Chrome 55上发布。


0

这个问题在 Windows 7 上的 Chrome 55.0.2883.87 上可以重现。订阅承诺既没有解决也没有拒绝。但是这只发生在特定组合的一台机器上。


0

我在Chrome 67中遇到了同样的问题,重新启动浏览器解决了它。


0
当您订阅pushManager时,将向浏览器的推送服务发送一个请求以获取订阅端点。如果它未能满足或拒绝,很可能是因为无法建立与您的浏览器推送服务的连接问题。

0

更新并重新启动我的 Google Chrome 对我来说解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接