如何使用 URI 发送 Firebase 通知以实现深度链接?

How to send Firebase Notifications with URIs to implement deep linking?

tr;博士

刚刚意识到这个问题只适用于 Android,因为 iOS 处理通知的方式有点不同,您可以对通知做任何您想做的事。

根据我的理解,现在我可以将我的问题简化为以下内容:

How to make an Android device display a notification with a deep link configured from a URI without coding at all?


我们需要在 Android 和 iOS 平台的系统托盘上显示深度为 link 的通知,每个通知都必须打开应用程序的特定屏幕。

深度 link 必须使用 URI 配置。


在 Android,当应用程序在前台时,必须手动处理来自 Firebase 的消息。这样我们就可以从远程消息中读取所有数据并构建一个通知,其中包含使用 URI 配置的深度 link。

但是当应用程序在后台运行时,Firebase 会自动显示通知。无法在其上配置深度 link。


我们知道可以发送数据消息而不是通知消息。这将是 Android 上的一个解决方案,因为每条消息都必须手动处理,从而可以根据我们的喜好使用 URI、深度 links 和所有内容构建通知。

但这不适用于 iOS。在 iOS 上,必须发送通知消息。


这是 Firebase 接受的基本 JSON:

{
  "message": {
    "notification": {
      "title": "Lorem",
      "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
    },
    "token": "..."
  }
}

我们尝试设置 message.urimessage.linkmessage.actionmessage.clickmessage.click_action 的几种组合,但其中 none 有效。

我们也尝试过 data.uridata.linkdata.actiondata.clickdata.click_action,但还是失败了。

阅读 Firebase 源代码 (NotificationsParams:212) 我们发现有一种方法可以在通知上配置 link,但我们没有在文档中找到任何相关信息。

我们在哪里以及如何指定 URI,以便使用它自动构建通知,并且当应用程序在前台时也可用?

似乎在 data 对象中发送 gcm.n.link 有效。

对于以下 json,Firebase Messaging 20.2.4 将自动在其数据中构建值为 gcm.n.link 的通知:

{
  "message": {
    "notification": {
      "title": "Lorem",
      "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
    },
    "data": {
      "gcm.n.link": "app://details/identifier"
    },
    "token": "..."
  }
}

配置与 Activity 上的 URI 匹配的 Intent 过滤器将使 Android 在点击通知时打开 Activity。

我没有在文档中找到任何与之相关的内容,而是通过他们的源代码找到的。所以不确定 gcm.n.link 它是否应该被使用或什么但是,它有效所以我很高兴。

如果有人对此有所了解,请发表评论。