Я выполняю звонок для отдыха всякий раз, когда приложение приложение становится неактивным. Я делаю вызов в методе Application Application WillResignatacation . Вызов работает отлично, если пользователь нажимает кнопку «Домой» на устройстве, но если пользователь блокирует экран, пока приложение все еще находится на переднем плане, вызов, похоже, отправляется, но никогда не завершается, и я не получаю вызов на стороне сервера. < /p>
Я даже попытался сделать то, что было упомянуто в разделе «Создание менеджера с фоновой конфигурацией < /code>», но результат был таким же. При использовании фоновой конфигурации я получаю домен ошибки ошибки = nsurlerrordomain code = -997 «Потерянное соединение с службой переноса фонового передачи» . Это код, который я имею в настоящее время: < /p>
var deviceId:String
// Check if deviceId has been stored
if let device: String = NSUserDefaults.standardUserDefaults().stringForKey(Globals.KEY_DEVICE_ID) {
// deviceId is stored, use it
deviceId = device
} else {
// deviceId not stored, create a new one and store it
deviceId = NSUUID().UUIDString
NSUserDefaults.standardUserDefaults().setObject(deviceId, forKey: Globals.KEY_DEVICE_ID)
}
let params = ["statusId": "2"]
let url = "client/device/" + deviceId
// Create the URL Request
let URLRequest = NSMutableURLRequest(URL: NSURL(string: Globals.BASE_URL + url)!)
// set header fields
if let key = NSUserDefaults.standardUserDefaults().stringForKey(Globals.NS_KEY_SESSION) {
URLRequest.setValue(key, forHTTPHeaderField: "X-XX-API")
}
// Add user agent
if let userAgent = NSUserDefaults.standardUserDefaults().stringForKey(Globals.NS_KEY_USER_AGENT) {
URLRequest.setValue(userAgent, forHTTPHeaderField: "User-Agent")
}
// Set the HTTP method
URLRequest.HTTPMethod = Alamofire.Method.PUT.rawValue
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.myapp.background")
manager = Alamofire.Manager(configuration: configuration)
let encodeMethod: Alamofire.ParameterEncoding = Alamofire.ParameterEncoding.URL
manager.startRequestsImmediately = true
manager.request(encodeMethod.encode(URLRequest, parameters: params).0).validate().responseJSON() {
(response) in
print("response from call: \(response)")
self.manager = nil
}
< /code>
Я использую Xcode 7.1 с целью развертывания 9.1 и Alamofire версии 3.1.2.
Подробнее здесь: https://stackoverflow.com/questions/336 ... ing-screen