Фоновая выборка executeFetchWithCompletionHandler не работает?
Мое приложение хочет обновлять сервер о местоположении пользователей каждые 5 секунд, даже если приложение находится в фоновом режиме. Я реализовал фоновую выборку для него.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))
application.setMinimumBackgroundFetchInterval(5.0)
return true
}
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
completionHandler(UIBackgroundFetchResult.NewData)
UpdateData()
}
func UpdateData(){
print("UpdateData executes")
// function to update data when ever this method triggers
}
но проблема в том,
- Я не могу ввести метод executeFetchWithCompletionHandler, если не нажму Отладка> Имитация фоновой выборки
- Как я могу добиться, чтобы вызвать executeFetchWithCompletionHandler через каждые 5 секунд.
1 ответ
Вы неправильно понимаете, что такое фоновая выборка. Разработчики не имеют власти над тем, когда фоновая выборка будет выполнена точно. iOS сама решает, когда разрешить приложению выполнять фоновую выборку.
setMinimumBackgroundFetchInterval
Функция только позволяет вам указать минимальный интервал времени, который должен проходить между фоновыми выборками, чтобы минимизировать энергию и использование данных вашего приложения. Однако установленный здесь интервал вовсе не гарантирует, что ваше приложение сможет выполнять это в фоновом режиме. Ключевое предложение в документации, касающейся этого, - "Извлекать контент оппортунистически в фоновом режиме...".
На данный момент единственный способ гарантировать, что ваше приложение может выполнять определенные функции (в том числе извлекать данные с сервера) в фоновом режиме, - отправлять молчащие push-уведомления с вашего собственного сервера через регулярные промежутки времени. Однако даже в этом случае система может решить не будить ваше приложение в ответ на тихое push-уведомление, если вашему приложению требуется много времени, чтобы завершить выполнение в ответ на push-сообщение или если ваше приложение получает слишком много уведомлений.