Полезная нагрузка удаленных уведомлений 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
ключ является mandetory для отображения 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, которая дает возможность предоставлять конкретные параметры для конкретных платформ, называемые переопределениями платформ:
Настройка сообщения на разных платформах
Сообщения, отправляемые по протоколу HTTP FCM v1, могут содержать два типа пар ключей JSON:
- общий набор ключей для интерпретации всеми экземплярами приложения, которые получают сообщение.
- специфичные для платформы блоки ключей интерпретируются только экземплярами приложения, работающими на указанной платформе.
- Блоки для конкретных платформ позволяют гибко настраивать сообщения для разных платформ, чтобы обеспечить их правильную обработку при получении. Во многих сценариях имеет смысл использовать как общие ключи, так и специфичные для платформы ключи в данном сообщении.
Когда использовать общие ключи
- Всякий раз, когда вы ориентируетесь на экземпляры приложений на всех платформах - iOS, Android и веб
- Когда вы отправляете сообщения на темы
Общими ключами, которые интерпретируются всеми экземплярами приложения независимо от платформы, являются message.notification.title, message.notification.body и message.data.
Когда использовать платформо-зависимые ключи
- Когда вы хотите отправить поля только на определенные платформы
- Чтобы отправить специфичные для платформы поля в дополнение к общим ключам
Когда вы хотите отправлять значения только на конкретные платформы, не используйте общие ключи; используйте платформо-зависимые ключевые блоки. Например, чтобы отправить уведомление только iOS и Интернету, но не Android, необходимо использовать два отдельных блока ключей: один для iOS и один для Интернета.
Когда вы отправляете сообщения с определенными параметрами доставки, используйте специальные ключи для платформы, чтобы установить их. Вы можете указать разные значения для каждой платформы, если хотите; но даже если вы хотите установить одно и то же значение для разных платформ, вы должны использовать специфичные для платформы ключи. Это связано с тем, что каждая платформа может интерпретировать значение немного по-разному - например, время жизни устанавливается на Android как время истечения в секундах, а на iOS оно устанавливается как дата истечения срока действия.
Пример: уведомление с опциями доставки для конкретной платформы
Следующий запрос отправки v1 отправляет общий заголовок и содержимое уведомления всем платформам, но также отправляет некоторые переопределения для каждой платформы. В частности, запрос:
- устанавливает длительное время жизни для платформ Android и Web, при этом для приоритета сообщения APNs (iOS) задается низкий уровень
- устанавливает соответствующие ключи, чтобы определить результат нажатия пользователем уведомления на Android и iOS - click_action и category соответственно.
{
"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 для получения полной информации о ключах, доступных в специфических для платформы блоках в теле сообщения. Для получения дополнительной информации о создании запросов на отправку, которые содержат тело сообщения, см. Раздел Создание запросов на отправку.
Нижеприведенная полезная нагрузка может использоваться как обычная полезная нагрузка для Android и iOS. "score" - это просто пустое ключевое слово для объяснения, и вы можете добавить больше, но все значения должны быть в String.
{
priority: "high",
tokens: [tokens],
data: {
title: <title>,
body:<body>, <-- this data will be used by the android
score: 345.
},
apns: {
headers: {
"apns-priority": "10"
},
payload: {
aps: { <-- payload for iOS
alert: {
title: <title>,
body:<body>
},
data:{
score: 345
}
}
}
}
}
В приведенной выше полезной нагрузке
- В android данные, которые находятся ниже токенов, будут использоваться в качестве полезной нагрузки, и нет необходимости в уведомлении для заголовка и тела, поскольку они включены в сами данные.
- Для iOS требуется тег уведомления для iOS, который вызывает проблему для Android. Таким образом, это решается путем удаления уведомления и добавления отдельного тега apns для iOS, а новый тег, который не указан в документации по firebase, называется "alert". iOS будет искать полезную нагрузку apns, а "alert" будет заменять "уведомление".