如何使用swift和ios使firebase sdk中的旧消息过期
Posted
技术标签:
【中文标题】如何使用swift和ios使firebase sdk中的旧消息过期【英文标题】:how to expire old messages in firebase sdk using swift and ios 【发布时间】:2015-05-10 17:13:46 【问题描述】:我正在尝试将使用 javascript sdk 的另一个 *** 答案翻译成 swift/obj-c ios 解决方案。
Firebase chat - removing old messages
这是我的代码:
messagesRef?.observeEventType(FEventType.ChildAdded, withBlock: (snapshot:FDataSnapshot!) -> Void in
if (snapshot != nil)
msg = snapshot.value["avatar"] as? Dictionary<String,AnyObject>
)
所以有几个问题:
它似乎会为所有过去的消息触发 childadded 事件,而不仅仅是新事件 - 这是它应该工作的方式吗?有没有办法将其限制为仅新消息/子消息而不是现有消息?
如何在引用中添加限制,就像在 js 示例中一样?
如何将这段js代码翻译成swift?
样本:
messagesRef.endAt(timestamp).on("child_added", function(snap)
snap.ref().remove();
);
【问题讨论】:
【参考方案1】:按照 Firebase 标准,您提到的问题已经很老了。因此,虽然您可以将其翻译到 iOS,但可能有更好的方法来完成您正在尝试的事情。在 Firebase 的 iOS 文档中花一个小时左右的时间可能会为您省去很多麻烦。
是的,这是 Firebase 的正常行为。如果您只需要新消息,请查看此处:Firebase child_added only get child added 或 How to retrieve only new data?
Firebase JavaScript endAt
转换为 iOS queryEndingAtValue:
。见https://www.firebase.com/docs/ios/guide/retrieving-data.html#section-queries
【讨论】:
所以使用 queryendingAtValue 使内容过期 - 是否有关于查询中特殊字符的文档(例如,我在示例中看到“b~”但不确定 ~ 是否是特殊字符)。与精确匹配相比,它是否适用于大于或小于查询? IE。我想找到日期的结尾,比如比实际数据查询中可能不完全等于的日期更早的日期。~
没有什么特别之处,只是它在 ASCII 范围内相当高。因此,它确实适用于范围查询。
我继续尝试在服务器上使用 limitToFirst 而不是 endAt 的 js 代码,我得到了正确的消息集但是当我 snap.remove() 它删除整个父项而不是单个记录:messagesRef.limitToFirst(count-n).on('child_added', function (snap) snap.ref().remove(); );
这也是您在这里发布的问题吗? ***.com/q/30237298 Firebase 查询更像是一个连续的监视器,因此,一旦您删除第一条消息,另一条消息将成为新的第一条消息,因此您删除了一条,另一条成为第一条....直到列表为空(Firebase 确实如此也删除父节点,如果它是空的)。以上是关于如何使用swift和ios使firebase sdk中的旧消息过期的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift ios中通过键值读取子数据或过滤firebase数据
如何使用 iOS Swift 更新 firebase 中的单个数组元素?
iOS Swift Facebook 身份验证与 Google Firebase - 如何获取额外权限?