美文网首页
iOS 后台提交定位信息

iOS 后台提交定位信息

作者: ThinkerH | 来源:发表于2017-03-01 22:09 被阅读284次

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


    最近公司业务需要,针对一款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,如果没必要,苹果会拒绝,所以想使用这一方式实现除定位外的别的目的不是很容易。

    相关文章

      网友评论

          本文标题:iOS 后台提交定位信息

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