【问题标题】:How to implement a delete function in firebase chat app-android如何在firebase chat app-android中实现删除功能
【发布时间】:2017-10-11 05:25:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    最近我执行了这个功能。因此,您可以通过添加一些功能来实现这一点。首先,您需要像这样在消息中再添加一个节点

    <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 作为值,如果是然后删除整条消息。

    我遵循了这项技术。如果这对你有帮助,请投票

    【讨论】:

    • 但是如何在群聊中实现呢?
    • 对于这个所有删除对话的用户保存他们的uid用`_`分隔例如:firstUid_secondUid_thirdUid并在检索消息时检查它是否包含当前用户uid,与单个消息删除技术相同.在第二种技术中,您可以在群聊节点中创建单独的节点,以存储已删除对话的所有用户的 uid。
    【解决方案2】:

    我取决于你想要什么。例如:你还想要服务器上的对话吗? -> 为用户 1(谁删除了对话)添加标签,这样对话就不会显示给用户 1。您甚至可以管理谁可以查看该消息。

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

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2020-07-13
      • 2013-03-21
      • 1970-01-01
      • 2019-03-14
      • 2021-08-22
      相关资源
      最近更新 更多