iOS 的 Firebase 通知工作策略

Posted

技术标签:

【中文标题】iOS 的 Firebase 通知工作策略【英文标题】:Firebase Notifications working strategy for iOS 【发布时间】:2016-10-11 07:05:32 【问题描述】:

我正在开发一个聊天应用程序,并且我已成功地将 Firebase 集成到我的 ios 应用程序中。现在,我不清楚 Firebase 通知。我已经按照文档正确设置了所有内容,现在当我从 Firebase 控制台发送通知时,我会收到通知到我的设备。我想知道 Firebase 将如何处理或向特定用户发送通知。我们需要将设备信息发送到 Firebase 吗?或者它是如何工作的?

【问题讨论】:

【参考方案1】:

我想知道 Firebase 将如何处理或向特定用户发送通知。

Firebase 服务器充当处理消息队列的中间人

例如,对于Downstream Messaging,您从应用服务器或使用 Firebase 控制台发送推送通知,该消息被传递到 FCM 服务器,并将其存储到设备接收到必须将其发送到可以接收它(或直到您希望它被交付,请参阅Lifetime of a Message)。

您可以查看 GCM 的 Lifecycle Flow(因为我认为对于这部分,FCM 仍然相同):

生命周期流

发送和接收下游消息。 发送消息。应用服务器向客户端应用发送消息:
    应用服务器向 GCM 连接服务器发送消息。 如果设备离线,GCM 连接服务器会排队并存储消息。 设备在线时,GCM 连接服务器向设备发送消息。 在设备上,客户端应用根据平台特定的实现接收消息。有关详细信息,请参阅特定于平台的文档。
接收消息。客户端应用从 GCM 连接服务器接收消息。

请注意,我提到的这个仅适用于下游消息传递。如果您也有兴趣了解上游消息传递的流程,可以查看文档。


我们需要向 Firebase 发送设备信息吗?

这取决于您的用例。尽管我认为强烈建议您存储所有注册令牌以备将来使用。


或者它是如何工作的?

除了我上面已经提到的,我将继续引用官方文档中的How does it work?:

它是如何工作的?

FCM 实现包括一个通过 HTTP 或 XMPP 协议与 FCM 交互的应用服务器和一个客户端应用。您可以使用应用服务器或Notifications 控制台编写和发送消息。

Firebase Notifications 基于 Firebase Cloud Messaging 构建,并为客户端开发共享相同的 FCM SDK。对于测试或发送具有强大内置定位和分析功能的营销或参与消息,您可以使用通知。对于具有更复杂消息传递要求的部署,FCM 是正确的选择。

【讨论】:

【参考方案2】:

我最近在处理 FCM 时遇到了同样的问题。

您需要在消息负载中设置数据和通知对象,就像这里描述的那样。 https://firebase.google.com/docs/cloud-messaging/concept-options#notifications

同时包含通知和数据负载的消息

接收包含两个通知的消息时的应用行为 和数据负载取决于应用程序是否在后台或 前景——本质上,无论它在发生时是否处于活动状态 收据。

在后台时,应用会在 通知托盘,仅在用户点击时处理数据负载 在通知上。在前台时,您的应用会收到一个 具有两个有效负载的消息对象。这是一个 JSON 格式的 包含通知键和数据键的消息:


  "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "notification" : 
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
  ,
  "data" : 
    "Nick" : "Mario",
    "Room" : "PortugalVSDenmark"
     

此外,如果您想在设备上发送推送通知,则需要设置高优先级。 https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message

设置消息的优先级

您有两个选项可将交付优先级分配给下游 消息:正常和高优先级。正常和高交货 优先消息的工作方式如下:

普通优先级。这是消息传递的默认优先级。 正常优先级消息不会在睡眠时打开网络连接 设备,并且它们的交付可能会延迟以节省电池。为了 时间敏感度较低的消息,例如新电子邮件通知或 其他要同步的数据,选择正常发送优先。

高优先级 FCM 尝试立即传递高优先级消息,允许 FCM 服务在可能的情况下唤醒睡眠设备并打开一个 与您的应用服务器的网络连接。带有即时消息的应用程序, 例如,聊天或语音呼叫警报通常需要打开一个 网络连接并确保 FCM 将消息传递到 设备毫不拖延。仅当消息为高优先级时 时间紧迫,需要用户立即交互,但 请注意,将您的消息设置为高优先级有助于 电池消耗与正常优先级消息相比。有效值为 正常和高。有关更多详细信息,请参阅 HTTP 的服务器参考 或 XMPP。

对于 iOS 客户端应用,普通和高优先级类似于 APN 优先级 5 和 10。有关 iOS 特定行为的完整详细信息, 请参阅 APNs 文档。有关 android 特定行为的详细信息, 请参阅针对打盹和应用待机进行优化。

以下是通知杂志的普通优先级消息示例 订阅者可以下载新内容:


  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "priority" : "high",
  "notification" : 
    "body" : "This week's edition is now available.",
    "title" : "NewsMagazine.com",
    "icon" : "new"
  ,
  "data" : 
    "volume" : "3.21.15",
    "contents" : "http://www.news-magazine.com/world-week/21659772"
  

如果您已成功为 Firebase 配置项目,则无需向 Firebase 发送任何内容。 https://firebase.google.com/docs/cloud-messaging/ios/client

【讨论】:

Hello@Anuj 谢谢你的评论,我明白这样我需要在同时向用户发送短信时发送通知有效负载,因此基于 UID 火力基地将发送通知是这是方式 没错,您需要在一条消息中同时发送数据和通知对象,并使用 Firebase ID 引用它。设备令牌会自动存储在 Firebase 上。如果您的应用程序在后台,则会显示通知。确保消息优先级高 真棒兄弟我明白了,你能告诉我在 IOS 中将数据和通知有效负载一起发送的方法到目前为止,我只从我的应用程序发送消息,方法是什么 您需要一个 Web 应用程序来处理这个问题。 firebase.google.com/docs/cloud-messaging/ios/upstream @anju 网络应用程序?我没有得到这个firebase会缓存,当用户有活动连接时它会发送通知对!这个 Web 应用程序的要求是什么,Web 应用程序或 Web 服务器与 Fire Base 服务器之间将如何连接或通信!是强制的还是firebase可以管理上游和下游的通知

以上是关于iOS 的 Firebase 通知工作策略的主要内容,如果未能解决你的问题,请参考以下文章

Firebase FCM 推送通知停止工作 iOS 11.1.1

iOS 未收到来自 Firebase 云消息传递的通知

为啥推送通知不能在 iOS 中使用 Firebase 从设备到设备?

适用于 Android 的 Firebase 推送通知

通过向 FCM 单个设备发送通知来反应本机 Firebase iOS 生产无法正常工作

iOS:无法解析来自 firebase 的推送通知