Ios 使用UNNotificationServiceExtension进行丰富的远程通知

Ios 使用UNNotificationServiceExtension进行丰富的远程通知,ios,ios10,rich-notifications,Ios,Ios10,Rich Notifications,我正在尝试在ios 10中实现丰富的远程通知。我已经实现了这个代码。收到通知后的控件将转到此处,但我不知道如何下载图像并在通知中显示。提前谢谢 class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? over

我正在尝试在ios 10中实现丰富的远程通知。我已经实现了这个代码。收到通知后的控件将转到此处,但我不知道如何下载图像并在通知中显示。提前谢谢

class NotificationService: UNNotificationServiceExtension {

var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    self.contentHandler = contentHandler
    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

    if let bestAttemptContent = bestAttemptContent {
        // Modify the notification content here...
        //print("title for image = \(bestAttemptContent.title)")
        bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"

        contentHandler(bestAttemptContent)
    }

}



override func serviceExtensionTimeWillExpire() {
    // Called just before the extension will be terminated by the system.
    // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
    if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
        contentHandler(bestAttemptContent)
    }
}

}

您将在
通知数据中获得一个附件,如下所示

"attachment-url": "https://yourimage.png"
这就是你如何使用它

self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        // Get the custom data from the notification payload
        if let notificationData = request.content.userInfo["data"] as? [String: String] {
            // Grab the attachment
            if let urlString = notificationData["attachment-url"], let fileUrl = URL(string: urlString) {
                // Download the attachment
                URLSession.shared.downloadTask(with: fileUrl) { (location, response, error) in
                    if let location = location {
                        // Move temporary file to remove .tmp extension
                        let tmpDirectory = NSTemporaryDirectory()
                        let tmpFile = "file://".appending(tmpDirectory).appending(fileUrl.lastPathComponent)
                        let tmpUrl = URL(string: tmpFile)!
                        try! FileManager.default.moveItem(at: location, to: tmpUrl)

                        // Add the attachment to the notification content
                        if let attachment = try? UNNotificationAttachment(identifier: "", url: tmpUrl) {
                            self.bestAttemptContent?.attachments = [attachment]
                        }
                    }
                    // Serve the notification content
                    self.contentHandler!(self.bestAttemptContent!)
                    }.resume()
            }
        }

最后引用了它的工作原理。这里的问题是我必须补充一点

NSAppTransportSecurity


标记扩展的plist。添加此标记后,它开始显示图像。希望它能帮助别人。

谢谢您的回复@Rajat。我试过了,但还是没有下载图片。仍然只显示文本数据。我不知道我做错了什么检查文件是否正在下载,同时检查您是否从通知数据中获得了有效的url是的url是有效的。但它们将被存放在什么地方??我浏览了照片,没有。您正在将图像保存在
NSTemporaryDirectory
temp目录中,而不是在Photosyes上,但我应该在哪个文件夹中搜索图像。如果我听起来很傻,我很抱歉。