Notification Service Extension-关于在推送通知中显示图像的问题

时间:2019-06-27 08:54:54

标签: ios swift image image-processing apple-push-notifications

我在项目中添加了“ 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)
                        }

1 个答案:

答案 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中的方法。

希望您能从这段代码中得到启发。