如何在Swift-Firebase后端中按用户分组消息

如何在Swift-Firebase后端中按用户分组消息,swift,firebase,chat,Swift,Firebase,Chat,我使用firebase作为数据库,当发送者向接收者发送消息时,firebase数据库将随消息更新 消息数据包含发送者ID、接收者ID以及发送者名称、时间戳和正在发送的媒体类型 我想要一种将此消息发送到接收端并有效分组消息的方法我已经开发了一些消息应用程序,并取得了一些成功。这就是我实现Firebase数据结构的方式 对于用户之间的直接消息,我有一个如下所示的条目: direct-messages: user-A-UID: user-B-UID: m

我使用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(“直接消息”).child(uid)
上使用
.childAdded
侦听器,使uid=FIRAuth.auth()?.currentUser?.uid

在消息传递UI中,当按下“发送”按钮时,执行类似以下操作:
让messageId=ref.child(“直接消息”).child(uid).childByAutoId()
。这将为每条消息提供唯一的标识符。像
ref.child(“直接消息”).child(uid).child(messageId).updateChildValues(newMessagePacket)

现在,您不希望只有任何人对此进行写入,因此您还需要相应地设置权限<代码>直接消息。$uid应该只能在
$uid==auth.uid
时写入。查看更多关于这方面的详细信息

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



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

我已经开发了一些消息应用程序,并取得了一些成功。这就是我实现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(“直接消息”).child(uid)
上使用
.childAdded
侦听器,使uid=FIRAuth.auth()?.currentUser?.uid

在消息传递UI中,当按下“发送”按钮时,执行类似以下操作:
让messageId=ref.child(“直接消息”).child(uid).childByAutoId()
。这将为每条消息提供唯一的标识符。像
ref.child(“直接消息”).child(uid).child(messageId).updateChildValues(newMessagePacket)

现在,您不希望只有任何人对此进行写入,因此您还需要相应地设置权限<代码>直接消息。$uid应该只能在
$uid==auth.uid
时写入。查看更多关于这方面的详细信息

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



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

您尝试了什么?什么不起作用?请看看你试过什么?什么不起作用?请看