在后台运行URL请求

时间:2013-10-14 06:21:12

标签: ios objective-c

我想在某个时间间隔内发出网址请求(例如,每10分钟应用应该拨打一个网址并获取一些json数据)。应用程序应该能够在后台运行时执行此操作。可以这样做吗?如果是这样,这是否违反了Apple的服务条款?有没有限制?

3 个答案:

答案 0 :(得分:4)

使用ios 7添加了可在后台运行的新应用程序列表。他们是:

1.  Apps that play audible content to the user while in the background, such as a music player app
2.  Apps that record audio content while in the background.
3.  Apps that keep users informed of their location at all times, such as a navigation app
4.  Apps that support Voice over Internet Protocol (VoIP)
5.  Apps that need to download and process new content regularly
6.  Apps that receive regular updates from external accessories

我们只需要在info.plist中声明app支持的后台任务。我们需要补充一下   UIBackgroundModes键到我们应用的信息。 plist中即可。之后,您可以使用计时器正常工作,例如:

UIBackgroundTaskIdentifier bgTask;

UIApplication  *app = [UIApplication sharedApplication];

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask]; 
}];

self.timer = [NSTimer scheduledTimerWithTimeInterval:600 target:self
selector:@selector(startServices) userInfo:nil repeats:YES];

希望它会对你有所帮助。

答案 1 :(得分:0)

在基本级别:只需安排NSTimer并在计时器功能上启动URL请求。如果您的目标是iOS7,请确保使用的是NSURLSession。但重要的一点是要知道你是否想要在后台做同事。如果是,您必须了解有关iOS后台模式的更多信息,因为您无法在此模式下维护计时器。没有任何内容可能导致拒绝。

答案 2 :(得分:0)

我认为iOS中存在一些限制,当应用处于后台模式时,您无法连续发送请求。当App进入后台模式时,iOS允许一点时间完成Web请求。 请查看此Apple文档: https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/beginBackgroundTaskWithExpirationHandler:/