我的客户要求我开发一些定期检索用户位置的应用程序。手机电池状态,然后将它们发送到我们的后端服务器进行数据分析,然后通过推送通知反馈。
但是通过app doc,我从apple ios dev doc了解到:
对于需要执行更多执行时间的任务,您必须这样做 请求特定权限,以便在后台运行它们 他们被停职了。在iOS中,只允许使用特定的应用类型 在后台运行:
在后台播放用户可听内容的应用, 比如音乐播放器应用
让用户了解其用户信息的应用 始终位置,例如导航应用
支持的应用 互联网协议语音(VoIP)
需要的报亭应用 下载和处理新内容
接收定期更新的应用 来自外部配件
如果我们将此应用程序包装为某个导航应用程序以便我们可以拥有长时间运行的后台任务,我想知道这是否可行? appstore会拒绝我们的应用吗?
顺便说一下,Apple的导航应用程序的定义是什么?答案 0 :(得分:2)
您可以考虑使用:
[CLLocationManager startMonitoringSignificantLocationChanges];
如果应用程序在位置发生重大变化时被杀死,这将导致您的应用程序重新启动,允许您以相当规律的间隔更新服务器上的详细信息,假设用户正在移动。这不需要任何特殊的背景许可。来自文档:
如果您启动此服务并且您的应用程序随后终止,则系统会在新事件到达时自动将应用程序重新启动到后台。在这种情况下,传递给locationManager的选项字典:didUpdateLocations:应用程序委托的方法包含密钥UIApplicationLaunchOptionsLocationKey,以指示您的应用程序是由于位置事件而启动的。
您的另一个选择是将应用配置为需要在后台进行连续的位置更新,但如果不知道应用的主要功能,则很难知道这是否会通过商店提交。
答案 1 :(得分:0)
https://github.com/yarodevuci/backgroundTask在这里检查我的代码我正在使用播放空白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