Ios Swift-构建聊天应用程序的Firebase数据

Ios Swift-构建聊天应用程序的Firebase数据,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,您好,我正在使用Swift和Firebase开发聊天应用程序,在获取现有数据和新数据时遇到一些问题 我的第一个问题是,由于Firebase在使用.childAdded(默认设计)进行观察时会获取所有新的和已经存在的数据,当一个新用户被添加到一个已经存在消息的现有聊天中时,我如何告诉应用程序只获取新消息?因为新添加的用户不应该获取旧的现有消息 我曾考虑过在用户被添加和过滤时使用时间戳,但这是获取所有数据和过滤的好方法吗 第二个类似于第一个,我让我的应用程序在注销时清除所有数据,并在登录时获取与该用

您好,我正在使用Swift和Firebase开发聊天应用程序,在获取现有数据和新数据时遇到一些问题

  • 我的第一个问题是,由于Firebase在使用.childAdded(默认设计)进行观察时会获取所有新的和已经存在的数据,当一个新用户被添加到一个已经存在消息的现有聊天中时,我如何告诉应用程序只获取新消息?因为新添加的用户不应该获取旧的现有消息
  • 我曾考虑过在用户被添加和过滤时使用时间戳,但这是获取所有数据和过滤的好方法吗

  • 第二个类似于第一个,我让我的应用程序在注销时清除所有数据,并在登录时获取与该用户相关的数据。我目前正在使用同一个观察者来观察登录时要获取的数据和新消息。在这种情况下,我无法判断该消息是现有消息还是新消息,我需要设置未读新消息的正确应用程序图标徽章编号

  • 我应该在这两种情况下使用不同的观察者吗?

    对于第一个问题,您可以使用firebase查询

    let query = ref.queryOrdered(byChild: messageTime).queryStarting(atValue: timeUserAdded, childKey: messageTime )
    query.observe(of: .childAdded, with: {(snapshot) in
    
     )}
    
    第二个问题呢

    您可以保存最后一次看到的消息时间(如WhatsApp对时间的处理),并可以将该时间之后的任何消息显示为新消息


    希望这有帮助,询问您是否有任何困惑。

    对于第一个问题,您可以使用firebase查询

    let query = ref.queryOrdered(byChild: messageTime).queryStarting(atValue: timeUserAdded, childKey: messageTime )
    query.observe(of: .childAdded, with: {(snapshot) in
    
     )}
    
    第二个问题呢

    您可以保存最后一次看到的消息时间(如WhatsApp对时间的处理),并可以将该时间之后的任何消息显示为新消息


    希望这有帮助,如果您有任何困惑,请询问。

    谢谢我不知道他们有类似queryOrdered或QueryStart的内容我应该查看他们的文档我是个白痴哈哈,无论如何谢谢您的回答:)另外,我还有一个问题,我正在使用Coredata存储从Firebase获取的数据,如用户、聊天、,消息,每当我收到一条新消息时,我都会使用arrayOfChats.contains(其中:{})来检查我是否已经存储了它,因为每当用户登录时,我需要重新加载所有数据,所以我想知道这是否是一个好主意您应该拥有数据的脱机副本,以便立即向用户显示它。如果你完全实现了coredata,那就好了。但firebase也提供了offfline功能,我还没有使用它,所以我不确定它是否有效。谢谢你我不知道他们有类似queryOrdered或QueryStart的东西我应该查看他们的文档我是个白痴哈哈谢谢你的回答:)另外我还有一个问题,我正在使用Coredata存储我从Firebase获取的数据,比如用户、聊天、,消息,每当我收到一条新消息时,我都会使用arrayOfChats.contains(其中:{})来检查我是否已经存储了它,因为每当用户登录时,我需要重新加载所有数据,所以我想知道这是否是一个好主意您应该拥有数据的脱机副本,以便立即向用户显示它。如果你完全实现了coredata,那就好了。但firebase也提供offfline功能,我还没有使用它,所以我不确定它是否能有效工作。