iOS 后台提交定位信息


最近公司业务需要,针对一款iOS软件,要求程序进入后台依然可以持续提交定位信息,所以研究了一下。

我们知道,iOS程序进入后台后正常进程只能保持3分钟,3分钟后就会被挂起,所以要想实现后台持续定位,就要防止进程被挂。

查阅苹果官方关于后台的文档发现,有3类APP具有后台运行不会被挂起,种类如下:

  • Audio
  • Location/GPS
  • VoIP

这里我用到了第二种,即 Location/GPS

具体实现步骤

1 . 首先info.plist文件里面配置如下:

info.plist文件里面配置
info.plist文件里面配置

2 . 在工程的TARGETS中的capabilities里设置Background Modes如下:

capabilities设置

3 . 然后创建一个继承自CLLocationManager的单例,创建单例对象,并注意要设置其两个熟悉值如下,如果不设置则无法实现后台持续定位

    if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locationManager requestAlwaysAuthorization];
    }

    if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
        _locationManager.allowsBackgroundLocationUpdates = YES;
    }

之后,再设置CLLocationManager实例的代理以及实现代理方法,运行程序并让程序进入后台运行,会发现程序一直在按设置的条件定位并回调代理方法而不会被挂起。


在查阅官方文档时,还看到一段话,截取如下

官方文档截取

其中红框部分翻译过来就是:

当程序不在运行时,如果此时发生了一个监听范围的越界事件,系统会在后台自动唤醒应用(或重启动),以处理该事件。这种情况下,launchOptions字典会传递给application:didFinishLaunchingWithOptions:方法,其中会包含UIApplicationLaunchOptionsLocationKey键,用以标记APP因为一个位置相关的事件而启动。在这个重新启动的过程中,你必须重新创建位置管理器(location manager对象),并指定代理以处理该位置事件。

这里我们可以看到,即使APP不在运行,我们也可以通过设置位置范围监听(CLRegion)来实现唤醒APP并处理相关位置事件。

不过这里要强调的是,APP中使用这些API在提交APP Store时苹果会进行相关审核,看应用是否有必要使用这些API,如果没必要,苹果会拒绝,所以想使用这一方式实现除定位外的别的目的不是很容易。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,898评论 25 709
  • 自从古老的iOS4以来,当用户点击home建的时候,你可以使你的APP们在内存中处于suspended(挂起)状态...
    木易林1阅读 3,228评论 1 4
  • 文档app在后台时会被暂停,暂停的apps会提高电池的使用寿命,并且会让系统将重要的系统资源投入到引起用户注意的前...
    zziazm阅读 4,757评论 0 5
  • input设置color样式只能修改输入文字的颜色,不能修改placeholder的颜色。要修改placehold...
    demo11阅读 1,215评论 0 0