Nachricht plattformübergreifend anpassen

Mit dem Firebase Admin SDK 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:

  • Ein gemeinsamer Satz von Feldern, die von allen App-Instanzen interpretiert werden, die die Nachricht erhalten.
  • Plattformspezifische Sätze von Feldern 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 beim Empfang korrekt verarbeitet werden. Das FCM-Back-End berücksichtigt alle angegebenen Parameter und passt die Nachricht für jede Plattform an.

Wann sollten gemeinsame Felder verwendet werden?

Verwenden Sie gemeinsame Felder in folgenden Fällen:

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

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

Wann sollten plattformspezifische Felder verwendet werden?

Verwenden Sie plattformspezifische Felder in folgenden Fällen:

  • 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, aber nicht an Android senden möchten, müssen Sie zwei separate Sätze von Feldern verwenden, einen für Apple und einen für das Web.

Wenn Sie Nachrichten mit bestimmten Zustelloptionen senden, verwenden Sie plattformspezifische Felder, um diese festzulegen. Sie können für jede Plattform unterschiedliche Werte angeben. Auch wenn Sie im Wesentlichen denselben Wert auf allen Plattformen festlegen möchten, müssen Sie plattformspezifische Felder verwenden. Das liegt daran, dass jede Plattform den Wert etwas anders interpretieren kann. So wird beispielsweise die Gültigkeitsdauer auf Android als Ablaufzeit in Sekunden festgelegt, während sie auf Apple als Ablaufdatumfestgelegt wird.

Benachrichtigung mit plattformspezifischen Zustelloptionen

Mit der folgenden HTTP v1 API-Sendeanfrage werden ein gemeinsamer Benachrichtigungstitel und -inhalt an alle Plattformen gesendet, aber auch einige plattformspezifische Überschreibungen. Im Einzelnen geschieht Folgendes:

  • Für Android- und Webplattformen wird eine lange Gültigkeitsdauer festgelegt, während die Nachrichtenpriorität für APNs (Apple-Plattformen) auf einen niedrigen Wert gesetzt wird.
  • Die entsprechenden Schlüssel werden festgelegt, um das Ergebnis eines Nutzertipps auf die Benachrichtigung auf 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 HTTP v1 Referenzseite. Dort werden die Schlüssel beschrieben, 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 werden mit der Sendeanfrage ein gemeinsamer Benachrichtigungstitel und -inhalt an alle Plattformen gesendet, aber auch einige plattformspezifische Überschreibungen an Android-Geräte.

Für Android wird in der Anfrage ein spezielles Symbol und eine spezielle Farbe festgelegt, die auf Android-Geräten angezeigt werden sollen. Wie in der Referenz für AndroidNotification angegeben, wird die Farbe im Format #rrggbb angegeben und das Bild muss eine lokale Drawable-Symbol Ressource 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 HTTP v1 Referenz seite. Dort werden die Schlüssel beschrieben, die in plattformspezifischen Blöcken im Nachrichtentext verfügbar sind.

Benachrichtigung mit einem benutzerdefinierten Bild

Hinweise:

  • Bilder für Benachrichtigungen sind auf 1 MB begrenzt und unterliegen ansonsten den Einschränkungen der integrierten Android-Bild unterstützung.
  • Wenn Sie Benachrichtigungsbilder in einer Apple-App empfangen und verarbeiten möchten, müssen Sie eine Notification Service Extension hinzufügen. Mit der Notification Service Extension kann Ihre App das in der FCM-Nutzlast gelieferte Bild verarbeiten, bevor die Benachrichtigung dem Endnutzer angezeigt wird. Ein Codebeispiel finden Sie unter Notification Service Extension einrichten .
  • Bilder, die mit dem Benachrichtigungs-Composer hochgeladen werden, sind auf 300 KB begrenzt.
  • Für Bilder, die in Cloud Storage gespeichert oder von dort bereitgestellt werden, gelten die Standard Kontingentlimits.

Legen Sie in Ihrer Benachrichtigungs-Sendeanfrage die folgenden Optionen fest, damit der empfangende Client das in der Nutzlast gelieferte Bild verarbeiten kann:

  • Legen Sie für Android die folgende AndroidConfig-Option fest:
    • notification.image mit der Bild-URL
  • Legen Sie für iOS die folgenden ApnsConfig-Optionen fest:
    • fcm_options.image mit der Bild-URL. Apple erfordert, dass die Bild-URL eine gültige Dateiendung enthält, um den Ressourcentyp korrekt zu identifizieren.
    • headers({ "mutable-content": 1})

Mit der folgenden Sendeanfrage wird ein gemeinsamer Benachrichtigungstitel an alle Plattformen gesendet, aber auch ein Bild. Hier 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 HTTP v1 Referenz seite. 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, aber auch eine Aktion, 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, um sie zu öffnen

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