iOS 后台提交定位信息

2017-03-01  本文已影响284人  ThinkerH

转载请注明出处:hualei的博客www.hualeihl.com


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

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

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

这里我用到了第二种,即 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,如果没必要,苹果会拒绝,所以想使用这一方式实现除定位外的别的目的不是很容易。

上一篇 下一篇

猜你喜欢

热点阅读