Итак, я сделал работающее приложение для чата, в котором серверной частью является Firestore (я знаю, что там есть firebase). У меня также есть документ, в котором статус пользователей в автономном режиме является рекордером.
Когда пользователь входит в систему, узел «isOnline» изменяет значение на «истина» или «онлайн», а когда приложение переходит в фоновый режим, значение меняется на «офлайн».
Единственная проблема в том, что мне нужно перезагрузить viewController, чтобы изменения вступили в силу. Есть ли способ обновить статус пользователей в режиме реального времени?
Делегат приложения: -
в 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)
}
}
}
}
NSNotification
иNSNotificationCenter
, чтобы уведомить свой viewController о каких-либо изменениях. - person Sander Saelmans   schedule 04.10.2018