将 2 层-json-有效负载从 FCM 发送到 iOS 设备时出现问题
Problem when sending 2-layer-json-payload from FCM to iOS devices
我在从 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://whosebug.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://whosebug.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:\\/\\/whosebug.com/\\/\"}",
"aps": {
"alert": "This is me",
"sound": "default",
"mutable-content": 1
},
"contentId": "123456"
}
如你所见,"data"key的值不是之前的JSONObject,而是一个字符串。我的问题是:当 FCM 服务器将我的消息转换为 APNS 的负载时,如何让 FCM 服务器理解 main "data" 中的子 "data" 对象是一个 JSONObject,而不是一个字符串?
谢谢!
在您的 FCM 负载中 (reference for the FCM payload parameters here):
badge
应该是字符串
mutable_content
应该在notification
外面
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://whosebug.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://whosebug.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://whosebug.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:\\/\\/whosebug.com/\\/\"}",
"aps": {
"alert": "This is me",
"sound": "default",
"mutable-content": 1
},
"contentId": "123456"
}
如你所见,"data"key的值不是之前的JSONObject,而是一个字符串。我的问题是:当 FCM 服务器将我的消息转换为 APNS 的负载时,如何让 FCM 服务器理解 main "data" 中的子 "data" 对象是一个 JSONObject,而不是一个字符串?
谢谢!
在您的 FCM 负载中 (reference for the FCM payload parameters here):
badge
应该是字符串mutable_content
应该在notification
外面
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://whosebug.com/",
"contentId": "123456"
},
"time_to_live": 10
}
但根据您的客户端代码,这可能行不通,但我希望您明白要点。干杯!