Фоновый запрос не выполняется Alamofire Swift

Я пытаюсь сделать вызовы в фоновом режиме, такие как POST,GET, чтобы быть более точным в методе didReceiveRemoteNotification, потому что они начинают работать при получении push-уведомления. Моя проблема в том, что все Alamofire.request никогда не вызываются в фоновом режиме, пока я не открою приложение. У меня сейчас

Я пытался открыть сессию, но это не заставит запрос работать.

Это то, что я хочу выполнить в фоновом режиме (мобильный телефон в фоновом режиме)

Alamofire.Manager(configuration: configuration).request(.GET, url, parameters: nil)
                        .responseJSON { (_, _, JSON, _) in
                            //println(JSON)
                                println(JSON)
                REST OF THE CODE 

Но это не сработает, даже если я добавлю код под этим запросом, он будет работать, но ответ на запрос или даже запрос не будет выполнен.

1 ответ

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

Есть beginBackgroundTaskWithExpirationHandler: это специально предназначено для этого. Когда вы используете его, у вас будет еще несколько минут, чтобы выполнить все, что вам нужно (после этого ограничения ваше приложение будет прервано, несмотря ни на что, теперь ваше приложение будет немедленно прекращено).

Вы можете написать следующие методы:

func beginBackgroundTask() -> UIBackgroundTaskIdentifier {
    return UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({})
}

func endBackgroundTask(taskID: UIBackgroundTaskIdentifier) {
    UIApplication.sharedApplication().endBackgroundTask(taskID)
}

Когда вы хотите его использовать, вы просто начинаете / заканчиваете задачу при запуске / завершении вызова загрузки:

// Start task
let task = self.beginBackgroundTask()

// Do whatever you need, like download of the images
self.someBackgroundTask()

...

// End task once everything you need to do is done
self.endBackgroundTask(task)

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

Изменить 1:

Если проблема в том, что ваш метод загрузки НИКОГДА не вызывается, то это означает, что вы не отправляете правильные данные в уведомлении:

Чтобы push-уведомление инициировало операцию загрузки, в полезную нагрузку уведомления должен входить ключ доступности содержимого со значением, равным 1. Когда этот ключ присутствует, система запускает приложение в фоновом режиме (или запускает его в фоновом режиме) и вызывает приложение приложения-делегата:didReceiveRemoteNotification:fetchCompletionHandler: метод. Ваша реализация этого метода должна загрузить соответствующий контент и интегрировать его в ваше приложение. https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

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