android - 删除聊天开头的方法

标签 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) {

            }
        });

最佳答案

欢迎来到 Stack Overflow!

从功能上讲,您让客户负责管理消息的方法可能会奏效,但正如您所怀疑的那样,这不是最佳解决方案。其一,这意味着客户端必须获得删除/修改所有消息的授权,无论是哪个用户发布的(毕竟最旧的消息可能已经由任何用户发布)。即使不知道您的确切用例,我怀疑您是否希望允许一个用户删除其他人发布的消息。

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

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

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

关于android - 删除聊天开头的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202618/

相关文章:

android - 如何创建 keystore ?

android - 如何使用 Firebase 实时数据库在不知道 Android 索引的情况下更新 ArrayList 中的元素?

ios - 未经身份验证的用户名测试数据库 [Firebase/Swift 3]

firebase - Firebase REST API 和 SDK 客户端有什么区别?以及如何为客户工作?

java - 检查 firebase 数据库中的 url

java - Android:编辑 View 的异步任务给出 "Only the original thread that created a view hierarchy can touch its views"(HTTPGet 卡住应用程序)

android - 从Eclipse迁移到Android Studio导入库

android - 按钮不显示按下状态?

android - 从 Firebase 实时将数据存储在本地 Room DB 上

android - 修复我的 Firebase 数据库聊天应用程序