在通知载荷中发送图片

FCM HTTP v1 API 和通知编辑器支持在显示通知的载荷中发送图片链接,以便在传送后将图片下载到设备。此功能支持 iOS 10 及更高版本上的应用图片和视频(如需了解文件大小限制,请参阅 iOS 文档)。

要在 iOS 应用中接收和处理通知图片,您必须添加通知服务扩展程序。 使用通知服务扩展程序,您的应用可以在向最终用户显示通知之前处理 FCM 载荷中传送的图片。

设置通知服务扩展程序

要添加服务扩展程序,请执行修改和显示 APNs 中的通知所需的设置任务,然后在 NotificationService.m 中添加 FCM 扩展程序辅助 API。具体而言,不要使用 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
  • headers({ "mutable-content": 1})

例如:

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":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : {
      "body" : "This is an FCM notification that displays an image.!",
      "title" : "FCM Notification",
     },
     "apns": {
         "payload": {
             "aps": {
                 "mutable-content": 1
             }
         },
         "fcm_options": {
             "image": "url-to-image"
         }
       }
   }
}

按所示方式设置 mutable-content 后,此发送请求即可使接收客户端上的服务扩展程序能够处理载荷中传送的图片。