Bild in der Benachrichtigungsnutzlast senden

Die FCM HTTP v1 API und der Notifications Composer unterstützen das Senden von Bildlinks in der Nutzlast einer Benachrichtigung, damit das Bild nach der Zustellung auf das Gerät heruntergeladen werden kann. Diese Funktion unterstützt sowohl Bilder als auch Videos für Apple-Apps (Informationen zu Dateigrößenbeschränkungen finden Sie in der Apple-Dokumentation).

Wenn Sie Benachrichtigungsbilder in einer Apple-App empfangen und verarbeiten möchten, müssen Sie eine Notification Service Extension hinzufügen. Mit der Benachrichtigungsdienst-Erweiterung kann Ihre App das in der FCM-Nutzlast enthaltene Bild verarbeiten, bevor die Benachrichtigung dem Endnutzer angezeigt wird.

Benachrichtigungsdiensterweiterung einrichten

Wenn Sie eine Dienst-Erweiterung hinzufügen möchten, führen Sie die erforderlichen Einrichtungsaufgaben zum Ändern und Präsentieren von Benachrichtigungen in APNs aus und fügen Sie dann die FCM-Erweiterungs-Helper-API in NotificationService.m hinzu. Anstatt den Callback mit self.contentHandler(self.bestAttemptContent); abzuschließen, schließen Sie ihn mit FIRMessaging extensionHelper ab, wie unten gezeigt:

@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    // Modify the notification content here as you wish
    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
    self.bestAttemptContent.title];

  // Call FIRMessaging extension helper API.
  [[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
                                            withContentHandler:contentHandler];

}
...

Sendeanfrage erstellen

Legen Sie in Ihrer Anfrage zum Senden von Benachrichtigungen die folgenden ApnsConfig-Optionen fest:

  • fcm_options.image mit der Bild-URL. Apple verlangt, dass die Bild-URL eine gültige Dateiendung enthält, damit der Ressourcentyp korrekt identifiziert werden kann.
  • headers({ "mutable-content": 1})

Im folgenden Beispiel wird eine Anfrage gesendet, die einen gemeinsamen Benachrichtigungstitel an alle Plattformen sendet, aber auch ein Bild. Hier sehen Sie eine ungefähre Darstellung des visuellen Effekts 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"
       }
     }
   }
 }

Die vollständigen Details zu den Schlüsseln, die in plattformspezifischen Blöcken im Nachrichtentext verfügbar sind, finden Sie in der HTTP v1-Referenzdokumentation.

Wenn mutable-content wie gezeigt festgelegt ist, kann die Dienst-Extension auf dem empfangenden Client das im Nutzlastfeld übermittelte Bild verarbeiten.