我想在某个时间间隔内发出 url 请求(例如,每 10 分钟应用程序应该进行一次 url 调用并获取一些 json 数据)。应用程序在后台运行时应该能够做到这一点。这可以做到吗?如果是这样,这是否违反了 Apple 服务条款?有什么限制吗?
3 回答
随着 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 中声明应用支持的后台任务。我们需要将UIBackgroundModes 键添加到我们的应用程序的信息中。列表。之后,您可以正常使用计时器,例如:
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];
希望它会帮助你。
在基本级别:只需安排一个 NSTimer 并在计时器功能上启动 URL 请求。如果您的目标是 iOS7,请确保您使用的是 NSURLSession。但是,重要的一点是要知道您是否想在后台执行此操作。如果是,您必须了解有关 iOS 后台模式的更多信息,因为您将无法在此模式下维护您的计时器。没有任何事情会导致拒绝。
我认为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:/