锻炼吃饭的家伙i看不完别走。。。iOS开发杂货铺

iOS 后台定位

2018-07-14  本文已影响3人  LoveY34

后台定位实现步骤:(涉及类CLLocationManager)

1.使用API:-requestAlwaysAuthorization(支持iOS8.0以上)发起申请后台定位权限

image2018-7-14 17_35_42.png
2.设置属性allowsBackgroundLocationUpdates=YES(支持iOS9.0以上)(没设置的话,app进入后台后定位功能就停止了!)

3.使用API:-startUpdatingLocation发起定位更新,在定位成功后在回调- locationManager:didUpdateLocations(支持iOS6.0以上)的参数locations中获取定位信息(包裹在CLLocation的对象中,如精确的经纬度),如果需要详细的经纬度信息需要使用CLGeocoder的对象做一次翻译就可以得到详细的城市街道等定位信息了,相对应的使用API:-stopUpdatingLocation就可以停止定位更新了。

注意:系统会根据属性distanceFilter的值多次触发回调,可以理解为移动多少距离触发一次回调,系统提供的一个值kCLDistanceFilterNone表示即使不移动也会隔几秒触发一次回调,如果想至此发一次定位回调可以使用-requestLocation(支持iOS9.0以上)发起一次定位

4.在info.plist中添加以NSLocationAlwaysUsageDescription为key的申请权限的文案说明,这个文案会在第一次安装app时会弹出,也可以在设置->app->位置中查看到

注意:iOS11中还需要分别添加以NSLocationAlwaysUsageDescriptionNSLocationAlwaysAndWhenInUseUsageDescription为key的申请权限文案说明,不添加的话无法向用户申请定位权限,貌似在iOS11中API:-requestAlwaysAuthorization是申请所有类型定位的统一接口

8F11EEC2-CB58-4A27-B9F4-191D1463AEDF.png
5.在target->capabilities中打开Background Modes,并勾选上Location updates
A8AFA04B-48E1-46AB-86B5-529F5BB132A6.png
后台定位是app在进入后台后仍然可以更新用户定位信息,甚至可以通过接口做定位信息的上报,但是在以下情况下更新定位信息的功能就会停止:

1.iOS系统因为资源问题导致APP terminated

2.用户主动去杀进程导致APP terminated

风险:

1.这种定位使用的是GPS定位,定位精度比较准备,相对于的对电池的消耗会比较大,推荐在app进入后台后通过设置属性desiredAccuracy来降低定位精度,

2.苹果对使用了后台定位的app审核比较严格,因为涉及到用户隐私,所以在需要在下面两个地方详细描述后台定位目的,

2.1 app审核资料中app的描述说明

2.2 申请定位权限的文案说明

注意:即使定位目的写的很详细,被拒的可能性还是很大。

demo见:LYLocation

参考文章:

1.iOS系统定位类型与原理

2.iOS CLLocationManager定位

上一篇下一篇

猜你喜欢

热点阅读