SwiftUI — Как показать последних пользователей чата в Firestore

# #google-cloud-firestore #swiftui #chat #message

#google-облако-firestore #свифтуи #Чат #Сообщение

Вопрос:

Я создаю приложение для чата. Как показать последних пользователей чата как Facebook Messenger?

Если пользователь нажмет Отправить сообщение, я задам себе вопрос о способе сохранения данных «функция SendMessage(выбранный пользователь: Пользователь?, текст: Строка)» ниже, помимо основной цели сохранения сообщения, я могу запросить список последних пользователей чата или мне нужно создать другой метод сохранения для этого сообщения? Кто-нибудь может помочь в этом?

Сохранение сообщений в firestore следует структуре: коллекция(сообщения)/документ(fromID)/коллекция(toId)/документ() и создается из функции SendMessage:

[Все последние пользователи чата сохраняют в документе(fromID), информация для отображения сохранить в документе() (информация для отображения: имя пользователя, изображение аватара (профиль), последнее сообщение (текст), время (метка времени))]

 //MARK: - sendMessage func sendMessage(selectedUser: User?, text: String) {   guard let fromId = FirebaseManager.shared.auth.currentUser?.uid else { return }   guard let toId = selectedUser?.uid else { return }   guard let username = selectedUser?.username else { return }   guard let profileImageUrl = selectedUser?.profileImageUrl else { return }   let document = FirebaseManager.shared.firestore.collection("messages")  .document(fromId)  .collection(toId)  .document()   let messageData = ["fromId" : fromId, "toId" : toId, "username" : username, "profileImageUrl" : profileImageUrl, "text" : text, "timestamp" : Timestamp()] as [String : Any]   document.setData(messageData) { error in  if let error = error {   self.alertMessage = error.localizedDescription  print(self.alertMessage)  return   }   print("Successfully saved current user sending message")   }   let recipientMessageDocument = FirebaseManager.shared.firestore.collection("messages")  .document(toId)  .collection(fromId)  .document()   recipientMessageDocument.setData(messageData) { error in  if let error = error {   self.alertMessage = error.localizedDescription  print(self.alertMessage)  return   }  } }  

Сохранение пользователя в firestore следует структуре: коллекция(пользователи)/документ() и создается из функции storeUserInformation:

 //MARK - storeUserInformation  func storeUserInformation(imageProfileUrl: URL) {    guard let uid = FirebaseManager.shared.auth.currentUser?.uid else { return }    let userData = ["username": username,"email": email, "uid": uid, "profileImageUrl": imageProfileUrl.absoluteString]    FirebaseManager.shared.firestore  .collection("users")  .document(uid)  .setData(userData) { err in    if let err = err {    self.isShowAlert = true  self.alertMessage = err.localizedDescription  return    }  } }  

Комментарии:

1. Вы имеете в виду, что хотите отсортировать пользователей в списке чатов по тому, кто из них отправил сообщение последним? Это то, что я понимаю, но я вижу, что вы также сохраняете текст самого сообщения в документе, поэтому я немного смущен этим.