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

Is there a way to notify the server that the app has been terminated?

我编写了向 applicationWillTerminate 发送 URLRequest 的代码,但得知这是错误的。 有没有其他方法可以通知服务器该应用程序已终止? 下面的代码接收并returns服务器返回的数据,但由于它只是通知服务器应用程序结束,所以原则上没有必要。

 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()
}
  • 这是唯一可用于调用 API 以告知应用已终止的函数。

applicationWillTerminate 不会在用户通过在任务切换器中向上滑动应用程序来终止应用程序时被调用。 仅当 iOS 看门狗进程因高内存消耗等任何原因终止您的应用程序时才会调用它。

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