gpt4 book ai didi

ios - Firebase 中的多个句柄

转载 作者:行者123 更新时间:2023-11-29 00:22:38 25 4
gpt4 key购买 nike

我正在 iOS 中构建一个具有聊天室功能的聊天应用,并构建了如下所示的 Firebase 数据设计:

"members" : {
"userId1" : {
"roomId1" : true
},
"userId2" : {
"roomId1" : true
}
}
"rooms" : {
"roomId1" : {
"lastMessage" : "Last message",
"timeStamp" : 1494483604,
//users in this room
"users" : {
"userId1" : true,
"usreId2" : true
}
}
}

因此,为了显示用户的对话列表,首先我观察路径 members/userId 类型值的单个事件,以获取用户参与的房间列表。

然后,对于每个 roomId,我观察 rooms/roomId 以获取要在 UI 上显示的数据。

问题是,如果用户参与大量房间,观察所有房间的变化是最佳实践吗?

例如,如果我有 30 个从 roomId1roomId30 的对话,我想在发生更改时更新 UI 上的最新消息,观察 30 个引用是否有意义?

谢谢。

最佳答案

这不是最佳做法,但它是一种行之有效的做法。但是,根据您的结构,在房间节点上为任何用户/userIdx 生成查询会更简单:true。

这会将观察者添加到一个节点,并通知应用程序用户所属房间的任何更改。

例如

给定结构

rooms
room_0
room_name: "My Room"
users:
uid_0: true
uid_1: true
uid_2: true
room_1
room_name: "Romper Room"
users:
uid_0: true
uid_2: true

和一些代码来添加一个观察者来监视 uid_1

let roomsRef = self.ref.child("rooms")

roomsRef.queryOrdered(byChild: "users/uid_1").queryEqual(toValue: true)
.observe(.childAdded, with: { (snapshot) in
let roomDict = snapshot.value as! [String: AnyObject]
let roomName = roomDict["room_name"] as! String
print(roomName)
})

当这段代码第一次运行时,它会打印出来

My Room

因为用户是我的房间 (room_0) 的一部分,而不是 room_1 的一部分。

如果您随后将 uid_1: true 添加到 room_1,它将打印

Romper Room

关于ios - Firebase 中的多个句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com