У меня есть приложение, где я должен отправить набор данных на сервер. Я могу сделать это с помощью NSURLSession или других API. Проблема в том, что мне нужно инициировать код для отправки данных по мере доступности сети. Запуск этого действия должен работать, даже если приложение находится в фоновом режиме/приостановлено. Я разделяю между использованием performFetchWithCompletionHandler или handleEventsForBackgroundURLSession. В настоящее время я использую первый.Отправка данных всякий раз, когда становится доступной сеть
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
//do some check for loggedInStatus here
if loggedInStatus {
let navigationController = self.window?.rootViewController as! UINavigationController
let myViewController = navigationController.viewControllers[0] as! MyViewController
//checking network connection
if NetworkReachability.connectedToNetwork() {
myViewController.syncStuff({ (result: UIBackgroundFetchResult) in
completionHandler(result)
})
}
}
}
В didFinishLaunchingWithOptions
,
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//if user is logged in set a minimum time interval at which the app should be woken up to sync stuff
if loggedInStatus {
application.setMinimumBackgroundFetchInterval(5)
}
else {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalNever)
}
}
Проблема такого подхода заключается в том, что этот метод будет получить срабатывает только тогда, когда приложение находится в фоновом режиме, на некотором интервале, но я не могу отправить вещи, если приложение на переднем плане с таким подходом. Каков правильный способ решения проблемы?