Если вы хотите запустить событие сокета, как только вы убьете приложение, вам нужно создать фоновую задачу, как у разработчика Apple Документация .
optional func applicationWillTerminate(_ application: UIApplication)
Вы должны использоватьЭтот метод используется для выполнения любых заключительных задач очистки для вашего приложения, таких как освобождение общих ресурсов, сохранение пользовательских данных и аннулирование таймеров.Ваша реализация этого метода имеет приблизительно пять секунд для выполнения любых задач и возврата.Если метод не возвращается до истечения времени, система может полностью завершить процесс.
Что вы можете сделать, это создать фоновую задачу для запуска события сокета, чтобы, если мы должны получить обратный вызов, мыможет прийти вовремя.
Пожалуйста, следуйте приведенному ниже коду для решения проблемы, с которой вы столкнулись:
Добавьте это свойство в свой Appdelegate
var taskIdentifier: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
Добавьте следующие методы
func startBackgroundTask() {
taskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { [weak self] in
self?.endBackgroundTask()
})
// Only to check if the task is in invalid state or not for debugging.
assert(task != UIBackgroundTaskInvalid)
}
func endBackgroundTask() {
UIApplication.shared.endBackgroundTask(taskIdentifier)
taskIdentifier = UIBackgroundTaskInvalid
}
func applicationWillTerminate(_ application: UIApplication) {
if let uniqueId = UserDefaults.standard.value(forKey: Constants.USER_DEFAULT_KEYS.UINQUE_ID) as? String {
CommonFunctions().emitResultOnDeviceDisconnect(qrcode: "\(Variables.QRCodeID)", uniqueId: uniqueId)
}
self.startBackgroundTask()
}
Я надеюсь, что это решит вашу проблему.В случае каких-либо проблем, пожалуйста, не стесняйтесь.
Спасибо.