IOS實現Voip應用後臺運行需要的幾個配置項

 

IOS實現Voip應用後臺運行需要的幾個配置項

作者:wangzz
轉載請註明出處
如果覺得文章對你有所幫助,請通過留言或關注微信公衆帳號wangzzstrive來支持我,謝謝!

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

            


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章