更新: FCM最近添加了一个功能,可以为特定平台提供特定参数的选项,称为
平台覆盖:
跨平台自定义消息
由 FCM v1 HTTP 协议发送的消息可以包含两种类型的 JSON 键值对:
- 一组通用键,所有接收到消息的应用实例都将解释这些键。
- 仅由在指定平台上运行的应用实例解释的平台特定键块。
平台特定块使您可以灵活地为不同平台定制消息,以确保在接收到消息时正确处理它们。在许多场景下,在给定消息中同时使用通用键和平台特定键是有意义的。
何时使用通用键
- 每当您针对所有平台 - iOS、Android 和网页实例时
- 当您发送消息到主题时
无论平台如何解释,所有应用实例都会解释的通用键是 message.notification.title
、message.notification.body
和 message.data
。
何时使用平台特定键
- 当您只想将字段发送到特定平台时
- 为了在通用键之外发送平台特定字段
每当您只想向特定平台发送值时,不要使用通用键;而是使用平台特定的键块。例如,要仅向 iOS 和 Web 发送通知,但不是 Android,则必须使用两个单独的键块,一个用于 iOS,一个用于 Web。
在发送具有特定交付选项的消息时,请使用平台特定键进行设置。如果您希望每个平台指定不同的值,则可以指定不同的值;但即使您希望在平台上设置基本相同的值,也必须使用平台特定的键。这是因为每个平台可能会略微不同地解释该值 - 例如,在 Android 上将 TTL 设置为以秒为单位的过期时间,而在 iOS 上将其设置为过期日期。
示例:带有平台特定交付选项的通知消息
以下 v1 发送请求将一个通用的通知标题和内容发送到所有平台,但还发送了一些平台特定覆盖。具体来说,该请求:
- 为 Android 和 Web 平台设置长时间到期时间,同时将 APNs(iOS)消息优先级设置为低。
- 设置适当的键以定义在 Android 和 iOS 上点击通知的结果 - 分别为
click_action
和 category
。
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Match update",
"body":"Arsenal goal in added time, score is now 3-0"
},
"android":{
"ttl":"86400s",
"notification"{
"click_action":"OPEN_ACTIVITY_1"
}
},
"apns": {
"headers": {
"apns-priority": "5",
},
"payload": {
"aps": {
"category": "NEW_MESSAGE_CATEGORY"
}
}
},
"webpush":{
"headers":{
"TTL":"86400"
}
}
}
}
请参阅
HTTP v1参考文档,以获取有关消息正文中平台特定块中可用键的完整详细信息。有关构建包含消息正文的发送请求的更多信息,请参见
构建发送请求。
我记得之前回答过类似的问题,但现在找不到了。目前还没有选项可以指定发送消息的平台。最简单的方法是使用主题消息。每次生成令牌时,您可以从客户端应用程序确定平台类型,并将其订阅到相应的主题(例如
topics/(Android/iOS)_<Your App Name>
),然后根据需要发送消息。如果您正在使用Firebase DB,则最好跟踪来自服务器的注册令牌,您可以将它们放在一个节点中。
/pushTokens
/android
/{userId} : string
/ios
/{userid}: string
这将让您能够从后端检查并根据需要调整有效载荷,以便在发送单个消息时使用。