2016-07-26 30 views
0

Ich habe eine App, wo ich eine Reihe von Daten an den Server senden muss. Ich kann das mit NSURLSession oder anderen APIs tun. Das Problem ist, dass ich den Code für das Senden der Daten auslösen muss, wenn Netzwerk verfügbar wird. Das Auslösen dieser Aktion sollte auch dann funktionieren, wenn sich die App im Hintergrund/ausgesetzt befindet. Ich bin zwischen der Verwendung von performFetchWithCompletionHandler oder handleEventsForBackgroundURLSession aufgeteilt. Momentan benutze ich erstere.Senden von Daten, wenn das Netzwerk verfügbar wird

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) 
       }) 
      } 

     } 
    } 

In 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) 
     } 
} 

Das Problem bei diesem Ansatz ist, dass diese Methode nur erhält ausgelöst wird, wenn die Anwendung im Hintergrund ist, auf einem Intervall, aber ich kann nicht Sachen schicken, wenn die App im Vordergrund mit diesem Ansatz. Was ist der richtige Weg, um das Problem zu lösen?

Antwort

0

Ziel ist Ihre Frage: Starten Sie den Upload, wenn Ihre App im Vordergrund ist.

Ich bezweifle Ihre Lösung, die Daten senden, um nur zu trennen, wenn das Netzwerk verfügbar wird, ist gut. Wenn das Netzwerk immer verfügbar ist, während sich Ihre App im Vordergrund befindet, haben Sie keine Möglichkeit, Daten zu senden. Ich denke, Sie sollten Ihre Upload-Strategie ändern, z. B. einen Timer und sein Feuerzeitintervall festlegen, wenn Ihre App aktiv wird, den Timer ungültig machen, wenn Ihre App in den Hintergrund tritt.

Und ich bezweifle, dass ich Ihre Frage nicht richtig verstehe, wenn Sie Daten an den Server nur senden möchten, wenn das Netzwerk von WWAN zu WiFi geändert wurde, können Sie AFNetworking AFNetworkReachabilityManager verwenden, kopieren Sie einfach .h und .m-Datei zu Ihrem Projekt OK.