如何在firebase聊天app-android

时间:2017-10-11 05:25:49

标签: android firebase firebase-realtime-database

我正在使用firebase开发一个简单的聊天应用程序,直到现在用户身份验证,创建好友列表,发送和接收消息功能都已完成。现在我在会话活动中添加了一个名为“删除会话”的菜单项,显然会清除会话消息。

现在让我告诉你存储在firebase数据库中的msg的数据库结构。

> messages
>     <ConversationId>
>          <MsgId>
>                text:"hello"
>                timestamp:<timestamp>
>                sender:<sender's uid>
>                receiver:<receiver's uid>
>          <MsgId>
>                ....

所以,我的问题是, 对话包括至少2个用户。对。 所以,假设我实现删除会话以删除特定会话ID中的所有条目。 它将删除该会话ID下的所有数据。 但是假设只有用户1点击删除对话... user2想要所有的对话。那我该怎么实现呢? 我需要创建一个本地数据库吗?存储和同步用户手机中的所有消息?

2 个答案:

答案 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显示对话。您甚至可以管理该消息的可见对象。

如您所建议,在客户端保存,加载和删除数据也可以正常工作。