删除聊天开始的方法

时间:2019-01-15 16:06:48

标签: android firebase firebase-realtime-database chat

我想使用Firebase实时数据库创建一个聊天应用程序,许多人可以同时聊天。所有消息都应存储在此处:

->1
   ->user
   ->message

->2
   ->user
   ->message
...

但是,如果邮件数量过多(例如200条),则应删除最后10条邮件。

因此,我尝试了以下操作(但显然这不是最佳解决方案): 您可以让每个电话都执行以下操作:

myReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                if(dataSnapshot.getChildrenCount() > 200){
                    //Here would be the code to delete it
                }
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

1 个答案:

答案 0 :(得分:1)

欢迎堆栈溢出!

从功能上讲,让客户负责管理消息的方法可能会起作用,但是您怀疑这不是最佳解决方案。首先,这意味着必须授权客户端删除/修改所有消息,而不管是哪个用户发布了这些消息(毕竟,最早的消息可能已被任何用户发布)。即使不知道确切的用例,我仍然怀疑您是否想允许一个用户删除其他人发布的消息。

相反,您所描述的功能听起来应该是服务器而不是客户端的责任。

为此,您可以利用Firebase的Cloud Functions(最有可能通过Realtime Database triggers),这应该允许您在服务器上有效地运行与您描述的相同的“ onChildAdded”代码。 这样,您只需要授权服务器来修改所有消息,而不必涉及客户端。

(注意:尽管从您的模式看,它看起来不是那样,但是如果您实际上只想保留200条最新消息,每用户 ,那么授权就不再那么重要了。不过,将这种责任放在服务器端可能是一个好主意,这仅仅是因为它允许您随时随地更改逻辑,而不必向客户端部署新版本。从根本上讲,“数据维护”这一概念更适合服务器的职责。)