我们在chrome和Firefox中使用FCM实现了推送通知,它工作正常,但Safari不支持FCM必须的Service Workers。
有人处理过这类问题吗?有什么建议吗?
虽然 Service Workers 现在在 Safari 上工作,但他们还不够。
文档说:
FCM JavaScript API 允许您在支持推送 API 的浏览器中运行的 Web 应用中接收通知消息。这包括此支持矩阵中列出的浏览器版本。
因此,通过 FCM 接收消息的能力取决于实现 Web 推送 API 的浏览器,而 Web Kit 没有。
Safari基于 Web Kit 构建,因此不支持 Web 推送,因此这意味着 Safari 无法接收 FCM 通知。iOS设备上的所有浏览器也是基于Web Kit构建的(因为这是Apple的要求(,因此FCM也无法在其中任何浏览器中接收消息。
如果要测试运行代码的环境是否可以接收来自 FCM 的消息,可以使用以下代码片段:
if (firebase.messaging.isSupported())
...
}
更新 (2023-02-16(:WebKit.org 刚刚宣布在 iOS/iPadOS 16.4 beta 1 中支持 Web 推送。我们正在调查这是否也会影响 Firebase 云消息传递向使用此版本的设备交付的能力。
Safari 仍然不支持 Web Push API,因此不支持 Firebase 云消息服务。
以下是 Firebase 中支持的浏览器: https://firebase.google.com/support/guides/environments_js-sdk#browsers
我建议使用.isSupported()
而不是其他解决方案。
if (firebase.messaging.isSupported())
const messaging = firebase.messaging();
}
有关.isSupported()
的详细信息,请参阅文档。
我不确定这种新的 Safari 和服务工作者情况,但我尝试在我的 iOS 应用程序中实现 FCM 推送通知,并且必须体验到您首先需要 APN(Apple-Push-Notification(证书。如果您正在使用Safari,我不确定是否需要这样做,但我可以想象Apple也希望首先将其推送通知重定向到APN服务器。
苹果表示Safari 16(macos(现在应该支持推送API,但我无法使推送API通知正常工作。我尝试了Firebase消息传递Web v9(据我所知,它应该是Push API的包装器(,它似乎可以在后台工作(当由服务工作者交付时(,但在前台只收到通知3次,然后它停止工作。
以下是我如何让 Safari 推送通知在 IOS 16.4.1 和 Firebase 9.19.1 上运行。
- 实现通用通知代码并确保它在普通设备(而不是 IOS(上工作。
- (编辑 - 即使文档中提到了此步骤,此步骤似乎也不是必需的( 确保在特定用户操作(如单击按钮(上调用"getToken"。否则,IOS将不允许这样做。
- 请确保添加一个可在应用根目录"https://yourapp/manifest.json"处访问的 manifest.json 文件。如果您使用的是 angular,则可以在 angular.json 资产部分添加路由以公开文件。示例清单.json:
{
"name": "test",
"short_name": "test",
"description": "test",
"display": "standalone",
"theme_color": "#ffffff",
"icons": [
{
"src": "/assets/logo.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/assets/logo.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
- 将您的IOS更新到16.4+
- 在 Safari 浏览器中启用通知。转到设置 -> Safari ->高级 -> 实验性功能。同时启用"通知"和"推送通知"。
- 在 IOS Safari 上打开您的网络应用程序。单击共享图标和"添加到主屏幕"。
- 关闭浏览器并从主屏幕快捷方式打开应用程序。
- 单击将调用"getToken"的按钮。IOS将显示一个弹出窗口,要求用户提供通知权限。
希望对您有所帮助!
FCM不支持Safari浏览器。
如果要为 Safari 浏览器集成推送通知,请点击此链接。Safari有自己的机制。
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html#//apple_ref/doc/uid/TP40013225-CH3-SW1