ios - 如何最好地Firebase查询来观察Bool属性的变化

标签 ios swift firebase firebase-realtime-database

我的 Firebase 数据库中有一个用户对话树。当我运行应用程序时,我通过云功能获得事件对话的列表(因为那里执行了额外的过滤)。当用户删除对话时,我设置了 isActive = false ,并且在应用程序启动时我没有收到此对话。因此,我需要观察不活动的对话,如果其中任何一个突然变得活跃,则在应用程序中显示该对话。问题是如何正确地进行查询。

 let query = Database.database().reference().child("chat").child("userConversations").child(currentUserID).queryOrdered(byChild: "isActive").queryEqual(toValue: false)

query.observe(.childChanged)//例如

例如,这样的查询不会产生所需的结果,因为如果对话中的某些其他属性发生更改并且 isActive 保持不变,它就会起作用。但是,当发送新消息时,它始终设置为 isActive = true 并更新 timestamp。当然,我可以延迟一段时间后再安装 isActive,但这是一个非常非常糟糕的决定。我也尝试了几种选择,但它们都不适合我。

我认为最好的解决方案是进行查询,以便它监视 isActive 属性何时从 false 变为 true,但如何实现它?

最佳答案

目前,我创建了一个单独的分支 chat -> userInactiveConversations -> userID -> Conversation ID,当用户删除应用程序内的聊天时,我向该分支添加一个对话模型。当应用程序启动时,我将观察者从模型的这个分支中删除,即 removeRef.observe(.childRemoved)。在此对话中,新消息来自另一个用户或当前用户从另一个设备写入后,该模型将从该分支中​​删除,之后在应用程序内部触发给定的观察者,然后我启动所有必要的函数来正确处理对话信息。

关于ios - 如何最好地Firebase查询来观察Bool属性的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410421/

相关文章:

Swift:zip() 如何处理两个不同大小的集合?

swift - 在 Swift 中将二维数组转换为集合数组

android - 加载 Firebase 数据之前的布局

java - 无法从 Firebase(Cloud Firestore 数据库)获取数据

ios - UILabel 仅在放置在 viewcontroller 的 viewDidAppear 中时显示

ios - UIButton 图像在多个 UITableViewCells 中更改

ios - ContainerView嵌入ViewController : Outlets are nil

ios - Cordova :GoogleService-info.plist 的问题

ios - 使用混合的 Swift 和 Objective-C 代码创建框架

ios - 如何在用户快速点击 firebase 通知后显示警报?