Firebase Admin SDK i FCM v1 HTTP API umożliwiają ustawianie w żądaniach wiadomości wszystkich pól dostępnych w obiekcie message
. Obejmuje to:
- wspólny zestaw pól, które mają być interpretowane przez wszystkie instancje aplikacji otrzymujące wiadomość.
- zestawy pól specyficzne dla platformy, np.
AndroidConfig
iWebpushConfig
, interpretowane tylko przez instancje aplikacji działające na określonej platformie.
Bloki specyficzne dla platformy zapewniają elastyczność w dostosowywaniu wiadomości do różnych platform, dzięki czemu są one prawidłowo obsługiwane po odebraniu. Backend FCM uwzględni wszystkie określone parametry i dostosuje wiadomość do każdej platformy.
Kiedy używać wspólnych pól
Używaj wspólnych pól, gdy:
- Wysyłanie pól na dowolną platformę
- Wysyłanie wiadomości do tematów
Wszystkie instancje aplikacji, niezależnie od platformy, mogą interpretować te wspólne pola:
Kiedy używać pól specyficznych dla platformy
Używaj pól specyficznych dla platformy, jeśli chcesz:
- Wysyłanie pól tylko na określone platformy
- Wysyłanie pól specyficznych dla platformy oprócz pól wspólnych
Jeśli chcesz wysyłać wartości tylko na określone platformy, używaj pól specyficznych dla platformy. Jeśli na przykład chcesz wysłać powiadomienie tylko na platformy Apple i internetowe, ale nie na Androida, musisz użyć 2 osobnych zestawów pól – jednego dla Apple i jednego dla platform internetowych.
Jeśli wysyłasz wiadomości z określonymi opcjami dostawy, użyj pól specyficznych dla platformy, aby je ustawić. W razie potrzeby możesz określić różne wartości dla poszczególnych platform. Nawet jeśli chcesz ustawić zasadniczo tę samą wartość na różnych platformach, musisz użyć pól specyficznych dla danej platformy. Wynika to z faktu, że każda platforma może interpretować tę wartość nieco inaczej. Na przykład na Androidzie czas życia jest ustawiany jako czas wygaśnięcia w sekundach, a na urządzeniach Apple jako data wygaśnięcia.
Wiadomość z powiadomieniem z opcjami dostawy na poszczególnych platformach
Poniższe żądanie wysyłania interfejsu HTTP v1 API wysyła wspólny tytuł powiadomienia i treść na wszystkie platformy, ale także niektóre zastąpienia specyficzne dla platformy. W szczególności prośba:
- ustawia długi czas życia na platformach Android i w internecie, a priorytet wiadomości APNs (platformy Apple) na niski.
- ustawia odpowiednie klucze, aby zdefiniować wynik kliknięcia powiadomienia przez użytkownika na urządzeniu z Androidem i Apple – odpowiednio
click_action
icategory
.
{
"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"
}
}
}
}
Więcej informacji znajdziesz na stronie HTTP v1 reference, gdzie znajdziesz szczegółowe informacje o kluczach dostępnych w blokach specyficznych dla platformy w treści wiadomości. Więcej informacji o tworzeniu żądań wysyłania zawierających treść wiadomości znajdziesz w artykule Wysyłanie wiadomości za pomocą interfejsu FCM HTTP v1 API.
Wiadomość powiadomienia z opcjami kolorów i ikon
W poniższym przykładzie żądanie wysyłania zawiera wspólny tytuł powiadomienia i treść dla wszystkich platform, ale wysyła też niektóre zastąpienia specyficzne dla platformy na urządzenia z Androidem.
W przypadku Androida żądanie ustawia specjalną ikonę i kolor, które mają być wyświetlane na urządzeniach z Androidem. Jak wspomniano w informacjach o AndroidNotification, kolor jest określany w formacie #rrggbb, a obraz musi być ikoną do rysowania, która jest zasobem lokalnym aplikacji na Androida.
Oto przykład efektu wizualnego na urządzeniu użytkownika:
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);
});
Java
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();
Python
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',
)
Go
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",
}
C#
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",
};
REST
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"
}
}
}
}
Więcej informacji znajdziesz na stronie HTTP v1 reference (w języku angielskim), gdzie znajdziesz szczegółowe informacje o kluczach dostępnych w blokach specyficznych dla platformy w treści wiadomości.
Wiadomość z powiadomieniem zawierająca obraz niestandardowy
Poniższa prośba o wysłanie powiadomienia zawiera wspólny tytuł powiadomienia dla wszystkich platform, ale wysyła też obraz. Oto przykład efektu wizualnego na urządzeniu użytkownika:
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);
});
REST
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"
}
}
}
}
Więcej informacji znajdziesz na stronie HTTP v1 reference (w języku angielskim), gdzie znajdziesz szczegółowe informacje o kluczach dostępnych w blokach specyficznych dla platformy w treści wiadomości.
Wiadomość powiadomienia z powiązanym działaniem po kliknięciu
Poniższe żądanie wysyłania zawiera wspólny tytuł powiadomienia na wszystkie platformy, ale także działanie, które aplikacja ma wykonać w odpowiedzi na interakcję użytkownika z powiadomieniem. Oto przykład efektu wizualnego na urządzeniu użytkownika:
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);
});
REST
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1