Firebase Android ChildEventListener 在被规则 (RTDB) 拒绝时触发

问题描述 投票:0回答:1

我有一个游戏,两个客户端都可以通过写入“游戏结束”节点来确定“游戏结束”状态:

- gameId
- - gameUpdates
- - gameover

我将 ChildEventListener 附加到“gameId”,当快照出现时,我确定快照的键并采取相应的操作。

由于游戏可以以多种方式结束,因此我只想将第一个写入“游戏结束”的内容计算在内,以确保游戏对两个玩家来说都以相同的方式结束。因此,在 RTDB 规则中,我将

!data.exists()
设置为“游戏结束”。

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

现在,我知道@puf的这个答案,如果你用 ServerValue.TIMESTAMP 写一些东西,你会得到一个本地快照和一个实际快照。这是预期的行为,但我不会在这里写任何时间戳。

我想知道的是:这种行为与时间戳写入相同吗?有没有办法忽略本地快照?也欢迎其他想法来完成这项工作:)

预先感谢您的帮助!

android firebase firebase-realtime-database firebase-security
1个回答
0
投票

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


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

例如,如果您添加了一个孩子,则初始事件将为

onChildAdded
。如果服务器拒绝此写入,SDK 将触发
onChildRemoved
以允许您修复本地状态。

© www.soinside.com 2019 - 2024. All rights reserved.