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?