#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 не даст мне много времени для выхода из системы пользователя, поэтому я решил, когда пользователь или приложение войдут:
sceneDidDisconnect
В этом случае я вызову функцию, которая переведет пользователя в автономный режим.
if Auth.auth().currentUser != nil {
print("put offline")
user.logout()
}
sceneDidBecomeActive
В этом случае я вызову функцию, которая снова вернет пользователя в сеть.
if Auth.auth().currentUser != nil {
user.offline()
}
applicationWillTerminate
Когда приложение завершается, я вызываю функцию, которая помещает пользователя Offline
, затем Logout
пользователя и, наконец Delete the user
, из базы данных.
Я надеюсь, что этот метод поможет вам.
Ответ №2:
Фоновая работа очень ограничена, мы не можем выполнять такого рода вычисления со 100% вероятностью, что они будут выполнены. Эту логику лучше оставить серверной части