转自出处:http://blog.csdn.net/wzzvictory/article/details/8815590
IOS实现Voip应用后台运行需要的几个配置项
一、一个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内容的时候,只保证超时时间到之前会执行,而不保证准确的执行时间点,系统是会根据当时的任务情况等系统条件确定一个合适的时间点,已达到延长电池寿命的目的。