我们可以在 ios serviceworker 上运行 firebase 实时监听吗?

Posted

技术标签:

【中文标题】我们可以在 ios serviceworker 上运行 firebase 实时监听吗?【英文标题】:Can we run firebase realtime listening on ios serviceworker? 【发布时间】:2018-04-10 04:15:50 【问题描述】:

ios 11.3 开始,支持 serviceworker 功能

即使它不支持通知。我想知道是否可以运行任何实时侦听器(例如 firebase 数据库)来接收实时数据并使用ServiceWorkerRegistration.showNotification 来显示本地通知

有可能吗?

【问题讨论】:

如果你需要从firebase实时获取数据,你可以使用observe(DataEventType.value,....)或者你可以使用web socket IO listener on请进一步解释问题 @a.masri 可以在“serviceworker”中运行吗? 到目前为止我还没有理解你的问题,但是如果你想在监听器 websocket 上显示本地通知,你可以这样做,但是如果你的应用程序被杀死,这个解决方案就不起作用,我希望我能理解你的问题 @a.masri 你知道什么是“服务工作者”吗? 如果你的意思是 service worker js 是的,我认识他 【参考方案1】:

虽然iOS don't support Web Push notifications yet(截至 2018 年 4 月),您所能做的就是为来自服务器端的数据(在您的情况下为 Firebase)设置一个事件侦听器,并接收该数据以将其显示为通知/警报或其他方式您想在您的应用程序中展示(而不是在 iOS 通知区域)。

很遗憾,这是处理 iOS 通知的最佳方式。我知道,这对开发人员来说并不是那么好 :) 希望 Apple 加快 PWA 的速度。他们比服务工人党本身晚了一年多。期待什么!

更新:WhatWebCanDo.today 和 one from Apple 上的另一个链接表示 iOS-Safari 不支持推送通知作为 w3c 定义的 Web 标准。但看起来有可用的 OS X safari 专有解决方案。

【讨论】:

have an event listener for data from server side and receive that data to show it as an Notification 这是我想做的,但在 serviceworker 中这就是重点。因此,即使页面关闭,服务人员仍在后台运行,并且可以像真正的推送通知一样显示通知 真正的问题是你没有办法发送通知。这与监听服务器更改或其他任何内容的选项无关。当应用程序被积极使用时,您是否能够推送通知?猜不……原因是 safari 或 iOS 仍然不支持它。因此,在他们支持它之前,唯一的其他方法是拥有一个原生包装器......像 Cordova 来包装你的 PWA 并使用原生推送通知。是的 .. 不是纯粹的 PWA 解决方案.. 但如果这是一个必须具备的功能,这就是你现在为 iOS 所获得的一切。你仍然得到服务人员。但是你必须通过 App Store 部署选项。 如果您正在考虑让服务人员监听数据并在应用程序(而不是系统)通知中显示通知,这也是不可能的,因为 iOS 将应用程序置于没有状态保留且不会让您在没有用户明确请求的情况下打开应用程序。所以在这两种情况下,问题甚至不在于如何监听数据。这是关于你如何显示通知的问题,截至 2018 年 4 月,纯 PWA 没有适用于 iOS 的解决方案。我知道这不是你喜欢听到的。但不幸的是,这就是我们目前所得到的一切。 同样在第二个选项中,当他积极使用其他应用程序时,打开 iOS 应用程序以显示在应用程序通知中并不是一个很好的用户体验。出于同样的原因,Apple 不允许这样做。 请查看我关于 safaris 解决方案的更新。 W3C 使用特定的 API 语法定义了哪些 Web 标准。这并不能保证所有浏览器在定义后立即支持。与其他浏览器供应商相比,许多浏览器供应商需要花费大量时间(例如通常速度很快的 chrome)。推送通知就是其中之一。 Apple 仍然不支持 W3C 标准 API。 Whatwebcando.today 是您亲自验证这一点的好地方。【参考方案2】:

不幸的是,虽然原生 IOS 上的 Safari 越来越接近我们在 chrome、firefox 等中看到的功能,但我们目前(截至本评论)无论如何都没有在原生 IOS Safari(或任何其他 ios)上发送推送通知chrome等浏览器)。

Mac 版 Safari 使用自定义 mac 解决方案来处理这些通知,您可以在此处查看 https://developer.apple.com/notifications/safari-push-notifications/。

【讨论】:

【参考方案3】:

如果您使用的是 firebase,那么您会在 firebase 项目的主终端中找到推送通知,并且您将无法在其上运行 service worker javascript 以进行离线数据处理,但您可以将其用于推送通知。你能解释更多关于问题的简短吗?!

【讨论】:

第一点:Safari iOS 不支持网络推送,包括 FCM 和现在的任何其他服务。第二点:Safari iOS 最近确实支持 serviceworker,这意味着我们仍然可以在页面外的后台线程中运行一些脚本。这些点让我想知道我们可以在 serviceworker 中运行 firebase db listener。所以我们可以启动通知,即使 Safari iOS 不直接支持它 @Thaina 你试过了吗?如果是的话,你能分享一下吗? (也许是github?) @jvitor83 我没有自己的ios设备,所以无法尝试

以上是关于我们可以在 ios serviceworker 上运行 firebase 实时监听吗?的主要内容,如果未能解决你的问题,请参考以下文章

“未捕获(承诺)的DOMException:无法为范围注册ServiceWorker”-脚本资源位于重定向后面,不允许使用

ServiceWorker 使用

iOS 11.3 的 WKWebView 中的 Service Worker 不可用

React脚手架工程化项目里ServiceWorker.js文件作用

Service Worker 与 Web Worker

Firebase Hosting(Angular 8 + Service Worker)没有在刷新时更新