Я добавил «Расширение службы уведомлений» в свой проект и хочу показать изображение в push-уведомлении.
В коде сначала я загрузил изображение с URL-адреса с помощью метода «downloadTask» URLSessionDownloadTask
.
И он был успешно сохранен в URL, как
Файл
': //private/var/mobile/Containers/Data/..../tmp/CFNetworkDownload_fads.tmp'
Я не знаю точно, что мне делать после сохранения изображения.
После того, как я успешно загрузил образ и сохранил его в каталоге tmp, я попытался с некоторыми опциями.
Сначала я создал экземпляр UNNotificationAttachment
без каких-либо опций.
Результат не получен, я думаю, он не мог знать о типе вложения. Так что он не может делать правильные вещи.
Во-вторых, я сделал тот же экземпляр с опциями, я взял Унифицированный идентификатор типа значение "public.jpeg" для ключа 'UNNotificationAttachmentOptionsTypeHintKey
'.
Это был успех, но у меня есть кое-что любопытное. Я пишу об этом после объяснения третьей попытки.
В-третьих, я пытался только изменить значение с «public.jpeg» на «public.png»
Это был также успех.
Меня удивило, почему вторая и третья попытки были успешными.
Они показывают изображение независимо от его фактического формата изображения. (JPEG, PNG)
Я выбрал опцию "public.jpeg" и посылаю конец URL с расширением .png, но он успешно показывает это изображение.
Противоположностью был также успех.
У меня нет знаний о типе формата изображения, поэтому я не могу понять, почему он работает.
Буду признателен за ваше объяснение.
// 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)
}