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

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

כדי לקבל תמונות של התראות ולטפל בהן באפליקציה של Apple, צריך להוסיף תוסף של שירות התראות. התוסף של שירות ההתראות מאפשר לאפליקציה לטפל בתמונה שנשלחת במטען הייעודי של 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 מוגדר כפי שמוצג, בקשת השליחה הזו מאפשרת להרחבת השירות בלקוח המקבל לטפל בתמונה שנשלחת בעומס העבודה.