Загрузка удаленных уведомлений FCM для iOS и Android

Мы используем FCM для отправки удаленных уведомлений как для iOS, так и для Android. Ниже приведены полезные данные, которые мы отправляем из бэкэнд.

options = {
     notification: {
          title: "title",
          body:  body,
          sound: 'default'
     },
    priority: "high",
    content_available: true,
    data: {
       type: 'type',
       id: id,
    }
}

Это работает для ios и android. Но по какой-то причине стороне андроида нам нужно отправить title, body и sound для ключей в полезной нагрузке data и нужно удалить полезную нагрузку notification.

Теперь уведомления не получают сторону ios, когда приложение неактивно, уведомления баннера не поступают, но данные получают, когда приложение активно. Нам нужны баннеры со стороны iOS.

Является ли этот ключ notification обязательным для отображения banner в iOS?

Как использовать ту же полезную нагрузку для iOS и Android.

options = {

priority: "high",
content_available: true,
data: {
      title: "title",
      body:  body,
      sound: 'default'
      type: 'type',
      id: id,
     }
}

Также попытался добавить ключи content_available и priority с различными комбинациями. Прошел через все документы FCM, и это все еще смущает. Помощь/предложения оценены.

Ответ 1

Была добавлена ​​последняя функция для FCM, которая дает возможность предоставлять определенные параметры для определенных платформ, называемые Переопределения платформы:

Настройка сообщения через платформы

Сообщения, отправленные протоколом FCM v1 HTTP, могут содержать два типа пар ключей JSON:

  • общий набор ключей, которые будут интерпретироваться всеми экземплярами приложений, которые получают сообщение.
  • блоки, специфичные для платформы, которые интерпретируются только экземплярами приложений, запущенными на указанной платформе.
  • Блоки, специфичные для платформы, позволяют гибко настраивать сообщения для разных платформ, чтобы обеспечить их правильную обработку при их получении. Во многих сценариях имеет смысл использовать как общие ключи, так и определенные для платформы ключи в данном сообщении.

Когда использовать общие клавиши

  • Всякий раз, когда вы нацеливаете экземпляры приложений на всех платформах - iOS, Android и web
  • Когда вы отправляете сообщения по темам

Общими ключами, которые интерпретируются всеми экземплярами приложения независимо от платформы, являются message.notification.title, message.notification.body и message.data.

Когда использовать специальные для платформы ключи

  • Если вы хотите отправлять поля только на определенные платформы
  • Чтобы отправить поля, специфичные для платформы, в дополнение к общим ключам

Всякий раз, когда вы хотите отправлять значения только на определенные платформы, не используйте общие ключи; используйте ключевые блоки для платформы. Например, для отправки уведомлений только на iOS и в Интернете, но не на Android, вы должны использовать два отдельных блока ключей: один для iOS и один для Интернета.

Когда вы отправляете сообщения с определенными параметрами доставки, используйте их, чтобы установить их. Вы можете указать разные значения на платформу, если хотите; но даже если вы хотите установить практически одинаковое значение для разных платформ, вы должны использовать специальные ключи для платформы. Это связано с тем, что каждая платформа может интерпретировать значение немного по-разному - например, время жизни устанавливается на Android как время истечения в секундах, тогда как в iOS оно устанавливается как дата истечения срока действия.

Пример: уведомление с параметрами доставки на платформе

Следующий запрос отправки v1 отправляет общее название и содержимое уведомлений всем платформам, но также отправляет некоторые переопределения для конкретной платформы. В частности, запрос:

  • устанавливает длительное время ожидания для Android и веб-платформ, при этом приоритет сообщения APNs (iOS) соответствует низкой настройке
  • устанавливает соответствующие ключи для определения результата нажатия пользователем уведомления об Android и iOS - click_action и категории соответственно.
{
  "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 для получения подробной информации о ключах, доступных в блоках, специфичных для платформы, в теле сообщения. Для получения дополнительной информации о создании запросов на отправку, содержащих тело сообщения, см. Build Send Requests.