ios - 从 FCM 向 iOS 设备发送 2-layer-json-payload 时出现问题

标签 ios firebase apple-push-notifications firebase-cloud-messaging

我在从 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 服务器将我的消息转换为 APNS 的负载时,如何让 FCM 服务器理解主“数据”中的子“数据”对象是一个 JSONObject,而不是一个字符串?

谢谢!

最佳答案

在您的 FCM 负载 ( reference for the FCM payload parameters here ) 中:

  • badge 应该是 String
  • mutable_content 应该在 notification
  • 之外
  • delay_while_idle is deprecated
  • 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
}

但是根据您的客户端代码,这可能行不通,但我希望您能理解要点。干杯!

关于ios - 从 FCM 向 iOS 设备发送 2-layer-json-payload 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489904/

相关文章:

ios - 具有同一标签下的两个结构的 JSON 可解码

android - 尝试从 HashMap 字符串获取 Double 值时出错,从 Firebase 获取的对象

apple-push-notifications - APNS服务器的IP地址范围?

ios - Facebook 用大图片贴到墙上

iphone - 如何通过iTunes Connect获取报告的崩溃总数

java - 为什么 firebase 即使输入为空也返回 true

javascript - 引用错误 : noticication_id is not defined in firebase notification

ios - 应用程序未运行时无法接收推送通知

c# - 使用 ASP.NET 服务器添加 iPhone 推送通知

ios - 使用自定义 uitableViewCell 在 tableView 上按下回车键或单击时隐藏键盘