Вызовите URLSession.shared.dataTask, когда приложение является фоновым

Я пытаюсь отправить данные обратно на сервер, когда приложение находится в фоновом или приостановленном состоянии. Я реализовал действенное push-уведомление с действиями yes и No. Я должен обновить бэкэнд с да или нет постучал. Мой код ниже работает нормально, если приложение работает на переднем плане, но не работает в фоновом или приостановленном состоянии. Может ли кто-нибудь знать, как справиться с этим.

func updateEmployeeStatus(){

    let json = ["id": "23", "empId": "3242", "status": "Success"] as Dictionary<String, String>


    let jsonData = try? JSONSerialization.data(withJSONObject: json)

    // create post request
    let url = URL(string: "https://10.91.60.14/api/employee/status")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    // insert json data to the request
    request.httpBody = jsonData

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "No data")
            return
        }
        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let responseJSON = responseJSON as? [String: Any] {
            print("The response is",responseJSON)
        }
    }

    task.resume()
}

1 ответ

Чтобы запустить задачу с данными, когда ваше приложение находится в фоновом режиме, вы не можете использовать общий URLSession. Вы должны создать экземпляр "URLSession", используя фоновую конфигурацию

let bundleID = Bundle.main.bundleIdentifier
let configuration = URLSessionConfiguration.background(withIdentifier: "\(bundleID).background")
configuration.sessionSendsLaunchEvents = true
configuration.isDiscretionary = false
configuration.allowsCellularAccess = true
let session = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: nil)

и использовать этот сеанс, чтобы сделать вашу задачу данных

Обратите внимание, что при использовании фоновой конфигурации сеанса вы не можете выполнить задачу данных с блоком завершения. Вы должны использовать делегат вместо этого.

Надеюсь, это поможет.

Другие вопросы по тегам