Apple Safari中使用FCM推送通知

28

我们在chrome和firefox中使用FCM实现了推送通知功能,效果良好,但Safari不支持必须用到的Service Workers。

有人遇到这种问题吗?有什么建议吗?


Firebase JavaScript SDK支持的环境:https://i.stack.imgur.com/hjclf.png。更多信息请参考:https://firebase.google.com/docs/web/environments-js-sdk。目前FCM似乎还不支持iOS。 - G Justin
6个回答

20

虽然服务工作者现在可以在Safari上使用,但这还不够。

文档说:

FCM JavaScript API允许您在支持Push API的浏览器中运行的Web应用程序中接收通知消息。这包括此支持矩阵中列出的浏览器版本。

因此,通过FCM接收消息的能力取决于浏览器实现Web Push API,而Web Kit并未实现该API。

Safari是基于Web Kit构建的,因此不支持Web推送,这意味着Safari无法接收FCM通知。所有iOS设备上的浏览器也都是基于Web Kit构建的(这是苹果的要求),因此FCM也无法在其中任何一个设备上接收消息。

如果您想测试代码运行环境是否可以接收来自FCM的消息,则可以使用以下代码片段:

if (firebase.messaging.isSupported())
  ...
}

更新(2023年2月16日):WebKit.org刚刚宣布支持在iOS/iPadOS 16.4 beta 1中使用Web Push。我们正在调查这是否也影响Firebase Cloud Messaging向使用此版本的设备传递消息的能力。

3
现在还是这样吗?根据Safari 11.1版本的发布说明,已支持Service Workers。然而,调用firebase.messaging().requestPermission会抛出一个错误:“messaging/unsupported-browser”。是否还有其他API支持尚未完成? - Evan Kirkwood
9
Service Workers 在 Safari 11.1 中得到支持,但似乎它仍然不支持 Push API (https://caniuse.com/#feat=push-api)。 - Dimitrij Agal
2
目前看来,FCM在iOS和Mac Safari上部分工作正常(我已经测试了版本9.18和9.19,兼容性)。主要问题是在前台,通知只能接收3次,之后Firebase消息令牌就会被撤销。当应用程序在后台运行并且通知由操作系统在通知栏中显示时,不会出现此问题。还有其他人遇到这种情况吗? - Andrei F
2
嘿,弗兰克,你有关于这个的更新吗?FCM能够支持IOS Safari上的推送通知吗?安德烈,你介意发表一个更详细的解释,说明你是如何让它工作的吗?我非常感激! - cecunami

12

在我的情况下,根据 https://github.com/firebase/firebase-js-sdk/issues/4633 ,我需要一个版本锁定在8.2.9。 - Isaiah

4

我不确定这个新的Safari和Service Workers情况,但我尝试在我的iOS应用程序中实现FCM推送通知,并且必须经历需要首先拥有一个APN(Apple-Push-Notification)证书的过程。如果您正在使用Safari,我不确定是否需要这个证书,但我可以想象Apple也希望其推送通知首先被重定向到APN服务器。


2
是的,要在Safari(桌面版)上使用推送通知,我们需要从Apple开发者控制台生成用于Web Push通知的APN证书。 - KayKay

4

苹果表示Safari 16 (macos) 现在应该支持Push API,但我没有成功让Push API通知正常工作。我尝试了Firebase Messaging Web V9(据我了解应该是Push API的封装器),它似乎在后台运行时可以正常工作(通过Service Worker提供的推送),但在前台只能接收3次通知,然后就停止工作了。


1

这是我如何在IOS 16.4.1和firebase 9.19.1上使Safari推送通知正常工作的方法。

  1. 实现通用的通知代码并确保它在普通设备上(非IOS)运行正常。
  2. (编辑 - 尽管文档中提到了这一步,但似乎不必要)确保您在特定用户操作(如单击按钮)时调用“getToken”。否则,IOS将不允许它。
  3. 确保您添加一个manifest.json文件,该文件可在应用程序的根目录下的“https://yourapp/manifest.json”处访问。如果使用angular,则可以在angular.json资产部分中添加路由以公开该文件。示例manifest.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"
    }
  ]
}

  1. 将您的IOS更新至16.4或更高版本。
  2. 在Safari中启用通知。前往“设置”->“Safari”->“高级”->“实验性功能”。启用“通知”和“推送通知”。
  3. 在IOS Safari上打开您的Web应用程序。单击共享图标并选择“添加到主屏幕”。
  4. 关闭浏览器,然后从主屏幕快捷方式打开应用程序。
  5. 单击将调用“getToken”的按钮。IOS将显示一个弹出窗口,询问用户是否允许通知权限。

希望这可以帮助您!


0

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