Nachricht plattformübergreifend anpassen

Mit dem Firebase Admin SDK-Objekt und der FCM v1 HTTP API können Sie in Ihren Nachrichtenanfragen alle Felder festlegen, die im message-Objekt verfügbar sind. Dazu zählen:

  • einen gemeinsamen Satz von Feldern, die von allen App-Instanzen interpretiert werden, die die Nachricht empfangen.
  • plattformspezifische Feldgruppen wie AndroidConfig und WebpushConfig, die nur von App-Instanzen interpretiert werden, die auf der angegebenen Plattform ausgeführt werden.

Plattformspezifische Blöcke bieten Ihnen die Flexibilität, Nachrichten für verschiedene Plattformen anzupassen, damit sie bei Erhalt richtig verarbeitet werden. Das FCM-Backend berücksichtigt alle angegebenen Parameter und passt die Nachricht für jede Plattform an.

Wann sollten gemeinsame Felder verwendet werden?

Verwenden Sie allgemeine Felder, wenn Sie:

  • Felder an eine beliebige Plattform senden
  • Nachrichten an Themen senden

Alle App-Instanzen, unabhängig von der Plattform, können die folgenden gemeinsamen Felder interpretieren:

Wann sollten plattformspezifische Felder verwendet werden?

Verwenden Sie plattformspezifische Felder, wenn Sie:

  • Felder nur an bestimmte Plattformen senden
  • Plattformspezifische Felder zusätzlich zu den gemeinsamen Feldern senden

Wenn Sie Werte nur an bestimmte Plattformen senden möchten, verwenden Sie plattformspezifische Felder. Wenn Sie beispielsweise eine Benachrichtigung nur an Apple- und Webplattformen, nicht aber an Android senden möchten, müssen Sie zwei separate Gruppen von Feldern verwenden, eine für Apple und eine für das Web.

Wenn Sie Nachrichten mit bestimmten Zustellungsoptionen senden, verwenden Sie plattformspezifische Felder, um diese festzulegen. Sie können bei Bedarf unterschiedliche Werte für die einzelnen Plattformen angeben. Auch wenn Sie plattformübergreifend im Wesentlichen denselben Wert festlegen möchten, müssen Sie plattformspezifische Felder verwenden. Das liegt daran, dass jede Plattform den Wert möglicherweise etwas anders interpretiert. So wird die Gültigkeitsdauer unter Android als Ablaufzeit in Sekunden und bei Apple als Ablaufdatum festgelegt.

Benachrichtigungsnachricht mit plattformspezifischen Zustellungsoptionen

Mit der folgenden HTTP v1-API-Sendeanfrage werden ein gemeinsamer Benachrichtigungstitel und ‑inhalt an alle Plattformen gesendet, aber auch einige plattformspezifische Überschreibungen. Konkret geht es um Folgendes:

  • legt eine lange Gültigkeitsdauer für Android- und Webplattformen fest, während die Nachrichtenpriorität für APNs (Apple-Plattformen) auf einen niedrigen Wert festgelegt wird.
  • Legt die entsprechenden Schlüssel fest, um das Ergebnis eines Nutzertaps auf die Benachrichtigung unter Android und Apple zu definieren – click_action bzw. 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"
       }
     }
   }
 }

Weitere Informationen finden Sie auf der Seite HTTP v1-Referenz. Dort finden Sie auch Details zu den Schlüsseln, die in plattformspezifischen Blöcken im Nachrichtentext verfügbar sind. Weitere Informationen zum Erstellen von Sendeanfragen, die den Nachrichtentext enthalten, finden Sie unter Nachricht mit der FCM HTTP v1 API senden.

Benachrichtigung mit Farb- und Symboloptionen

Im folgenden Beispiel wird mit der Sendeanfrage ein gemeinsamer Benachrichtigungstitel und ‑inhalt an alle Plattformen gesendet. Außerdem werden einige plattformspezifische Überschreibungen an Android-Geräte gesendet.

Unter Android wird mit der Anfrage ein spezielles Symbol und eine spezielle Farbe für die Anzeige auf Android-Geräten festgelegt. Wie in der Referenz für AndroidNotification beschrieben, wird die Farbe im Format #rrggbb angegeben und das Bild muss eine lokale Drawable-Symbolressource der Android-App sein.

Hier ein Beispiel für den visuellen Effekt auf dem Gerät eines Nutzers:

Einfache Zeichnung von zwei Geräten, wobei auf einem ein benutzerdefiniertes Symbol und eine benutzerdefinierte Farbe angezeigt werden

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"
       }
     }
   }
 }

Weitere Informationen finden Sie auf der Seite HTTP v1-Referenz. Dort werden die Schlüssel beschrieben, die in plattformspezifischen Blöcken im Nachrichtentext verfügbar sind.

Benachrichtigung mit einem benutzerdefinierten Bild

Mit der folgenden Sendeanfrage wird ein gemeinsamer Benachrichtigungstitel an alle Plattformen gesendet, aber auch ein Bild. Hier sehen Sie ein Beispiel für den visuellen Effekt auf dem Gerät eines Nutzers:

Einfache Zeichnung eines Bildes in einer Benachrichtigung auf dem Display

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"
       }
     }
   }
 }

Weitere Informationen finden Sie auf der Seite HTTP v1-Referenz. Dort werden die Schlüssel beschrieben, die in plattformspezifischen Blöcken im Nachrichtentext verfügbar sind.

Benachrichtigung mit einer zugehörigen Klickaktion

Mit der folgenden Sendeanfrage wird ein gemeinsamer Benachrichtigungstitel an alle Plattformen gesendet. Außerdem wird eine Aktion gesendet, die die App ausführen soll, wenn der Nutzer mit der Benachrichtigung interagiert. Hier ein Beispiel für den visuellen Effekt auf dem Gerät eines Nutzers:

Einfache Zeichnung eines Nutzers, der auf eine Webseite tippt

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