有没有办法通知服务器该应用已终止?

时间:2019-04-10 06:53:32

标签: ios swift terminate

我编写了将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 :(得分:0)

  • 这是唯一可以调用API来告知应用已终止的函数。

答案 1 :(得分:0)

当用户通过在任务切换器中向上滑动应用程序终止应用程序时,不会调用

applicationWillTerminate。 仅当iOS看门狗进程出于诸如高内存消耗之类的原因而杀死您的应用程序时,才会调用它。

因此,如果您信任此方法,仍然无法完全处理用例。 另外,Apple到目前为止还没有公开的本地回调方法来处理这种情况。