#ios #swift #xcode
#iOS #swift #xcode
Вопрос:
Я создаю приложение для чата, однако, когда пользователь завершает работу приложения, хорошей практикой для меня является выход из системы этого пользователя и его удаление. Однако, когда пользователь завершает работу приложения, если я что-то печатаю, оно будет напечатано, однако, когда я помещаю код для выхода из системы пользователя, код, похоже, не выполняется, я не знаю почему!
Вот это код:
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
Auth.auth().currentUser?.delete(completion: { (error) in
if error == nil {
do{
try Auth.auth().signOut()
print("user has been logged out without problems!")
}catch{
print("there was an error when trying executing logout function")
}
}
})
}
func applicationWillTerminate(_ application: UIApplication) {
Auth.auth().currentUser?.delete(completion: { (error) in
if error == nil {
do{
try Auth.auth().signOut()
print("user has been logged out without problems!")
}catch{
print("there was an error when trying executing logout function")
}
}
})
}
любое решение для выполнения этого кода, когда пользователь завершает работу приложения?
Комментарии:
1. Как Auth.auth() регистрирует вход и выход пользователя?
2. @GarethPrice когда пользователь вводит свой адрес электронной почты, будет сгенерирован случайный пароль, и он войдет в систему, и эта функция работает с кнопкой без проблем, однако она не работает при завершении работы приложения, я не мог понять, почему
3. У вас не будет достаточно времени выполнения для выполнения сетевой операции. Вы не можете полагаться на то, что этот метод всегда вызывается в любом случае. Почему бы вам не сохранить вход пользователя во время выполнения? В качестве альтернативы просто попросите их повторно пройти проверку подлинности при запуске
4. @Paulw11 мое приложение основано на скорости, поэтому пользователю не нужно выполнять все эти шаги, просто имя пользователя, возраст и вход в систему напрямую, вам не нужно регистрироваться или что-то еще, в этом случае я буду судьей, чтобы убедиться, что пользователь выходит из системы при завершении работы приложения и переходит в автономный режим, когда приложениенаходится в фоновом режиме
5. К сожалению, я не думаю, что это то, чего вы сможете достичь исключительно на стороне приложения. Возможно, вам потребуется, чтобы ваше приложение отправляло на сервер сообщения «keep alive», а сервер показывал пользователям, что они находятся в автономном режиме, после нескольких пропущенных сохранений. Приложение может быть завершено пользователем без
willTerminate
вызова.
Ответ №1:
Я попытался стимулировать ваш код, и я заметил проблему.
Из того, что я могу сказать (возможно):
- Приложение не предоставляет время для завершения кода.
- Вы удаляете пользователя, а затем выходите из системы.
Auth.auth().currentUser?.delete
Я попробовал этот код, и, похоже, он работает нормально без проблем:
do{
Auth.auth().currentUser?.delete(completion: nil)
try Auth.auth().signOut()
print("user has been logged out without problems!")
}catch{
print("there was an error when trying executing logout function")
}