官方文档地址 : https://firebase.google.com/docs/cloud-messaging/fcm-architecture?hl=zh-cn
Firebase Cloud Messaging
(FCM
) 提供了众多消息传递选项和功能。本页中的内容旨在帮助您了解不同类型的 FCM 消息以及您可以将其用于哪些目的。
消息类型
您可以使用 FCM 向客户端发送两种类型的消息:
- 通知消息:有时被称为“显示消息”。此类消息由 FCM SDK 自动处理。
- 数据消息:由客户端应用处理。
通知消息
通知消息包含一组用户可见的预定义键。与其相对,数据消息只包含用户定义的自定义键值对。通知消息可以包含可选的数据载荷。
数据消息
数据消息仅包含自定义键值对,没有保留键名。两种消息类型的载荷上限均为 4096 个字节,但从 Firebase 控制台发送消息时会强制执行 1000 个字符的限制。
使用场景与发送方式
通知消息
- 发送方式:在可信环境(例如 Cloud Functions 或应用服务器)中,使用 Admin SDK 或 HTTP v1 API。设置
notification
键,可能包含可选的数据有效负载。 应用行为:
- 当客户端应用在后台运行时,FCM SDK 会代表客户端应用向最终用户设备显示消息。
- 如果应用在收到通知时正在前台运行,应用的代码会决定行为。
示例 JSON:
{
"message": {
"token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification": {
"title": "Portugal vs. Denmark",
"body": "great match!"
}
}
}
数据消息
- 发送方式:在可信环境中,使用 Admin SDK 或 FCM 服务器协议。在发送请求中,设置
data
键。 - 应用行为:客户端应用负责处理数据消息。
示例 JSON:
{
"message": {
"token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data": {
"Nick": "Mario",
"body": "great match!",
"Room": "PortugalVSDenmark"
}
}
}
数据消息加密
Android 传输层使用点到点加密。FCM 不提供端到端解决方案,但可以使用外部解决方案,例如 Capillary 或 DTLS。
包含可选数据载荷的通知消息
无论是通过编程方式还是通过 Firebase 控制台发送通知消息,您都可以在消息中包含由自定义键值对组成的可选载荷。
应用行为:
- 在后台运行时,应用会在通知面板中接收通知载荷,且仅在用户点按通知时处理数据载荷。
- 在前台运行时,您的应用将会接收一个提供两种载荷的消息对象。
示例 JSON:
{
"message": {
"token": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification": {
"title": "Title Here",
"body": "Body Here"
},
"data": {
"customKey1": "customValue1",
"customKey2": "customValue2"
}
}
}