swift firebase получить изображение из хранилища и показать в JSQMessage Controller - PullRequest
0 голосов
/ 03 июня 2019

Я хочу получить сохраненное изображение в Firebase Storage.

У меня есть URL-адрес, сохраненный в строковом значении в базе данных Firebase:

mediaUrl = url!.absoluteString

Теперь я хочу получить это изображение.

Я наблюдаю за сообщениями.

func observeMessages() {
    let query = Constants.refs.databaseChats.child(chatId).queryLimited(toLast: 50)

    _ = query.observe(.childAdded, with: { [weak self] snapshot in

        if  let data        = snapshot.value as? [String: String],
            let id          = data["sender_id"],
            let name        = data["name"],
            let timestamp   = data["timestamp"],
            let media       = data["media"],
            let text        = data["text"]?.encode(),
            !text.isEmpty
        {
            if media == "text" {
                if let message = JSQMessage(senderId: id, senderDisplayName: name, date: self!.dateFormatter.date(from: timestamp), text: text) {
                    self?.messages.append(message)
                    self?.finishReceivingMessage()
                }
            }
            else if media == "image" {
                let storageRef = Storage.storage().reference(withPath: text)
                storageRef.getData(maxSize: 1 * 1024 * 1024) { (data, error) -> Void in
                    if data != nil {
                        let image = UIImage(data: data!)
                        if let imageMessage = JSQMessage(senderId: id, senderDisplayName: name, date: self!.dateFormatter.date(from: timestamp), media: image as! JSQMessageMediaData) {
                            self?.messages.append(imageMessage)
                            print("image message")
                            self?.finishReceivingMessage()
                        }
                    }
                }
            }

        }
    })
}

Если носитель является изображением, я хочу создать пузырь с изображением, а когда текст - обычный текстовый пузырь. Но я не получаю изображение в JSQMEssageViewController. Что пошло не так? Может ли кто-нибудь помочь мне там?

Я получаю URL в консоли:

https://firebasestorage.googleapis.com/v0/b/emmessenger-22.appspot.com/o/media%2FJzl0EUmjSvZZcpCd8Mdi8X9q87G2%2F03.06.2019%2021:26:39?alt=media&token=1c45feaf-0ed8-4f88-9c1f-13f4c6a8f3d4

И после этого я получаю на консоли следующее:

2019-06-03 21:28:21.092580+0200 EMMessenger[38502:554129] [] nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1003

Спасибо

1 Ответ

1 голос
/ 04 июня 2019

На самом деле вам не нужно вызывать функцию getData для этого случая.Поскольку вы используете tableView, я бы порекомендовал использовать библиотеку SDWebImage для асинхронной загрузки изображений в ячейки.Если у вас есть imageURL, просто вызовите метод ниже

yourImageView.sd_setImage(with: URL(string: "https://firebasestorage.googleapis.com/v0/b/emmessenger-22.appspot.com/o/media%2FJzl0EUmjSvZZcpCd8Mdi8X9q87G2%2F03.06.2019%2021:26:39?alt=media&token=1c45feaf-0ed8-4f88-9c1f-13f4c6a8f3d4"), placeholderImage: UIImage(named: "placeholder.png"))

Отдых, библиотека сделает для вас.

...