Я использую JSQMessageViewController для пользовательского интерфейса приложения чата в реальном времени и базу данных для базы данных приложения чата.Для текстового сообщения и графического сообщения загрузка все еще считается нормальной, но когда дело доходит до звукового сообщения, это занимает очень много времени.Вот мой код для извлечения аудио сообщения:
func observeMessages() {
let userMessagesRef = Database.database().reference().child("messages").child(Id).child(senderId).queryLimited(toLast: 50)
userMessagesRef.observe(.childAdded, with: { (snapshot) in
let messageId = snapshot.key
let messagesRef = Database.database().reference().child("messages").child(messageId)
messagesRef.observeSingleEvent(of: .value, with: { (snapshot) in
if (dictionary["fromId"] as? String ?? "" == self.userId ? dictionary["toId"] as? String ?? "" : dictionary["fromId"] as? String ?? "") == self.contactLists.first?.id{
let date = NSDate(timeIntervalSince1970: dictionary["timestamp"] as? Double ?? 0.0)
let textString = dictionary["text"] as? String ?? ""
let imgString = dictionary["imageUrl"] as? String ?? ""
let voiceString = dictionary["voiceUrl"] as? String ?? ""
if textString == "image"{
let imageView = AsyncPhotoMediaItem(withURL: URL(string: imgString)!)
let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, media: imageView)
self.messages.append(message!)
}else if textString == "voice"{
print("voice msg")
let url = URL(string: voiceString)
let data = try? Data(contentsOf: url!)
let voiceData = data
let voice1 = JSQAudioMediaItem(data: voiceData)
let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, media: voice1)
self.messages.append(message!)
}else{
print("text msg")
let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, text: dictionary["text"] as? String ?? "")
self.messages.append(message!)
}
}; DispatchQueue.main.async {
self.collectionView?.reloadData()
}
self.finishReceivingMessage(animated: true)
}, withCancel: nil)
}, withCancel: nil)
}
Может кто-нибудь мне помочь или есть какой-то другой способ сделать это или улучшить его?Пожалуйста, помогите мне