在iOS中实现长时间运行的后台任务

在iOS中实现长时间运行的后台任务,ios,app-store,background-process,Ios,App Store,Background Process,我的客户要求我开发一些应用程序,定期检索用户位置和手机电池状态,然后将它们发送到后端服务器进行数据分析,然后通过推送通知进行反馈 但通过app doc,我从apple ios开发人员那里了解到: 对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,仅允许使用特定的应用程序类型 在后台运行: 在后台向用户播放音频内容的应用程序, 例如音乐播放器应用程序 让用户随时了解自己的应用程序 位置,如导航应用程序 支持 互联网语音协议(VoIP) 需要更新

我的客户要求我开发一些应用程序,定期检索用户位置和手机电池状态,然后将它们发送到后端服务器进行数据分析,然后通过推送通知进行反馈

但通过app doc,我从apple ios开发人员那里了解到:

对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,仅允许使用特定的应用程序类型 在后台运行:

在后台向用户播放音频内容的应用程序, 例如音乐播放器应用程序

让用户随时了解自己的应用程序 位置,如导航应用程序

支持 互联网语音协议(VoIP)

需要更新的报摊应用程序 下载并处理新内容

接收定期更新的应用程序 从外部配件

我想知道如果我们把这个应用程序包装成一些导航应用程序,这样我们就可以有长期运行的后台任务,这是否可行?appstore是否会拒绝我们的应用


< P>你可以考虑使用:

[CLLocationManager startMonitoringSignificantLocationChanges];
如果在位置发生重大变化时应用程序被终止,则这将导致应用程序重新启动,从而允许您在假设用户正在移动的情况下,以相当固定的时间间隔更新服务器上的详细信息。这不需要任何特殊的背景许可。从文档中:

如果启动此服务并随后终止应用程序,则如果出现新事件,系统会自动将应用程序重新启动到后台。在这种情况下,传递给应用程序委托的locationManager:didUpdateLocations:方法的选项字典包含UIApplicationLaunchOptionsLocationKey键,以指示应用程序是由于位置事件而启动的

您的另一个选项是将应用程序配置为需要在后台连续更新位置,但如果不知道应用程序的主要功能,就很难知道这是否能通过商店提交。

检查我的代码这里我使用的音频播放器可以播放空白的wav文件,在IOS 8上运行效果很好,24小时内电池使用率约为10%。

如何使用:

var backgroundTask = BackgroundTask()
backgroundTask.startBackgroundTask() //Starts playing blank audio file. You can run NSTimer() or whatever you need and it will continue executing in the background.

backgroundTask.stopBackgroundTask() //Stops the task

问问苹果。你需要非常清楚应用程序的实用性,不要试图掩饰它的功能。嗨,Wain,谢谢你的回复。很抱歉,因为保密协议,我不能告诉更多的要求。我可能会发邮件给苹果公司寻求答案。嗨,塔克,谢谢你的提示。我需要每隔30分钟不断地重新检查电池状态。我们的应用程序大多类似于公用事业和LBS社区的混合体。位置是必要的,但不是核心。