Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send request in applicationWillTerminate

In my app I need to send some instructions to server when the user terminated an app. In applicationWillTerminate func I tried to send it, but it never came to server. I tried to use Alamofire and native URLSession but it doesn't work. Does anybody know how can I send it? I use this code

                let request = "\(requestPrefix)setDriverOrderStatus"
    if let url = URL(string:request) {
        var parameters : [String : String] = [:]
        parameters["access_token"] = UserSession.accessToken
        parameters["driver_id"] = UserSession.userID
        parameters["status"] = status
        var req = URLRequest(url: url)
        req.httpMethod = HTTPMethod.put.rawValue
        do {
            req.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
        } catch let error {
            print(error.localizedDescription)
        }
        _ = URLSession.shared.dataTask(with: req, completionHandler: { data, response, error in
            guard error == nil else {
                print(error ?? "error")
                return
            }
            guard let data = data else {
                print("Data is empty")
                return
            }
            let json = try! JSONSerialization.jsonObject(with: data, options: [])
            print(json)
        }).resume
    }
like image 213
Alexandr Kolesnik Avatar asked Apr 27 '26 12:04

Alexandr Kolesnik


1 Answers

One solution that worked for me is to add sleep at the end of the applicationWillTerminate function like this :

func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.

    // HERE YOU will make you HTTP request asynchronously
    self.postLogoutHistory()

    // 3 is the number of seconds in which you estimate your request 
    // will be finished before system terminate the app process

    sleep(3)

    print("applicationWillTerminate")

    // self.saveContext()
}
like image 100
Mohamed Amine Ben Haddada Avatar answered Apr 30 '26 01:04

Mohamed Amine Ben Haddada



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!