Фоновая выборка executeFetchWithCompletionHandler не работает? - PullRequest
0 голосов
/ 16 мая 2018

Мое приложение хочет обновлять сервер о местоположении пользователей через каждые 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
}

но проблема в

  1. Я не могу ввести executeFetchWithCompletionHandler метод, пока я не нажму Отладка> смоделировать выборку фона
  2. Как можно добиться, чтобы вызывать executeFetchWithCompletionHandler через каждые 5 секунд.

1 Ответ

0 голосов
/ 16 мая 2018

Вы неправильно понимаете, что такое фоновая выборка.У разработчиков нет мощности , когда фоновая выборка будет выполнена точно.iOS сама решает, когда разрешить приложению выполнять фоновую выборку.

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

На данный моментЕдинственный способ гарантировать, что ваше приложение может выполнять определенные функции (в том числе извлекать данные с сервера) в фоновом режиме, - отправлять молчащие push-уведомления с вашего собственного сервера через регулярные промежутки времени.Однако даже в этом случае система может решить не будить ваше приложение в ответ на тихое push-уведомление, если вашему приложению требуется много времени, чтобы завершить выполнение в ответ на push-уведомление или если ваше приложение получает слишком много уведомлений.

...