# #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. Вы имеете в виду, что хотите отсортировать пользователей в списке чатов по тому, кто из них отправил сообщение последним? Это то, что я понимаю, но я вижу, что вы также сохраняете текст самого сообщения в документе, поэтому я немного смущен этим.