[后台定位上传的代码实践.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[后台定位上传的代码实践

后台定位上传的代码实践前言之前的文章说过 我现在做的是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中随便键入任何内容完成这两步 我们的前期工作就完成了?Background Modes是iOS7带入的新功能 而NSLocationAlawaysUsageDescription为了增强权限机制引入的提示描述 不添加这个的话 定位功能可是使用不了的代码定位肯定要跟CLLocationManager打交道 所以我们先定义一个CLLocationManager的子类 并根据需求中的几点定义三个变量@interface?MMLocationManager?:?CLLocationManager??+?(instancetype)sharedManager;??@property?(nonatomic,?assign)?CGFloat?minSpeed;//最小速度?@property?(nonatomic,?assign)?CGFloat?minFilter;//最小范围?@property?(nonatomic,?assign)?CGFloat?minInteval;//更新间隔??@end?这里解释一下这几个参数minSpeed?如果当前运动速度大于此值 则满足需求(1) 以时间为更新依据(minFilter) 如果当前运动速度小于此值 则满足需求(2) 以范围为更新依据(minInteval) minFilter?最小的触发范围 用于需求(1) minInteval?更新间隔 用于需求(2) 接下来是初始化函数-?(instancetype)init?{??self?=?[super?init];??if?(?self?)??{??self.minSpeed?=?3;??self.minFilter?=?50;??self.minInteval?=?10;???self.delegate?=?self;??self.distanceFilter?=?self.minFilter;??self.desiredAccuracy?=?kCLLocationAccuracyBest;??}??return?self;?}?这里的默认值可以根据需求来调整然后是位置更新后的处理逻辑 其实也非常的简单、-?(void)locationManager:(CLLocationManager?*)manager?didUpdateLocations:(NSArray?*)locations?{??CLLocation?*location?=?locations[0];???NSLog(@%@,location);???//根据实际情况来调整触发范围??[self?adjustDistanceFilter:location];???//上传数据??[self?uploadLocation:location];?}?而这个adjustDistanceFilter函数 就是整个代码的核心 会根据当前速度来动态的调整di

文档评论(0)

xuetingting + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档