我有一个应用程序,我必须将一组数据发送到服务器。我可以使用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 :(得分:0)
针对您的问题:当您的应用处于前台时触发上传。
我怀疑只有在网络可用时才将数据发送到服务器的解决方案是好的。如果在您的应用处于前台期间网络始终可用,则您无法发送数据。因此,我认为您应该更改上传策略,例如在应用变为有效时设置定时器及其开启时间间隔,当应用进入后台时,无效定时器。
我怀疑自己没有正确理解你的问题,如果你想只在网络从WWAN变为WiFi时才将数据发送到服务器,你可以使用AFNetworking的AFNetworkReachabilityManager,只需复制.h和.m文件到你的项目是好的。