Итак, я сделал работающее приложение чата, где серверная часть - Firestore (я знаю, что там есть firebase). У меня также есть документ, в котором статус офлайн-пользователей находится в режиме записи.
Когда пользователь входит в систему на узле «isOnline», значение меняется на true или «онлайн», а когда приложение переходит в фоновый режим, значение меняется на «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)
}
}
}
}