2016-07-26 1 views
0

У меня есть приложение, где я должен отправить набор данных на сервер. Я могу сделать это с помощью 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) 
     } 
} 

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

ответ

0

Цель на ваш вопрос: загрузить триггер, когда ваше приложение находится на переднем плане.

Я сомневаюсь, что ваше решение, которое отправляет данные для разрыва только тогда, когда сеть становится доступной, хороша. Если сеть всегда доступна во время вашего приложения на переднем плане, у вас нет возможности отправлять данные. Поэтому я думаю, что вы должны изменить свою стратегию выгрузки, например, установить таймер и время его срабатывания, когда ваше приложение станет активным, аннулировать таймер, когда ваше приложение войдет в фон.

И я сомневаюсь, что правильно не понял ваш вопрос, если вы хотите отправить данные на сервер только тогда, когда сеть изменилась с WWAN на WiFi, вы можете использовать AFNetworkReachabilityManager AFNetworking, просто скопируйте файлы .h и .m в свой проект. ОК.

 Смежные вопросы

  • Нет связанных вопросов^_^