Расширение службы уведомлений - проблема с отображением изображения в push-уведомлениях - PullRequest
0 голосов
/ 27 июня 2019

Я добавил «Расширение службы уведомлений» в свой проект и хочу показать изображение в 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)
                        }

1 Ответ

0 голосов
/ 27 июня 2019

Добро пожаловать, Сон,

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.

Надеюсь, вы получили свою точку зрения из этого кода.

...