因此,我制作了一个工作正常的聊天应用程序,其中后端是Firestore(我知道那里有Firebase。),我还有一个文档,其中用户在线离线状态为“记录器”。
当用户登录“ isOnline”节点时,将值更改为true或“ online”,当应用程序进入后台时,该值更改为“ offline”。
唯一的问题是我必须重新加载viewController才能进行更改。有什么办法可以实时更新用户状态
AppDelegate:-
在ApplicationDidBecomeActive
if User.currentUser() != nil {
updateCurrentUserInFirestore(withValues: [kISONLINE : "online"]) { (success) in
}
}
在ApplicationDidEnterBackground
if User.currentUser() != nil {
updateCurrentUserInFirestore(withValues: [kISONLINE : "offline"]) { (success) in
}
}
比在chatViewController中导航栏的设置如下
userstatus func
if withUser.isOnline == "online" {
navigationController?.navigationBar.barTintColor = UIColor.flatGreen()
}else{
navigationController?.navigationBar.barTintColor = UIColor.flatBlue()
}
以下是检查状态变化的功能
func updateUserOnlineStatus() {
if !isGroup! {
var withUser = withUsers.first!
withUserUpdateListener = reference(.User).document(withUser.isOnline).addSnapshotListener { (snapshot, error) in
guard let snapshot = snapshot else { return }
if snapshot.exists {
print(snapshot)
let withUser = User(_dictionary: snapshot.data()! as NSDictionary)
self.setUIForSingleChat(withUser: withUser)
}
}
}
}
答案 0 :(得分:0)
这可以解决问题,旧代码中存在一些问题
func updateUserOnlineStatus() {
print("User update online status")
if !isGroup! {
var withUser = withUsers.first!
withUserUpdateListener = reference(.User).document(withUser.objectId).addSnapshotListener { (snapshot, error) in
if error != nil {
print("error")
}
print("update user status")
let withUser = FUser(_dictionary: snapshot!.data()! as NSDictionary)
if withUser.isOnline == "online" {
self.navigationController?.navigationBar.barTintColor = UIColor.flatGreen()
}else{
self.navigationController?.navigationBar.barTintColor = UIColor.flatBlue()
}
}
}
}