处理 Firebase childDeleted 和 childModified 观察者 Swift

Posted

技术标签:

【中文标题】处理 Firebase childDeleted 和 childModified 观察者 Swift【英文标题】:Dealing with Firebase childDeleted and childModified observers Swift 【发布时间】:2019-06-20 09:28:19 【问题描述】:

在我的应用程序中,我在感兴趣的 Firebase 数据库节点上为 childAddedchildDeletedchildModified 设置了观察者,以跟踪它们并相应地修改我的 CoreData 设备数据库。我刚刚意识到,如果在设备不在线时发生childDeletedchildModified,那么当它再次上线时将不会收到这些事件的通知。由于这是正常的预期行为,因此我想到了一种解决方法:当我触发删除 Firebase 节点上的条目时,我将创建相应“已删除”节点的条目。因此,当设备重新联机并执行现在由 childDeleted 观察者执行的逻辑时,将触发 childAdded 事件。这样我就不会观察到任何childDeleted 事件。 所以我的问题是:我是否滥用了 Firebase 观察者,并且当设备重新上线时无论如何都应该传达childDeleted,或者这种情况实际上是它应该工作的方式?在这种情况下,您实施了什么样的解决方案?

【问题讨论】:

【参考方案1】:

Firebase 实时数据库将服务器上的数据状态与任何连接的客户端同步。每当客户端(重新)连接时,Firebase 都会确保客户端具有数据的当前状态。正如您所发现的,Firebase 明确同步状态更改。

如果您想同步状态更改,您应该将这些状态更改精确地存储在数据库中。因为这些更改将成为 Firebase 同步的数据。

所以您的解决方案很好,实际上是处理此要求的惯用方式。

【讨论】:

我应该想到这一点,因为一旦观察者被附加,它首先下载整个节点,然后只是新条目,因为它们被添加直到分离。这种非检查最后一个已知状态与实际状态面团(我认为这是理所当然的......)使childDeletedchildModifiedpretty毫无用处。至少在我的情况下,我不会再使用它们了,而且在我能想到的任何其他情况下。你怎么看这件事?我开始考虑放弃 Firebase,而是设置我自己的物理 Db.. 会看到.. 感谢 Frank 一直在这里提供帮助。 如果您存储状态更改,通常只有一个child_added 侦听器。我看到/有很多情况,其中状态更改的节点只是一个队列,您可以在其中处理每个状态更改,然后将其删除。那样的话,只处理child_added是正常的。

以上是关于处理 Firebase childDeleted 和 childModified 观察者 Swift的主要内容,如果未能解决你的问题,请参考以下文章

使用 Provider (Flutter) 包进行异步异常处理 (Firebase)

对 Firebase 的待处理请求的可能原因是啥?

firebase 处理角色的最佳方式

如何在firebase中处理推送通知

未处理的异常:[firebase_auth/unknown] null:使用颤振/firebase 进行电话身份验证时出错

如何在firebase中处理异步调用