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

时间:2018-07-29 12:09:37

标签: ios swift firebase parse-platform instant-messaging

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

例如,微信和Facebook Messenger允许您选择多个朋友并同时向他们发送一条消息。在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.具有特定属性的用户,例如[“年龄”]或[“性别”]。

随时为其他服务器提供解决方案。

1 个答案:

答案 0 :(得分:1)

在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”。这意味着将第三人添加到会议室中,将使他们能够立即访问我们的消息历史记录。

  • 一方面很方便,因为我不必重复您的问题。另一方面,Matt还可以查看我们的整个对话历史。许多人认为1:1聊天对话是私人的,这就是为什么只有在3个或更多参与者的情况下进行命名聊天才通常使用“持久聊天室”模型的原因。