我使用firebase作为数据库,当发件人将消息发送给接收者时,firebase数据库会随消息更新。
消息数据包含senderID,ReceiverID以及发送的SenderName和TimeStamp以及typeOfMedia。
我想要一种方法将此消息发送到接收端并有效地分组消息
答案 0 :(得分:0)
我已经开发了一些消息应用程序并取得了一些成功。这就是我实现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"
那么这对您的代码意味着什么?好吧,您可以使用.childAdded
ref.child("direct-messages").child(uid)
上的let uid = FIRAuth.auth()?.currentUser?.uid
听众。{/ p>
在消息传递用户界面中,按下发送按钮时,请执行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
时写入direct-messages.user-B-UID
。查看this page以获取更详细的信息。
但是如果用户B只是为新孩子收听direct-messages.user-A-UID.$messageID
,那么当用户A发送消息时,他们如何获得更新(基于上述权限,该消息仅写入direct-messages.user-B-UID.$messageID
)?那么最好的方法是使用运行节点的小型Amazon EC2实例使用firebase-admin库监听更新,并将数据复制到new (&buffer[size++]) T (std::move(v));
。
这或多或少是我在2个生产消息传递应用中使用的技术。我觉得Firebase的关键是数据复制和权限。这对我来说效果很好,但是如果你还有其他问题,请告诉我。