提问人:hgh89 提问时间:11/1/2023 更新时间:11/1/2023 访问量:21
Firebase Android ChildEventListener 在被规则拒绝时触发 (RTDB)
Firebase Android ChildEventListener fires when denied by rules (RTDB)
问:
我有一个游戏,其中两个客户端都可以通过写入“游戏结束”节点来确定“游戏结束”状态:
- gameId
- - gameUpdates
- - gameover
我将 ChildEventListener 附加到“gameId”,当快照出现时,我会确定快照的密钥并采取相应的行动。
由于游戏可以以各种方式结束,因此我只希望第一次写入“gameover”,以确保游戏对两个玩家都以相同的方式结束。因此,在RTDB规则中,我为“游戏结束”设置了规则。!data.exists()
对于我的问题: 如果我对“gameover”的写入被规则拒绝(其他玩家已经向这个节点写入了一些东西),那么我仍然会得到一个包含我写入的数据的本地快照,即使它从未写入数据库。
现在,我通过@puf知道了这个答案,如果你用 ServerValue.TIMESTAMP 编写一些东西,你会得到一个本地快照和一个实际快照。这是预期的行为,但我没有在这里写任何时间戳。
我想知道的是:这种行为与时间戳写入相同吗?有没有办法忽略本地快照?也对其他想法持开放态度,以使这项工作:)
提前感谢您的任何帮助!
答:
0赞
Frank van Puffelen
11/1/2023
#1
如果应用程序写入数据库,则本地 SDK 始终会立即触发该写入事件,甚至在将其发送到服务器之前也是如此。无法抑制这些事件。
如果写入随后被服务器拒绝,SDK 将触发所谓的协调事件,以允许您更新应用的本地状态。
因此,例如,如果您添加了一个子项,则初始事件将为 .如果服务器拒绝此写入,SDK 将触发以允许您修复本地状态。onChildAdded
onChildRemoved
评论