我有一个游戏,在该游戏中,两个客户端都能够通过向"Gameover" node 写信来确定"游戏结束"状态:

- gameId
- - gameUpdates
- - gameover

我将ChildEventListener附加到"gameID",当快照到来时,我确定快照的密钥并相应地执行操作.

由于游戏可以以不同的方式结束,我只想要第一次写到"Gameover"来计算,以确保游戏以相同的方式结束两个玩家.因此,在RTDB规则中,我为"Gameover"设置了!data.exists().

对于我的问题: 如果我对"Gameover"的写入被规则拒绝(其他玩家已经向该 node 写入了一些内容),那么我仍然会获得包含我写入的数据的本地快照,即使它从未写入数据库.

现在是I am aware of this answer by @puf,如果你用ServerValue.TIMESTAMP写东西,你会得到一个本地快照和一个实际快照.这是预期的行为,但我不会在这里写任何时间戳.

我想知道的是:这种行为是否与时间戳写入相同?有什么方法可以忽略本地快照吗?也愿意接受其他 idea 来实现这一点:)

提前感谢您的帮助!

推荐答案

如果您的应用程序写入数据库,本地SDK总是立即激发该写入的事件,甚至在将其发送到服务器之前也是如此.没有办法压制这些事件.


如果写入随后被服务器拒绝,SDK将触发所谓的协调事件,以允许您更新应用程序的本地状态.

例如,如果添加了一个子项,则初始事件将为onChildAdded.如果服务器拒绝此写入,SDK将触发onChildRemoved以允许您修复本地状态.

Android相关问答推荐

Android应用程序中的背景问题

Jetapck Compose:将Compose BOM更新为最新版本&2024.01.00&Quot;CircularProgressIndicator后出现错误

关闭导致Kotlin中的内存泄漏?

添加可组合元素的列表?

房间@嵌入式VS一对一关系

如何从LazyColumn中的图标异步获取可绘制的加载?

使用Android Jetpack Compose,为子Composable定义ViewModel是不是一种糟糕的做法?

无法加载类';com.android.build.api.extension.AndroidComponentsExtension';

找不到类MultipartBody;的序列化程序

如何在另一个函数中初始化主类参数? (我是初学者)代码推荐

当我想使用例如 material3 时,为什么我需要添加对 material 的依赖?底部导航?

为一组闪烁的可组合项制作动画,控制同步/定时

任务 ':app:kaptGenerateStubsDebugKotlin' 执行失败

在模块 jetified-kotlin-stdlib-1.8.10 中发现重复的类 kotlin.random.jdk8,带有启动基准

Jetpack Compose 部分或开放侧边框

无法解析依赖项'com.github.smarteist:autoimageslider:1.4.0-appcompat'

Android Compose 创建抖动动画

Kotlin Coroutines Dispatchers.IO 没有创建预期的线程

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

如何从我的 android 应用程序中删除 QUERY_ALL_PACKAGES 权限?