网站大量收购独家精品文档,联系QQ:2885784924

I后台定位上传的代码实践.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I后台定位上传的代码实践

后台定位上传的代码实践前言之前的文章说过我现在做的是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:locati

文档评论(0)

tiantiande + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档