11

我正在尝试在我的网站上实现推送通知(使用 Pushpad)。因此,我创建了一个包含以下内容的“manifest.json” :

{
    "gcm_sender_id": "my_gcm_sender_id",
    "gcm_user_visible_only": true
}

当然,我创建了一个有效的 GCM 帐户并有一个发件人 ID

我将manifest.json放入我的根目录,并将这一行添加到我的index.php中:

<link rel="manifest" href="/manifest.json">

使用Firefox一切正常,我可以发送和接收推送通知(所以我认为 manifest-include 工作正常),但Chrome不能工作......

控制台显示以下错误:

Uncaught (in promise) DOMException: Registration failed - manifest empty or missing

我在谷歌上搜索了很长时间,并尝试了我找到的所有内容,但没有任何效果。

我尝试了什么:

  1. 使用“编辑器”创建manifest.json并将其保存为类型所有类型(因此没有隐藏的.txt文件)以及UTF-8编码。
  2. 重新启动 Chrome
  3. 清除了 Chrome 的缓存、历史记录等。

我真的希望有人能帮助我。

4

7 回答 7

5

对我来说,这是一个重定向。必须返回 200 状态代码(manifest.json必须直接从服务器获得),没有任何重定向。您可以通过以下方式查看回复

wget --max-redirect=0 https://example.com/manifest.json

或者

curl https://example.com/manifest.json

于 2016-10-26T05:40:24.220 回答
3

我遇到了同样的问题,在 head 标签之后添加了清单文件。这对我有用。干杯!

于 2016-12-07T07:58:44.983 回答
1

这可能是您的 Service Worker 范围的问题。当我重新排列我的文件/目录时,我遇到了类似的问题。确保您的 sw.js 与您的 manifest.json 处于同一级别,否则服务人员将无法找到您的清单。尝试将它们都放在目录的根目录中。或者,您可以scope通过将其添加到来指定您的服务工作者serviceWorker.register()

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
  .then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
}

在此处阅读更多信息: https ://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers

于 2017-05-11T12:53:42.327 回答
0

添加以下块为我解决了这个问题:

self.addEventListener('push', (event) => {
  const title = 'Get Started With Workbox';
  const options = {
    body: event.data.text()
  };
  event.waitUntil(self.registration.showNotification(title, options));
});
于 2020-10-03T11:16:11.580 回答
0

似乎有三种方法可以修复此错误:a)“manifest.json”文件没有重定向。b) 在标签顶部放置一个指向该文件的链接。c) 请确保在此之前没有其他清单文件,因为 Web 推送脚本似乎会尝试导入第一个并由于错误的数据而返回错误。我已经尝试了所有这三种方法,最后迫使 Chrome 表现得很好。

于 2018-12-19T11:25:41.590 回答
0

因为我在万维网的任何地方都没有找到答案,但在一段时间后设法让它工作我想为其他可能有同样问题的用户提供我的解决方案/答案:

在包含 Pushpad 文件的文件中,我在 -Tag 之前编写了一些 PHP 代码<head>以包含一些文件,例如用于数据库连接。<head>在我将 PHP 代码移到-Tag下方后,一切正常。

于 2017-10-30T09:51:17.947 回答
0

想知道您的“manifest.json”是否可以公开访问?

如果不是,也许您可​​以尝试将其设置为可公开访问,看看是否有帮助。

似乎当前的 chrome 在获取“manifest.json”时不会提供 cookie。

于 2016-07-06T05:24:32.777 回答