Как я могу обновить онлайн статус пользователя без перезагрузки контроллера? - PullRequest
0 голосов
/ 04 октября 2018

Итак, я сделал работающее приложение чата, где серверная часть - 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)
                }
            }

        }
    }

1 Ответ

0 голосов
/ 04 октября 2018

Это помогло, возникла проблема в старом коде

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()
            }


            }

        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...