我在从FCM服务器发送推送通知时遇到问题。以前,我们使用 APNS 来实现此目的,我的服务器和客户端创建这样的有效负载。而且效果很好。
{
"data": {
"image": "https://premierleague-static-files.s3.amazonaws.com/premierleague/photo/2018/09/24/0e228e97-1644-4fcf-bc18-d7223d8f398f/DreamTeamGW6.png",
"link":"https://stackoverflow.com/"
},
"aps": {
"alert": "This is me",
"sound": "default",
"mutable-content": 1
},
"contentId": "123456"
}
现在,我们转向使用 FCM 作为 APNS 的替代品,如您所知,FCM 服务器将接收消息,将其转换为 APNS 格式,然后将其发送到 APNS 服务器,APNS 服务器会将转换后的消息发送到客户端。但首先,我必须像这样遵循其有效载荷的格式。
{
"notification": {
"body": "This is me",
"badge": 1,
"sound": "default",
"mutable-content": 1
},
"delay_while_idle": false,
"data": {
"data": {
"image": "https://premierleague-static-files.s3.amazonaws.com/premierleague/photo/2018/09/24/0e228e97-1644-4fcf-bc18-d7223d8f398f/DreamTeamGW6.png",
"link":"https://stackoverflow.com/"
},
"contentId": "123456"
},
"time_to_live": 10
}
从 FCM 到 APNS 的转换消息不是我想要的。
{
"data": "{"image":"https:\/\/premierleague-static-files.s3.amazonaws.com\/premierleague\/photo\/2018\/09\/24\/0e228e97-1644-4fcf-bc18-d7223d8f398f\/DreamTeamGW6.png","link":"https:\/\/stackoverflow.com/\/"}",
"aps": {
"alert": "This is me",
"sound": "default",
"mutable-content": 1
},
"contentId": "123456"
}
如您所见,"data"键的值不像以前那样是JSONObject,而是变成了一个字符串。我的问题是:如何让 FCM 服务器理解主"数据"中的子"数据"对象是 JSONObject,而不是将我的消息转换为 APNS 有效负载时的字符串?
谢谢!
在您的 FCM 有效负载中(此处的 FCM 有效负载参数请参考(:
badge
应为字符串mutable_content
应该在notification
之外delay_while_idle
已弃用data
消息只能包含键值对。您正在传递一个(data
(JSON对象,该对象预计不会起作用。
为了完成这项工作,我能想到的最快方法是将data
JSON 对象的内容放在外部(即与contentId
相同的级别(,然后像这样格式化您的 FCM 有效负载:
{
"mutable-content": 1
"notification": {
"body": "This is me",
"badge": 1,
"sound": "default"
},
"data": {
"image": "https://premierleague-static-files.s3.amazonaws.com/premierleague/photo/2018/09/24/0e228e97-1644-4fcf-bc18-d7223d8f398f/DreamTeamGW6.png",
"link":"https://stackoverflow.com/",
"contentId": "123456"
},
"time_to_live": 10
}
但是根据您的客户端代码,这不起作用,但我希望您了解要点。干杯!