我们能在iOS ServiceWorker上运行Firebase实时监听吗?

9

从iOS 11.3开始,支持serviceworker功能。

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

这是可能的吗?


如果你需要实时从Firebase获取数据,可以使用observe(DataEventType.value,....),或者你可以使用Web Socket IO的listener on - a.masri
@a.masri 这些能在“serviceworker”中运行吗? - Thaina Yu
到目前为止,我还没有理解你的问题,但是如果你想在监听器websocket上显示本地通知,你可以这样做,但是如果你的应用程序被杀死,这个解决方案将不起作用。我希望我理解了你的问题。 - a.masri
@a.masri 你知道什么是“serviceworker”吗? - Thaina Yu
如果你是指 Service Worker 的 JavaScript,是的,我知道它。 - a.masri
3个回答

15

虽然截至2018年4月,iOS尚不支持Web Push通知,但你可以在服务器端(在你的情况下为Firebase)添加事件监听器以接收数据,并将其显示为应用程序内的通知/警报或任何你想要呈现的方式(而不是在iOS通知区域中)。

不幸的是,这是目前处理iOS通知的最佳方式。我知道,这对开发人员来说并不是很好 :) 希望苹果公司能够加快PWA的速度。他们自己都比Service worker晚了一年多。我们应该期待什么呢!

更新:WhatWebCanDo.today上还有一个链接和来自Apple的链接,其中指出iOS-Safari不支持w3c定义的Web标准推送通知。但是看起来OS X Safari提供了一种专有解决方案。


1
在服务器端设置一个事件监听器,接收数据并将其作为通知显示出来。这就是我想做的事情,但是在serviceworker中实现它。因此,即使页面关闭了,服务工作者仍在后台运行,并且可以像真正的推送通知一样显示通知。 - Thaina Yu
1
真正的问题是你没有发送通知的方法。这与监听服务器更改或其他选项无关。当应用程序处于活动状态时,你能够推送通知吗?猜测不行...原因是Safari或iOS仍然不支持它。因此,在它们支持之前,唯一的其他方法是使用本地包装器,例如Cordova来包装你的PWA并使用本机推送通知。是的...不是纯PWA解决方案...但如果这是必须具备的功能,那么现在在iOS上只有这个选择。你仍然可以使用服务工作者。但你必须通过App Store部署选项进行操作。 - Anand
如果您想让服务工作者监听数据并在应用程序(而不是系统)通知中显示通知,那也不可能,因为iOS将应用程序置于无状态保留,并且不会让您在用户明确请求之前打开应用程序。因此,在这两种情况下,问题甚至不是如何监听数据。就是关于如何显示通知,截至2018年4月,纯PWA在iOS上没有解决方案。我知道这不是您想听到的。但不幸的是,这就是我们现在所拥有的全部。 - Anand
另外,在第二个选项上,当用户正在使用其他应用程序时,打开iOS应用程序以显示应用内通知并不是一个很好的用户体验。出于同样的原因,苹果不会允许这样做。 - Anand
我记得有一个函数叫做 showLocalNotification,对吧? - Thaina Yu
1
请检查我在Safari专有解决方案上的更新。W3C定义了特定API语法的Web标准,但这并不能保证所有浏览器一旦定义就支持。许多浏览器供应商需要比其他浏览器(如通常很快的Chrome)花费更多的时间。推送通知就是其中之一。苹果仍然不支持W3C标准API。Whatwebcando.today是一个很好的地方,可以自行验证。 - Anand

1
很遗憾,尽管原生IOS上的Safari越来越接近于Chrome、Firefox等浏览器的功能,但目前(截至本评论)我们没有任何方法可以在原生IOS Safari(或任何其他IOS浏览器,如Chrome等)中发送推送通知。Mac的Safari使用了一种自定义的Mac解决方案进行这些通知,您可以在此处查看https://developer.apple.com/notifications/safari-push-notifications/

-3
如果您正在使用Firebase,则可以在Firebase项目的主终端中找到推送通知,但您将无法在其中运行服务工作器JavaScript以进行离线数据处理,但是您可以将其用于推送通知。您能否简要解释一下问题?


1
第一点:Safari iOS不支持Web推送,包括FCM和任何其他服务。 第二点:最近Safari iOS支持serviceworker,这意味着我们仍然可以在页面外的后台线程中运行一些脚本。这些观点让我想知道是否可以在serviceworker中运行Firebase数据库监听器。这样,即使Safari iOS不直接支持它,我们也可以启动通知。 - Thaina Yu
@Thaina,你试过了吗?如果是的话,能分享一下吗?(可能在Github上?) - jvitor83
@jvitor83 我没有自己的iOS设备,所以无法尝试。 - Thaina Yu

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