如何在Swift中为每个用户分组邮件 - Firebase后端

时间:2017-03-26 16:42:34

标签: swift firebase chat

我使用firebase作为数据库,当发件人将消息发送给接收者时,firebase数据库会随消息更新。

消息数据包含senderID,ReceiverID以及发送的SenderName和TimeStamp以及typeOfMedia。

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

1 个答案:

答案 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的关键是数据复制和权限。这对我来说效果很好,但是如果你还有其他问题,请告诉我。