Есть ли способ уведомить сервер о том, что приложение было прекращено? - PullRequest
0 голосов
/ 10 апреля 2019

Я написал код для отправки URLRequest в applicationWillTerminate, но узнал, что это неправильно.Есть ли другой способ уведомить сервер о том, что приложение было прекращено?Приведенный ниже код получает и возвращает данные, возвращенные с сервера, но, поскольку он только уведомляет сервер о завершении приложения, в принципе это необязательно.

 func applicationWillTerminate(_ application: UIApplication) {
    appExitRequest()
}

func appExitRequest() {
    let settings = UserDefaults.standard
    let id = settings.string(forKey: myId)

    guard let myId = id?.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
        return
    }


    guard let req_url = URL(string: "http://localhost/test.php/terminate?myId=\(myId)") else {
        return
    }
    print(req_url)
    let req = URLRequest(url: req_url)
    let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
    let task = session.dataTask(with: req, completionHandler: {
        (data, response, error) in
        session.finishTasksAndInvalidate()
        do {
            print("OK", data ?? "Empty")
        } catch {
            print("Failure", error)
        }
    })
    task.resume()
}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

applicationWillTerminate не будет вызываться, когда пользователь завершает работу приложения, проводя по приложению в переключателе задач.Он будет вызываться только тогда, когда сторожевой процесс iOS убивает ваше приложение по каким-либо причинам, таким как высокое потребление памяти и т. Д.

Таким образом, ваш вариант использования не будет полностью обработан, если вы доверяете этому методу.Кроме того, на данный момент Apple не предоставляет собственный метод обратного вызова для обработки этого сценария.

0 голосов
/ 10 апреля 2019
  • Это единственная функция, доступная для вызова API, чтобы сообщить, что приложение завершено.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...