我最近在处理 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