我正在使用firebase开发一个简单的聊天应用程序,直到现在用户身份验证,创建好友列表,发送和接收消息功能都已完成。现在我在会话活动中添加了一个名为“删除会话”的菜单项,显然会清除会话消息。
现在让我告诉你存储在firebase数据库中的msg的数据库结构。
> messages
> <ConversationId>
> <MsgId>
> text:"hello"
> timestamp:<timestamp>
> sender:<sender's uid>
> receiver:<receiver's uid>
> <MsgId>
> ....
所以,我的问题是, 对话包括至少2个用户。对。 所以,假设我实现删除会话以删除特定会话ID中的所有条目。 它将删除该会话ID下的所有数据。 但是假设只有用户1点击删除对话... user2想要所有的对话。那我该怎么实现呢? 我需要创建一个本地数据库吗?存储和同步用户手机中的所有消息?
答案 0 :(得分:3)
最近我已经执行了这项功能。所以你可以通过添加一些功能来实现这一点。首先,您需要在消息中再添加一个节点,如此
<ConversationId> <MsgId> text:"hello" timestamp:<timestamp> deleted:<user uid> //id of first user who deleted the conversation sender:<sender's uid> receiver:<receiver's uid> <MsgId> ....
所以诀窍就是当任何两个用户中的一个删除了对话时,将他的用户ID存储在deleted
节点中,并且当你从firebase收到所有消息时,代码就会检查,如果deleted
节点有相同的uid然后不添加此消息(意味着此消息被用户删除)。
现在您可以删除单个消息或整个会话,然后如果其他用户也删除了对话或单个消息,那么您必须检查deleted
节点是否有任何uid作为其中的值,如果是,则删除整个消息。
我遵循了这项技术。投票,如果这将帮助你
答案 1 :(得分:0)
我取决于你想要什么。例如:你还想要在服务器上进行对话吗? - &GT;为用户1添加标签(谁删除了对话),因此不会为用户1显示对话。您甚至可以管理该消息的可见对象。
如您所建议,在客户端保存,加载和删除数据也可以正常工作。