iOS 10通知内容扩展:使用NSURLSession?

时间:2016-07-08 15:43:50

标签: ios notifications ios10

我尝试在iOS 10中为本地通知创建新的通知内容扩展,其中负责内容扩展的通知视图控制器从网络下载图像并在UIImageView中呈现它。我使用适当的Info.plist设置了Notification Content Extension目标,并且内容扩展可以很好地用于简单的事情,例如使用某些内容呈现标签,例如模板中的示例代码:

func didReceive(_ notification: UNNotification) {
    self.label.text = notification.request.content.body
}

然而,当我尝试将NSURLSession(或Swift 3中的URLSession)引入混合时,通知内容完全无法加载 - 甚至标签也不再被设置:

func didReceive(_ notification: UNNotification) {

    self.label.text = notification.request.content.body
    let session = URLSession.shared()
    let url = URL(string: "https://chart.googleapis.com/chart?cht=p3&chs=250x100&chd=t:60,40&chl=Hello|World")!

    let task = session.downloadTask(with: url) { (fileURL, response, error) in
        if let path = fileURL?.path {
            DispatchQueue.main.async {
                self.imageView.image = UIImage(contentsOfFile:path)
            }
        }
    }
    task.resume()
}

是否不允许在通知内容扩展中使用NSURLSession?我的扩展程序可能在下载完成之前被杀死了吗?如果是这样,我怎么能确保它没有被杀死所以我可以下载并渲染图像?

3 个答案:

答案 0 :(得分:0)

在内容扩展程序中调用func didReceive(_ notification: UNNotification)时,应该已经发生了对内容的任何修改,例如下载图像。

您似乎使用通知服务扩展程序来下载任何其他内容。通知内容扩展程序仅负责在需要时提供自定义用户界面。

在服务扩展程序中,使用通知有效内容中的网址下载图像,并将其设置为UNNotification对象上的附件。如果您不需要任何自定义UI,系统将自动显示视频或图像等可视媒体附件。如果这符合您的需求,您实际上根本不需要通知内容扩展。

Pusher提供了一个很棒的教程,用于设置通知服务扩展,以便在iOS 10 right here上的推送通知中处理媒体附件。

答案 1 :(得分:0)

实际上可以在Notification Content Extension中下载图像。但是,您的代码包含两个问题:

  1. URL无效。
  2. 一旦函数超出范围,由fileURL方法返回的downloadTask将被删除,当您尝试从另一个线程访问fileURL时,情况已经如此。相反,最好将fileURL内容捕获到数据变量中,并使用该内容在主线程中生成图像

稍微更正的代码:

guard let url = URL(string: "https://betamagic.nl/images/coredatalab_hero_01.jpg") else {
    return
}

let task = URLSession.shared.downloadTask(with: url) { (fileURL, response, error) in
    if let fileURL = fileURL,
        let data = try? Data(contentsOf: fileURL) {
        DispatchQueue.main.async {
            self.imageView.image = UIImage(data: data)
        }
     }
}
task.resume()

答案 2 :(得分:-1)

在Info.plist中为您的分机禁用应用传输安全性。 提示:将文件从tmp文件夹移动到缓存以进行保存