通知服务应用程序扩展必须在远程通知中显示媒体?

Posted

技术标签:

【中文标题】通知服务应用程序扩展必须在远程通知中显示媒体?【英文标题】:Notification Service app extension mandatory to display media in remote notification? 【发布时间】:2017-02-02 11:32:56 【问题描述】:

我正在尝试发送带有媒体附件(图片网址)的 ios 推送通知,我有适用于 iOS 的 OneSignal SDK 2.2.2,但它根本不起作用。在下面的article 中,您似乎不必实现服务扩展即可在通知中显示图像。 (iOS 10)。

我需要创建通知服务应用扩展吗?

【问题讨论】:

是的..这是必需的 【参考方案1】:

是的,在将推送通知负载提交回操作系统以显示给用户之前,需要对handle 实施通知服务扩展。

示例: 如果这是收到的有效载荷:

    
      "aps": 
          "alert": 
            "title": "My title",
            "subtitle": "My title"
            ,
           "mutable-content": 1,
           "category": "<your_notification_category>"
          ,
        "data": 
          "url": "<img_url>"
        
    

您的服务必须下载图像,然后将下载的本地 URL 捆绑为 UNNotificationAttachment,然后再将其发送到操作系统

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

        // Modify the notification content here...

        if (request.content.userInfo[@"data"] && [request.content.userInfo[@"data"] isKindOfClass:[NSDictionary class]]) 
            NSDictionary *data = request.content.userInfo[@"data"];
            NSLog(@"%@", data);
            NSURL *dataURL = [NSURL URLWithString:data[@"url"]];
            self.task = [[NSURLSession sharedSession] downloadTaskWithURL:dataURL completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) 

                if (location) 
                    // Get the location URL and change directory

                    NSString *tempDirectory = NSTemporaryDirectory();
                    NSURL *fileURL = [NSURL fileURLWithPath:tempDirectory];
                    fileURL = [fileURL URLByAppendingPathComponent:[dataURL lastPathComponent]];
                    NSError *error;
                    if ([[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) 
                        [[NSFileManager defaultManager] removeItemAtPath:[fileURL path] error:&error];
                    
                    [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error];

                    // Create UNNotificationAttachment for the notification

                    UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:fileURL options:nil error:nil];
                    self.bestAttemptContent.attachments = @[attachment];
                

                self.contentHandler(self.bestAttemptContent);
            ];
            [self.task resume];

         else 
            self.contentHandler(self.bestAttemptContent);
        

     

【讨论】:

以上是关于通知服务应用程序扩展必须在远程通知中显示媒体?的主要内容,如果未能解决你的问题,请参考以下文章

ios 10推送通知媒体附件随机不起作用

在 iOS 10 中使用远程通知(富媒体推送通知)在通知栏中显示图像

IOS:应用内通知+通知服务+内容扩展

在快速远程通知中,有没有办法在应用程序被杀死时在横幅中显示与从服务器收到的消息不同的消息?

远程通知音量级别与应用程序中播放的声音不同

如何删除 iOS 通知服务扩展中的文件?