iOS 后台定位

作者: LoveY34 | 来源:发表于2018-07-14 18:23 被阅读3次

    后台定位实现步骤:(涉及类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定位

    相关文章

      网友评论

      • 顺情风:if (@available(iOS 11.0, *))
        {
        self.locationManger.showsBackgroundLocationIndicator = YES;
        }
        YES改为NO还好用吗?我项目需要几十天几十天的运行。你这个方法有这样测试过吗?
        顺情风:@LoveY34 谢谢
        LoveY34:这个属性只针对iOS11系统及以上的,旧系统是不可用的,我测试的时候最长测了四五个小时,是没有问题的,但是几十天我就没试过了。。

      本文标题:iOS 后台定位

      本文链接:https://www.haomeiwen.com/subject/gceypftx.html