ios - 允许用户在消息传递应用程序中同时向多个用户发送消息

标签 ios swift firebase parse-platform instant-messaging

在消息传递应用程序中如何将一条消息同时发送给多个 friend ?我在 Django 问题中读到这个设计是 M2M 关系。您定义了 2 个模型(User 和 SentMessage)并且后端创建了第三个对象?

例如,微信和 Facebook Messenger 允许您选择多个 friend 并同时向他们发送一条消息。这是如何在 iOS、Parse 或您自己的 Node.js 后端中完成的?

您定义您的类。

user["username"] = String
user["sex"] = String
user["age"] = Int

///

let messageObj = PFObject(className: "Messages")   
messageObj["sender"] = PFUser.current()?.username
messageObj["message"] = messageTextView.text
messageObj["likes"] = [String]()

您将如何允许将消息发送至:
A. 所有用户同时。
B. 具有特定属性的用户,例如[“年龄”] 或 [“性别”] 同时进行。

欢迎为其他服务器贡献解决方案。

最佳答案

在 Firebase 中,您还可以使用第三个“表”对多对多关系进行建模,您可以在其中将实体 1 的项目连接到实体 2 的项目。有关更多信息,请参阅 Many to Many relationship in Firebase

但对于聊天应用程序,我通常会以不同的方式对此用例建模。向一组用户发送消息通常会在这些应用程序中启动一个临时聊天室。如果其中一位用户回答,则该答案将发送给组中的其他所有人。因此,您基本上已经启动了一个临时聊天室,一个由其中的人识别的聊天室。

我通常建议在 Firebase 中以参与者的名字命名这个临时聊天室。有关更多信息,请参阅:http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase .在那个模型中,如果你和我开始聊天,我们的房间将是:uidOfMat_uidOfPuf。所以我们的 JSON 看起来像:

chats: {
  "uidOfMat_uidOfPuf": {
    -Labcdefgh1: {
      sender: "uidOfMat",
      text: "How is a single message sent to several friends simultaneously in messaging applications?"
    }
    -Labcdefgh2: {
      sender: "uidOfPuf",
      text: "In Firebase you model many-to-many relationships with a third "table" too..."
    }

由于聊天室是由参与者定义的,任何时候你我聊天,我们最终都会进入同一个聊天室。非常方便!

现在假设我通过将某人拉入聊天来请他们帮助回答你的问题。由于聊天室由其参与者定义,添加新参与者会创建一个新聊天室:uidOfMat_uidOfPuf_uidOfThird。所以我们最终得到:

chats
  uidOfMat_uidOfPuf
    -Labcdefgh1: {
      sender: "uidOfMat",
      text: "How is a single message sent to several friends simultaneously in messaging applications?"
    }
    -Labcdefgh2: {
      sender: "uidOfPuf",
      text: "In Firebase you model many-to-many relationships with a third "table" too..."
    }
  }
  "uidOfMat_uidOfPuf_uidOfThird": {
    -Labcdefgh3: {
      sender: "uidOfPuf",
      text: "Hey Third. Puf here. Mat is wondering how to send a single message to several friends simultaneously in messaging applications. Do you have an idea?"
    }
    -Labcdefgh4: {
      sender: "uidOfThird",
      text: "Yo puf. Long time no see. Let me think for a moment..."
    }

这里有几点需要注意:

  • 在我们目前使用的模型中,如果我们将另一个人添加到 uidOfMat_uidOfPuf_uidOfThird 聊天室,那将再次创建一个新的聊天室。

  • 许多聊天应用程序都允许您为群聊室命名。在许多情况下,将用户添加到此类命名的聊天室确实可以让他们访问消息历史记录。我倾向于将此类房间称为永久聊天室,因为它们可以访问历史聊天消息。

  • 在我们上面的示例中,假设我们将我们的 1:1 房间命名为“model_chat_room”。这意味着将第三个人添加到房间中,可以让他们立即访问我们的消息历史记录。

  • 一方面这很方便,因为我不必重复您的问题。另一方面,马特也可以看到我们的整个对话历史。许多人认为 1 对 1 的聊天对话是私密的,这就是为什么“持久聊天室”模型通常仅适用于 3 名或更多参与者的命名聊天。

关于ios - 允许用户在消息传递应用程序中同时向多个用户发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580191/

相关文章:

ios - 从 NSMutableArray 中删除对象?

ios - 如何检查原生 iOS 应用程序的 UI?

swift - 在 Swift 中,Objective-C 类的属性是否有可能满足 Swift @obj 协议(protocol)计算属性要求?

ios - 为什么删除子项后我的表格 View 显示重复的单元格?

swift - 在同一个子 Firebase 中添加超过 1 个信息时遇到问题

iOS 截取多个屏幕截图

ios - 打开网址并留在应用程序中

ios - xCode Sprite-Kit - 每个场景中的背景图像

swift 3 .all 已弃用 - 拖放 nstableview

javascript - 在 Firebase 中管理聊天 channel 的最佳方式