欢迎来到天天文库
浏览记录
ID:34750805
大小:337.95 KB
页数:8页
时间:2019-03-10
《后台定位上传的代码实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、后台定位上传的代码实践前言之前的文章说过我现在做的是LBS定位的社交APP其中主要的一个功能就是能够实时定位社交圈中各个成员的位置 后台实时上传位置则是非常重要的一个技术点接下来就来说说我关于这方面的实践经验需求先来看看实现这个功能的具体需求是什么由于我们是实时定位的生活类社交APP所以我们需要做到一下几点1.如果用户的位置在持续变化则隔一段时间上报一次由于我们希望能够实时的将用户的位置变化反馈在APP里所以定时的上报是刚需2.如果用户的移动速度很慢则隔一段距离上报一次如果用户是低速率的状态(比如步行的移动速度大概就是1m/s左右)这个时候如果还按(1)中的方式来上报的话由于变化
2、太小地图上的点会非常的密集这种数据的意义不大(而且如果要做轨迹服务的话这些密集点都是必须有花掉的)所以这时候我们按照距离间隔来上报3.如果用户的位置在到达某处后没有变化则不继续上报我们只关心位置的变化如果用户的位置没有变化或者变化很小其实是不需要上报其位置的(比如进入的公司或者等一个很长时间的红灯)这时候我们就不上报(以达到省电的目的)4.切换到后台也要能定位上报后台上报是必须的用户不可能一直运行着我们的APP(iOS4开始就支持了)5.APP因各种原因终止运行后(用户主动关闭,系统杀掉)也要能定位上报用户主动关闭APP的几率不大但是因系统调度被杀掉的情况是很普遍的这个时候我们也
3、要能够上报(iOS7开始已支持被杀掉后唤醒)分析完需求接下来就开始介绍如何实现准备首先做一些准备工作在target的Capabilities选项中打开BackgroundModes 并勾选Locationupdates然后在plist中添加NSLocationAlawaysUsageDescription的键在value中随便键入任何内容完成这两步我们的前期工作就完成了 BackgroundModes是iOS7带入的新功能而NSLocationAlawaysUsageDescription为了增强权限机制引入的提示描述不添加这个的话定位功能可是使用不了的代码定位肯定要跟CLLoc
4、ationManager打交道所以我们先定义一个CLLocationManager的子类并根据需求中的几点定义三个变量@interface MMLocationManager : CLLocationManager + (instancetype)sharedManager; @property (nonatomic, assign) CGFloat minSpeed; //最小速度 @property (nonatomic, assign) CGFloat minFilter; //最小范围 @property (nonatomic, assign) CGFl
5、oat minInteval; //更新间隔 @end 这里解释一下这几个参数minSpeed 如果当前运动速度大于此值则满足需求(1)以时间为更新依据(minFilter)如果当前运动速度小于此值则满足需求(2)以范围为更新依据(minInteval)minFilter 最小的触发范围用于需求(1)minInteval 更新间隔用于需求(2)接下来是初始化函数- (instancetype)init { self = [super init]; if ( self ) { self.minSpeed = 3; sel
6、f.minFilter = 50; self.minInteval = 10; self.delegate = self; self.distanceFilter = self.minFilter; self.desiredAccuracy = kCLLocationAccuracyBest; } return self; } 这里的默认值可以根据需求来调整然后是位置更新后的处理逻辑其实也非常的简单、- (void)locationManager:(CLLocationManager *)mana
7、ger didUpdateLocations:(NSArray *)locations { CLLocation *location = locations[0]; NSLog(@"%@",location); //根据实际情况来调整触发范围 [self adjustDistanceFilter:location]; //上传数据 [self uploadLocation:location]; } 而这个adjustDista
此文档下载收益归作者所有