如何使用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数据

Firebase 自定义声明 IOS 和 swift

如何使用 iOS Swift 更新 firebase 中的单个数组元素?

iOS Swift Facebook 身份验证与 Google Firebase - 如何获取额外权限?

如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?

Firebase.google.com iOS 中的 Firebase 动态链接(Swift)