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內容的時候,只保證超時時間到之前會執行,而不保證準確的執行時間點,系統是會根據當時的任務情況等系統條件確定一個合適的時間點,已達到延長電池壽命的目的。