override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
self.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()
}
}
In your Notification extension (Swift 3.0)