![](https://csdnimg.cn/release/download_crawler_static/32349419/bg1.jpg)
后台定位上传的代码实践
前言
之前的文章 说过 我现在做的是 LBS定位的社交 APP 其中主要的一个功能就是能够实时定位
社交圈中各个成员的位置 后台实时上传位置则是非常重要的一个技术点 接下来就来说说
我关于这方面的实践经验
需求
先来看看实现这个功能的具体需求是什么 由于我们是实时定位的生活类社交 APP 所以我
们需要做到一下几点
1. 如果用户的位置在持续变化 则隔一段时间上报一次
由于我们希望能够实时的将用户的位置变化反馈在 APP里 所以定时的上报是刚需
2. 如果用户的移动速度很慢 则隔一段距离上报一次
如果用户是低速率的状态 (比如步行的移动速度大概就是 1m/s 左右 ) 这个时候如果还按 (1)
中的方式来上报的话 由于变化太小 地图上的点会非常的密集 这种数据的意义不大 (而且
如果要做轨迹服务的话 这些密集点都是必须有花掉的 ) 所以这时候我们按照距离间隔来上
报
3. 如果用户的位置在到达某处后没有变化 则不继续上报
我们只关心位置的变化 如果用户的位置没有变化或者变化很小 其实是不需要上报其位置
的(比如进入的公司 或者等一个很长时间的红灯 ) 这时候我们就不上报 (以达到省电的目的 )
4. 切换到后台也要能定位上报
后台上报是必须的 用户不可能一直运行着我们的 APP (iOS4开始就支持了 )
5. APP 因各种原因终止运行后 (用户主动关闭 , 系统杀掉 ) 也要能定位上报
用户主动关闭 APP 的几率不大 但是因系统调度被杀掉的情况是很普遍的 这个时候我们也
要能够上报 (iOS7开始已支持被杀掉后唤醒 )
分析完需求 接下来就开始介绍如何实现
准备
首先做一些准备工作
在 target 的 Capabilities 选 项 中 打 开 Background Modes 并 勾 选 Location updates
然后在 plist 中添加 NSLocationAlawaysUsageDescription 的键 在 value 中随便键入任何内容