Firebase Admin SDK и HTTP API FCM v1 позволяют вашим запросам на сообщения задавать все поля, доступные в объекте message
. Это включает в себя:
- общий набор полей, которые должны интерпретироваться всеми экземплярами приложения, получающими сообщение.
- Наборы полей, специфичные для платформы, такие как
AndroidConfig
иWebpushConfig
, интерпретируются только экземплярами приложений, работающими на указанной платформе.
Платформоспецифичные блоки позволяют гибко настраивать сообщения для разных платформ, обеспечивая их корректную обработку при получении. Бэкэнд FCM учитывает все указанные параметры и настраивает сообщение для каждой платформы.
Когда использовать общие поля
Используйте общие поля, когда вы:
- Отправка полей на любую платформу
- Отправлять сообщения по темам
Все экземпляры приложения, независимо от платформы, могут интерпретировать следующие общие поля:
Когда следует использовать поля, специфичные для платформы
Используйте поля, специфичные для платформы, когда вы хотите:
- Отправлять поля только на определенные платформы
- Отправлять поля, специфичные для платформы , в дополнение к общим полям
Если вы хотите отправлять значения только на определённые платформы, используйте платформенно-зависимые поля. Например, чтобы отправить уведомление только на платформы Apple и веб-приложения, но не на Android, необходимо использовать два отдельных набора полей: один для Apple и один для веб-приложений.
При отправке сообщений с определёнными вариантами доставки используйте для их настройки поля, специфичные для платформы. При желании вы можете указать разные значения для каждой платформы. Однако даже если вы хотите задать практически одинаковое значение на всех платформах, необходимо использовать поля, специфичные для платформы. Это связано с тем, что каждая платформа может интерпретировать значение немного по-разному — например, время жизни на Android задаётся как время истечения срока в секундах, а на Apple — как дата истечения срока.
Уведомляющее сообщение с вариантами доставки, зависящими от платформы
Следующий запрос HTTP v1 API send отправляет общий заголовок и содержимое уведомления на все платформы, но также переопределяет некоторые платформенно-зависимые параметры. В частности, запрос:
- устанавливает длительное время жизни для Android и веб-платформ, одновременно устанавливая низкий приоритет сообщений APNs (платформы Apple)
- устанавливает соответствующие ключи для определения результата нажатия пользователем уведомления на устройствах Android и Apple —
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 . Подробнее о создании запросов на отправку, содержащих тело сообщения, см. в разделе Отправка сообщения с помощью API FCM HTTP v1 .
Уведомляющее сообщение с вариантами цвета и значка
В следующем примере запрос на отправку отправляет общий заголовок и содержимое уведомления на все платформы, но также отправляет некоторые переопределения, специфичные для платформы, на устройства Android.
Для Android запрос задаёт специальный значок и цвет для отображения на устройствах Android. Как указано в справочнике по AndroidNotification , цвет указывается в формате #rrggbb, а изображение должно быть локальным ресурсом значка для рисования в приложении Android.
Вот пример визуального эффекта на устройстве пользователя:
Node.js
const topicName = 'industry-tech';
const message = {
notification: {
title: '`$FooCorp` up 1.43% on the day',
body: 'FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day.'
},
android: {
notification: {
icon: 'stock_ticker_update',
color: '#7e55c3'
}
},
topic: topicName,
};
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
Ява
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle("$GOOG up 1.43% on the day")
.setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
.build())
.setAndroidConfig(AndroidConfig.builder()
.setTtl(3600 * 1000)
.setNotification(AndroidNotification.builder()
.setIcon("stock_ticker_update")
.setColor("#f45342")
.build())
.build())
.setApnsConfig(ApnsConfig.builder()
.setAps(Aps.builder()
.setBadge(42)
.build())
.build())
.setTopic("industry-tech")
.build();
Питон
message = messaging.Message(
notification=messaging.Notification(
title='$GOOG up 1.43% on the day',
body='$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.',
),
android=messaging.AndroidConfig(
ttl=datetime.timedelta(seconds=3600),
priority='normal',
notification=messaging.AndroidNotification(
icon='stock_ticker_update',
color='#f45342'
),
),
apns=messaging.APNSConfig(
payload=messaging.APNSPayload(
aps=messaging.Aps(badge=42),
),
),
topic='industry-tech',
)
Идти
oneHour := time.Duration(1) * time.Hour
badge := 42
message := &messaging.Message{
Notification: &messaging.Notification{
Title: "$GOOG up 1.43% on the day",
Body: "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
},
Android: &messaging.AndroidConfig{
TTL: &oneHour,
Notification: &messaging.AndroidNotification{
Icon: "stock_ticker_update",
Color: "#f45342",
},
},
APNS: &messaging.APNSConfig{
Payload: &messaging.APNSPayload{
Aps: &messaging.Aps{
Badge: &badge,
},
},
},
Topic: "industry-tech",
}
С#
var message = new Message
{
Notification = new Notification()
{
Title = "$GOOG up 1.43% on the day",
Body = "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
},
Android = new AndroidConfig()
{
TimeToLive = TimeSpan.FromHours(1),
Notification = new AndroidNotification()
{
Icon = "stock_ticker_update",
Color = "#f45342",
},
},
Apns = new ApnsConfig()
{
Aps = new Aps()
{
Badge = 42,
},
},
Topic = "industry-tech",
};
ОТДЫХ
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"topic":"industry-tech",
"notification":{
"title": "`$FooCorp` up 1.43% on the day",
"body": "FooCorp gained 11.80 points to close at 835.67, up 1.43% on the day."
},
"android":{
"notification":{
"icon":"stock_ticker_update",
"color":"#7e55c3"
}
}
}
}
Более подробную информацию о ключах, доступных в платформенно-зависимых блоках в теле сообщения, можно найти на справочной странице HTTP v1.
Уведомляющее сообщение с пользовательским изображением
Следующий запрос на отправку отправляет общий заголовок уведомления на все платформы, но также отправляет изображение. Вот пример визуального эффекта на устройстве пользователя:
Node.js
const topicName = 'industry-tech';
const message = {
notification: {
title: 'Sparky says hello!'
},
android: {
notification: {
imageUrl: 'https://foo.bar.pizza-monster.png'
}
},
apns: {
payload: {
aps: {
'mutable-content': 1
}
},
fcm_options: {
image: 'https://foo.bar.pizza-monster.png'
}
},
webpush: {
headers: {
image: 'https://foo.bar.pizza-monster.png'
}
},
topic: topicName,
};
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
ОТДЫХ
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"topic":"industry-tech",
"notification":{
"title":"Sparky says hello!",
},
"android":{
"notification":{
"image":"https://foo.bar/pizza-monster.png"
}
},
"apns":{
"payload":{
"aps":{
"mutable-content":1
}
},
"fcm_options": {
"image":"https://foo.bar/pizza-monster.png"
}
},
"webpush":{
"headers":{
"image":"https://foo.bar/pizza-monster.png"
}
}
}
}
Более подробную информацию о ключах, доступных в платформенно-зависимых блоках в теле сообщения, можно найти на справочной странице HTTP v1.
Уведомляющее сообщение с соответствующим действием щелчка
Следующий запрос на отправку отправляет общий заголовок уведомления на все платформы, но также отправляет действие, которое приложение должно выполнить в ответ на взаимодействие пользователя с уведомлением. Вот пример визуального эффекта на устройстве пользователя:
Node.js
const topicName = 'industry-tech';
const message = {
notification: {
title: 'Breaking News....'
},
android: {
notification: {
clickAction: 'news_intent'
}
},
apns: {
payload: {
aps: {
'category': 'INVITE_CATEGORY'
}
}
},
webpush: {
fcmOptions: {
link: 'breakingnews.html'
}
},
topic: topicName,
};
getMessaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
ОТДЫХ
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1