私は、サーバーに一連のデータを送信する必要のあるアプリケーションを持っています。私はNSURLSessionや他のAPIを使ってそれを行うことができます。問題は、ネットワークが利用可能になったときにデータを送信するためのコードをトリガーする必要があることです。このアクションの起動は、アプリがバックグラウンド/中断中であっても機能するはずです。私はperformFetchWithCompletionHandlerまたはhandleEventsForBackgroundURLSessionを使用して分割されます。現在私は前者を使用しています。 didFinishLaunchingWithOptions
でネットワークが利用可能になるといつでもデータを送信する
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)
})
}
}
}
、
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)
}
}
このアプローチの問題は、アプリはいくつかの区間に、バックグラウンドで動作している場合にのみ、この方法は、トリガー取得することですが、アプリがある場合、私はものを送信することはできません。フォアグラウンドでこのアプローチを使用します。問題を解決する適切な方法は何ですか?