IOS实现Voip应用后台运行需要的几个配置项

voip类的app允许用户使用Internet网络而不是手机的蜂窝网络打电话,因此这一类的app需要保持同它相关的服务的网络连接,用以厚道来电消息和其他数据。IOS系统不是通过一直让app处于激活状态来达到这个目的,而是同样也会将这类的app挂起,但同时会在app被挂起期间接管它的sockets,当这个sockets有数据通信时,系统会再次唤醒处于挂起状态的app,同时将sockets的控制权交还给app,以让其正常的处理来去电事件和其他数据。

一、一个voip应用需要有下面几个要求:

1、在Info.plist中增加UIBackgroundModes键,并将值设为voip;

2、为该app配置sockets,并注册到系统上,以便app切到后台时系统会接管这个sockets;

3、在app切到后台之前,要调用setKeepAliveTimeout:handler:方法来注册一个周期性执行的handler,用于保持app和服务器的连接;

4、配置一个音频会话(audio session)。

二、UIBackgroundModes键的voip值有三个功能:

1、告知系统在app切到后台的时候接管它的sockets;

2、这个键值的另外一个功能是允许app在后台播放音频,跟UIBackgroundModes的audio值起到的作用相同。

3、后台状态的app在系统确定voip服务可用的时候会立即重新加载(relaunched)

三、配置keep-alive handler

一个voip类的app需要周期性的被唤醒以防止失去跟服务器的连接。为了达到这个目的,IOS系统允许我们通过setKeepAliveTimeout:handler:方法来实现保持连接。通常我们都在软件切到后台以后,也就是在applicationDidEnterBackground:才需要实现保持连接的方法。Handler配置完后,系统会根据需要在time out设置的时间到期之前唤醒处于挂起状态的app,至少被调用一次handler中的方法。

1、 handler

需要说明的是,这个handler在后台执行的时候需要尽可能快的返回,因为系统只给了最多10s的时间去执行它。如果10s内没有执行完,而且没有去申请额外的执行时间,系统将会吧app挂起。

2、timeout

设置handler时,需要指定app需要的最大超时时间。IOS系统允许的最小值是600s,如果想设置个小点的值,handler的设置就会失败。系统在执行handler内容的时候,只保证超时时间到之前会执行,而不保证准确的执行时间点,系统是会根据当时的任务情况等系统条件确定一个合适的时间点,已达到延长电池寿命的目的。

      

你可能感兴趣的:(不断更新总结点,ios开发,audio,sockets,voip)