2016-11-22 125 views
1

我试图在ios 10中实现丰富的远程通知。我实现了这个代码。收到通知后的控件会在这里,但我不知道如何下载图像并显示在通知中。提前致谢。对于丰富的远程通知使用UNNotificationServiceExtension

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

} 

回答

0

你会得到你的notificationData这样

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

here

+0

感谢您的回复@Rajat。我试过这个,但它仍然没有下载图像。仍然只显示文本数据。我不知道我在做什么错 – Prajyot

+0

检查文件是否正在下载,也检查你是否从通知数据中获得有效的URL – Rajat

+0

是的,网址是有效的。但是他们要在什么地方储存?我看过照片,没有。 – Prajyot

0

最后其工作参考。这里的问题是,我不得不添加

NSAppTransportSecurity

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