如何在 Swift 中对每个用户的消息进行分组 - Firebase 后端



我使用 firebase 作为数据库,当发送方向接收方发送消息时,Firebase 数据库会随消息一起更新。

消息数据包含发件人 ID、接收者 ID 以及正在发送的发件人名称和时间戳以及媒体类型。

我想要一种方法将此消息发送到接收端并有效地对消息进行分组

我开发过一些消息传递应用程序并取得了一些成功。 这就是我实现 Firebase 数据结构的方式。

对于用户之间的直接消息,我有一个如下所示的条目:

direct-messages:
user-A-UID:
user-B-UID:
message-1-ID:
senderId: "user-A-UID",
senderName: "User A",
text: "hello, User B!",
timestamp: 1490570058,
status: "read"
message-2-ID:
senderId: "user-B-UID",
senderName: "User B",
text: "well hello, user A.  How are you?",
timestamp: 1490570212,
status: "sent"
user-B-UID:
user-A-UID:
message-1-ID:
senderId: "user-A-UID",
senderName: "User A",
text: "hello, User B!",
timestamp: 1490570058,
status: "read"
message-2-ID:
senderId: "user-B-UID",
senderName: "User B",
text: "well hello, user A.  How are you?",
timestamp: 1490570212,
status: "sent"

那么这对你的代码意味着什么呢? 好吧,您可以在ref.child("direct-messages").child(uid)上使用.childAdded侦听器let uid = FIRAuth.auth()?.currentUser?.uid.

在消息传递 UI 中,按下发送按钮时,执行类似let messageId = ref.child("direct-messages").child(uid).childByAutoId()的操作。 这将为每条消息提供一个唯一标识符。 像ref.child("direct-messages").child(uid).child(messageId).updateChildValues(newMessagePacket)一样使用它

现在,您不希望任何人写入此内容,因此您还需要相应地设置权限。direct-messages.$uid应该只能在$uid == auth.uid时写入。 查看此页面以获取更多详细信息。

但是,如果用户 B 只监听新子direct-messages.user-B-UID,那么当用户 A 发送消息(基于上述权限,该消息仅写入direct-messages.user-A-UID.$messageID)时,他们如何获得更新? 最好的方法是使用一个小型的 Amazon EC2 实例运行节点来侦听 firebase-admin 库的更新,并将数据复制到direct-messages.user-B-UID.$messageID上。


这或多或少是我在 2 个生产消息传递应用程序中使用的技术。 我觉得Firebase的关键是数据重复和权限。 这对我来说效果很好,但如果您还有其他问题,请告诉我。

最新更新