我希望从特定用户发送消息到另一个用户。我无法做到这一点。当我使用以下代码时,我从接收器获取消息。我需要的是将消息特别recieverid
发送到特定的senderid
。
我的数据库快照
这是我的代码:
Database.database().reference().child("chats")
.queryOrdered(byChild: "receiverid")
.queryEqual(toValue: "xEdACTcUWeOwrdIqjxeP5t5y4Kg2")
.observe(.childAdded, with: { snapshot in
let msgDict = snapshot.value as! [String: Any]
print(msgDict)
})
使用Firebase时,您应该构建数据以满足视图的需要。
看起来你要做的是基于2个属性执行查询,而实时数据库还不能这样做。我建议您更改数据结构。使用您的senderId作为每次聊天的关键。这样你会有这样的事情:
"chats"{
"-L1RW456789":{
"messageKey":{
"name":"ddddd",
"receiverid":"xEdACTcUWeOwrdIqjxeP5t5y4Kg2",
"sender_id":"-L1RW456789",
"text":"Hello World"
},
"message2Key":{
"name":"eeeee",
"receiverid":"xEdAdasd23123",
"sender_id":"-L1RW456789",
"text":"How are you?"
}
}
}
(您现在可以删除“sender_id”属性,因为现在可以通过获取消息的父节点的密钥来访问它)并且您可以像这样运行查询:
Database.database().reference().child("chats").child("-L1RW456789")
.queryOrdered(byChild: "receiverid")
.queryEqual(toValue: "xEdACTcUWeOwrdIqjxeP5t5y4Kg2")
.observe(.childAdded, with: { snapshot in
let msgDict = snapshot.value as! [String: Any]
print(msgDict)
})