我在项目中添加了“ Notification Service Extension”,并希望在推送通知中显示图片。
在代码中,首先我使用URLSessionDownloadTask
的“ downloadTask”方法从网址下载了图像。
它已成功保存在
'file://private/var/mobile/Containers/Data/..../tmp/CFNetworkDownload_fads.tmp'
保存图像后我不知道该怎么做。
成功下载图像并将其保存在tmp目录中之后,我尝试了一些选项。
首先,我创建了一个UNNotificationAttachment
实例,没有任何选择。
结果失败,我认为它不知道附件的类型。因此它不能做正确的事。
第二,我用选项创建了一个相同的实例,我将Uniform Type Identifier值“ public.jpeg”作为键“ UNNotificationAttachmentOptionsTypeHintKey
”。
那是成功,但我有些好奇。我在解释了第三次尝试后写了它。
第三,我尝试仅将值从“ public.jpeg”更改为“ public.png”
也是成功的。
我想知道的是为什么第二次和第三次尝试都是成功的。
无论实际的图像格式类型如何,它们都显示图像。(jpeg,png)
我选择了“ public.jpeg”作为选项,并发送了以'.png'扩展名结尾的url,但它成功显示了该图像。
相反也成功。
我不了解图像格式类型,所以我不明白它为什么起作用。
感谢您的解释。
// Download image
guard let url = URL(string: urlString) else {
completion(nil, NSError(domain: "error", code: -1, userInfo: nil))
return
}
let task = URLSession.shared.downloadTask(with: url, completionHandler: { url, _, error in
completion(url, error)
})
task.resume()
// Make UNNotificationAttachment with option (TypeHintKey: "public.png")
if let imageAttachment = try? UNNotificationAttachment(identifier: "image", url: url, options: [UNNotificationAttachmentOptionsTypeHintKey: "public.png"]) {
mutableContent.attachments = [imageAttachment]
contentHandler(mutableContent)
} else {
contentHandler(mutableContent)
}
// Make UNNotificationAttachment with option (TypeHintKey: "public.jpeg")
if let imageAttachment = try? UNNotificationAttachment(identifier: "image", url: url, options: [UNNotificationAttachmentOptionsTypeHintKey: "public.jpeg"]) {
mutableContent.attachments = [imageAttachment]
contentHandler(mutableContent)
} else {
contentHandler(mutableContent)
}
// Make UNNotificationAttachment without option
if let imageAttachment = try? UNNotificationAttachment(identifier: "image", url: url, options: nil) {
mutableContent.attachments = [imageAttachment]
contentHandler(mutableContent)
} else {
contentHandler(mutableContent)
}
答案 0 :(得分:0)
欢迎Sohn,
func currentUserImage(){
let headers = ["Authorization":"Bearer \(UserDefaults.standard.string(forKey: "token")!)"]
Alamofire.request(Constants.currentUserImageURL,method: .get, encoding: JSONEncoding.default, headers: headers).responseJSON { response in
if response.result.isSuccess{
let currentUserResponce : JSON = JSON(response.result.value!)
let first_name = currentUserResponce["data"]["first_name"].stringValue
let last_name = currentUserResponce["data"]["last_name"].stringValue
let username = "\(first_name) \(last_name)"
let url = URL(string: "\(currentUserResponce["data"]["photo_thumb"].stringValue)")
let currentUserId = currentUserResponce["data"]["id"].intValue
UserDefaults.standard.set(currentUserId, forKey: "currentUserID")
self.listenForChanges()
DispatchQueue.global().async {
if let data = try? Data( contentsOf:url!)
{
DispatchQueue.main.async {
self.currentUser.image = UIImage( data:data)
}
}
}
}
}
}
这是从服务器获取图像URL并将其显示在ImageView中的方法。
希望您能从这段代码中得到启发。