我们使用FCM为iOS和Android发送远程通知.以下是我们从后端发送的有效负载.
options = { notification: { title: "title", body: body, sound: 'default' }, priority: "high", content_available: true, data: { type: 'type', id: id, } }
这适用于ios和android.但由于某种原因,android方面我们需要发送title
,body
并且sound
对于data
有效负载中的密钥而言需要删除notification
有效负载.
现在,当应用程序未处于活动状态时,通知未收到ios端,横幅通知未到达但数据在应用处于活动状态时正在接收.我们在iOS方面需要横幅广告.
这个notification
关键是banner
在iOS中显示的mandetory 吗?
如何为iOS和Android使用相同的有效负载.
options = { priority: "high", content_available: true, data: { title: "title", body: body, sound: 'default' type: 'type', id: id, } }
还尝试添加各种组合content_available
和priority
键.通过所有FCM文档,它仍然混淆.帮助/建议表示赞赏.
为FCM添加了最新功能,该功能提供了为特定平台提供特定参数的选项,称为Platform Overrides:
跨平台自定义消息
FCM v1 HTTP协议发送的消息可以包含两种类型的JSON密钥对:
接收消息的所有应用程序实例将解释的一组通用键。
特定于平台的键块仅由在指定平台上运行的应用程序实例解释。
特定于平台的块使您可以灵活地针对不同平台自定义消息,以确保在收到消息后正确处理它们。在许多情况下,在给定消息中同时使用公共密钥和特定于平台的密钥都是有意义的。
何时使用通用键
每当您在所有平台(iOS,Android和Web)上定位应用程序实例时
当您向主题发送消息时
无论平台如何,所有应用程序实例都会解释的公用密钥是message.notification.title,message.notification.body和message.data。
何时使用平台专用键
当您只想将字段发送到特定平台时
除公用密钥外,还发送平台特定的字段
每当您只想将值发送到特定平台时,请不要使用公用密钥。使用平台特定的键块。例如,要将通知仅发送到iOS和Web,而不发送给Android,则必须使用两个单独的键块,一个用于iOS,另一个用于Web。
使用特定的传递选项发送邮件时,请使用特定于平台的密钥进行设置。您可以根据需要在每个平台上指定不同的值。但是即使您希望在平台之间设置基本相同的值,也必须使用平台特定的键。这是因为每个平台对值的解释都略有不同-例如,将生存时间在Android上设置为以秒为单位的到期时间,而在iOS上将其设置为到期日期。
示例:带有特定于平台的传递选项的通知消息
以下v1发送请求将通用通知标题和内容发送到所有平台,但还会发送一些特定于平台的替代。具体来说,请求:
为Android和Web平台设置了较长的生存时间,同时将APN(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参考文档。有关构建包含消息正文的发送请求的更多信息,请参见构建发送请求。