שליחת תמונה במטען הייעודי (payload) של ההתראות

FCM HTTP v1 API ומלחין ההתראות תומכים בשליחת קישורים לתמונות במטען הייעודי (Payload) של ההתראה המוצגת, להורדת התמונה למכשיר אחרי המסירה. הפונקציונליות הזו תומכת גם בתמונות וגם בסרטונים באפליקציות של Apple (אפשר להיעזר במסמכים של Apple כדי לבדוק מהן מגבלות גודל הקובץ).

כדי לקבל תמונות של התראות באפליקציה של Apple ולטפל בהן, צריך להוסיף תוסף Notification Service. התוסף של שירות ההתראות מאפשר לאפליקציה לטפל בתמונה שנשלחת במטען הייעודי של FCM לפני שהיא מציגה את ההתראה למשתמש הקצה.

הגדרת התוסף של שירות ההתראות

כדי להוסיף תוסף שירות, מבצעים את משימות ההגדרה הנדרשות לשינוי והצגה של התראות ב-APNs, ואז מוסיפים את ה-API העזרי של תוסף FCM בקובץ NotificationService.m. באופן ספציפי, במקום להשלים את הקריאה החוזרת עם self.contentHandler(self.bestAttemptContent);, צריך להשלים אותה עם FIRMessaging extensionHelper, כפי שמוצג בהמשך:

@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];

}
...

יצירת בקשת השליחה

בבקשה לשליחת ההתראות, מגדירים את האפשרויות הבאות של ApnsConfig:

  • fcm_options.image שמכילה את כתובת ה-URL של התמונה
  • headers({ "mutable-content": 1})

בבקשת השליחה לדוגמה הבאה, כותרת ההתראה שולחת לכל הפלטפורמות, אבל היא שולחת גם תמונה. זוהי הערכה של ההשפעה החזותית במכשיר של המשתמש:

שרטוט פשוט של תמונה בהודעת תצוגה

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

במסמכי העזרה של HTTP v1 מפורטים כל המפתחות שזמינים בבלוק ספציפי לפלטפורמה בגוף ההודעה.

כאשר mutable-content מוגדר כמו שמוצג, בקשת השליחה הזו מאפשרת לתוסף השירות אצל הלקוח המקבל לטפל בתמונה שמועברת במטען הייעודי (payload).