1

Service Worker 中的推送支持是否依赖于 Firebase(以及 Apple 的同等产品)?我发现的所有教程都有一个注册 Firebase 帐户的步骤,但对于我们的网络应用程序来说,这是不行的,因为它将在没有互联网访问的场所使用。

我会假设可以注册一个符合操作系统将注册的协议的 URL,但我找不到任何此类信息。

如果需要 Internet 访问以支持 Service Worker 推送支持,我假设 Web 应用程序接收后台通知的唯一选择是将其包装在本机 Web 视图中并使用它来调用本地服务。

4

2 回答 2

1

如果您在本地网络服务器上提供本地推送服务,可以从客户端的浏览器通过 HTTPS URL 访问,则不需要 Internet 或第三方推送服务。您的本地推送服务需要实现W3C Push API 规范,您也可以在 Web 或 GitHub 上搜索您选择的语言的开源推送服务。

浏览器将需要一个 HTTPS URL,该 URL 通过主机名或 IP 解析到您网络上的服务器,因此很可能会使用自签名 SSL 证书。设备将需要隐式受信任或显式添加为受信任 CA/证书的证书(或 CA)。

于 2018-05-14T18:32:35.613 回答
0

tldr; 这取决于您的浏览器,因为它需要在每个浏览器级别上进行配置。截至 2018 年 5 月,似乎 Firefox 是唯一允许您配置服务 url 的。对于其他所有人,您需要互联网才能传递推送消息。

2017 年 12 月的Push API 规范(截至 2018 年 5 月的官方规范)是这样说的:

术语推送服务是指允许应用程序服务器向 Web 应用程序发送推送消息的系统。推送服务为其服务的推送订阅提供一个或多个推送端点。

每个用户代理只有一个推送服务,并且不能从默认值更改。这种限制是由于各种与性能相关的问题,包括运行可靠推送服务的复杂性以及如果设备可以连接一组无限的推送服务对电池寿命的影响。

2018年4 月,他们放宽了这一要求规范现在允许配置不同的提供者


我还建议阅读这个 webpush 工作原理的简化版本,其中要点如下:

  1. 首先终端用户的浏览器需要与浏览器厂商的推送服务器建立推送通道。在 Firefox 的情况下,这将是 Mozilla 服务器,在 Chrome 的情况下,这将是 Google 服务器。完成后,一个唯一的端点 URL 被发送到浏览器,浏览器生成一个公钥和私钥对,该对存储在浏览器内部。然后,浏览器会生成一个公钥和一个用户身份验证机密,供您的服务器使用,以对发送到用户浏览器的消息进行端到端加密。
  2. 浏览器将公钥、身份验证密钥和端点 URL 发送到您的服务器,服务器以某种方式将其存储(在数据库中、内存中、文件中,等等)。
  3. 当服务器希望发送推送消息时,它会检索存储的推送消息订阅信息,并使用公钥和用户身份验证创建加密消息。然后服务器联系端点 URL 并告诉它推送一些内容到用户代理。
  4. 鉴于一切正常,推送服务器将消息推送到用户的浏览器。
于 2018-05-14T20:39:13.393 回答