Проблема при отправке 2-layer-json-payload с FCM на устройства iOS - PullRequest
0 голосов
/ 25 сентября 2018

У меня была проблема с отправкой push-уведомления с сервера 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?

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

В вашей полезной нагрузке FCM ( ссылка на параметры полезной нагрузки FCM здесь ):

  • badge должно быть String
  • 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
}

Но в зависимости от кода на стороне клиента это может не сработать, но я надеюсь, что вы получитесуть. Ура!

...