Как отключить неактивных пользователей в чате приложения xcode

#swift #xcode #swift5

#swift #xcode #swift5

Вопрос:

Я пытаюсь найти способ отключить активного пользователя для чата приложения, когда приложение работает в фоновом режиме более 120 секунд, однако таймер, похоже, не работает в фоновом режиме, здесь это код

    func sceneDidEnterBackground(_ scene: UIScene) {
        Timer.scheduledTimer(withTimeInterval: 3, repeats: false) { (timer) in
            print("start the logout code")
        }
    }
  

в коде вы можете видеть 3 секунды, потому что даже 3 секунды не работают. Не могли бы вы сообщить мне, какой наилучший подход я могу использовать, чтобы я вышел из системы пользователя и не продолжал показывать его в онлайн-списке?

Комментарии:

1. Вы ничего не можете сделать, когда находитесь в фоновом режиме, вы приостановлены. Если вы хотите выйти из системы пользователя, потому что пользователь находится в фоновом режиме, выйдите из системы, когда пользователь переходит в фоновый режим.

2. @matt не имеет смысла, поэтому, если пользователь по ошибке переходит в фоновый режим, я выхожу из него? это не имеет смысла

3. Я понимаю это, я просто пытаюсь дать ощущение реальности. Нет такой вещи, как что-то делать через 120 секунд после того, как пользователь переходит в фоновый режим. Так оно и есть.

Ответ №1:

Я сам работал над приложением для чата, и у меня возникла проблема, из-за которой мне потребовалось много времени, чтобы найти обходной путь.

Что я заметил, так это то, что background не даст мне много времени для выхода из системы пользователя, поэтому я решил, когда пользователь или приложение войдут:

  1. sceneDidDisconnect

В этом случае я вызову функцию, которая переведет пользователя в автономный режим.

 if Auth.auth().currentUser != nil {
            print("put offline")
            user.logout()
}
  
  1. sceneDidBecomeActive

В этом случае я вызову функцию, которая снова вернет пользователя в сеть.

 if Auth.auth().currentUser != nil {
            user.offline()
}
  
  1. applicationWillTerminate

Когда приложение завершается, я вызываю функцию, которая помещает пользователя Offline , затем Logout пользователя и, наконец Delete the user , из базы данных.

Я надеюсь, что этот метод поможет вам.

Ответ №2:

Фоновая работа очень ограничена, мы не можем выполнять такого рода вычисления со 100% вероятностью, что они будут выполнены. Эту логику лучше оставить серверной части