处理来自的 FCM 推送通知onMessageReceived()
当应用程序在后台时,服务器应始终发送仅数据消息.
通知消息只能在应用程序位于前台时处理。当应用程序在后台运行时,会显示自动生成的通知。当用户点击通知时,他们将返回到应用程序。包含通知和数据有效负载的消息被视为通知消息。
使用 FCM,您可以向客户端发送两种类型的消息:
- 通知消息,有时被认为是“显示消息”。
- 数据消息,由客户端应用程序处理。
通知消息是更轻量级的选项,具有 2KB 限制和一组预定义的用户可见密钥。数据消息允许开发人员发送最多 4KB 的自定义键值对。通知消息可以包含可选的数据负载,当用户点击通知时会传递该数据负载。
通知消息
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
}
}
当应用程序处于后台时,通知消息将发送到通知托盘。对于前台应用程序,消息由以下回调处理:
-
onMessageReceived()
在安卓上。数据包中的通知键包含通知。
数据信息
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
"Nick" : "Mario",
"body" : "great match!",
"Room" : "PortugalVSDenmark"
},
}
在 Android 上,客户端应用程序接收数据消息onMessageReceived()
并可以相应地处理键值对。
请注意这些特定于平台的详细信息:
- 在 Android 上,可以在用于启动 Activity 的 Intent 中检索数据负载。
具有通知和数据负载的消息
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
接收包含通知和数据负载的消息时的应用程序行为取决于应用程序是在后台还是前台,本质上取决于它在接收时是否处于活动状态。
参考
- 关于 FCM 消息 https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages
- 处理收到的消息 https://firebase.google.com/docs/cloud-messaging/android/receive#handling_messages