gpt4 book ai didi

ios - 用于私有(private)消息传递的 Firebase 数据库结构

转载 作者:行者123 更新时间:2023-11-28 07:59:23 25 4
gpt4 key购买 nike

有没有一种简单的方法来构造一个在两个用户之间进行消息传递的数据库。在 firebase-database 中,你必须指向同一事物的指针吗?我希望能够在两个用户下进行对话的伪克隆。这样 user1 就有了一个正在与之交谈的人的列表,user2 也有,而且对话信息只需要存储一次。我在写这篇文章时可能已经回答了我自己的问题,但这是我正在考虑的两种选择。 Block 2 似乎更节省空间。有没有人对如何解决这个问题有任何其他建议。

block 1:每次发送消息时将其存储在两个用户下。

{
messaging:
user1:
user2:
message1:
messageBody: "text"
sender: "user1"
message2:
messageBody: "text"
sender: "user2"
message3:
messageBody: "text"
sender: "user1"
user2:
user1:
message1:
messageBody: "text"
sender: "user1"
message2:
messageBody: "text"
sender: "user2"
message3:
messageBody: "text"
sender: "user1"

}

或者另一种选择是Block2:每次发送消息时,将其存储在该对话引用下,但为每对用户提供对该对话的引用。

{
conversations:
conversation1:
message1:
messageBody: "text"
sender: "user1"
message2:
messageBody: "text"
sender: "user2"
message3:
messageBody: "text"
sender: "user1"
pairs:
user2:
user1:
conversationName: "conversation1"
user1:
user2:
conversationName: "conversation1"

}

有没有办法在数据库中说,不管 child 的顺序如何,都指向同一个东西?因此第二行和第三行将引用相同的内容:

let dbRef = FIRDatabase.database().reference().child("messages")
let user1MessagesRef = dbRef.child("user1").child("user2")
let user2MessagesRef = dbRef.child("user1").child("user2")

最佳答案

我正在开发一个使用 Firebase 的 iOS 开源聊天应用程序,我遇到了同样的问题。

我的问题是时间戳未设置为相同的值,因此我创建了一个 Firebase 云函数,将对话中的消息克隆到用户数据中。

我的数据库布局方式如下:

chats:
chatID: (Which is both users' IDs separated by an '&' character)
messages:
childAutoID1:
message: "message body"
timestamp: server timestamp value.
userID: the id of the user who sent the message
childAutoID:
message: "message body"
timestamp: server timestamp value.
userID: the id of the user who sent the message
userData:
userID1:
userID2:
message: "Last message"
timestamp: latest message timestamp
userID: latest message user id
userID2:
userID1:
message: "Last message"
timestamp: latest message timestamp
userID: latest message user id

起初,我将消息从移动应用程序填充到 3 个位置:chats/chatID/messages、userData/userID1/userID2 和 userData/userID2/userID1但我的问题是它们没有获得相同的时间戳,因为在将值填充到每个节点的时间之间存在微小的延迟。这就是为什么我创建了云函数,将消息从 chats/chatID/messages 复制到其他 2 个位置。

这是云函数文件的链接:https://github.com/Tawa/TNChat/blob/master/Firebase/functions/index.js

也许这不是你所需要的,但我希望它能帮助你解决你的问题。

该项目仍未记录,我计划在未来几天内记录它。

编辑:忘记提及云功能还会向收件人的设备发送静默通知。检查 AppDelegate 以查看其处理方式。 :)

关于ios - 用于私有(private)消息传递的 Firebase 数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com