iOS VOIP

1、IOS允許App的一個Socket在App切換到后臺后仍然保持連接. 這樣,當(dāng)有通話請求的時候,App能及時處理. 這個socket需要在應(yīng)用第一次啟動的時候創(chuàng)建, 并標(biāo)記為"此socket用于VoIP服務(wù)". 這樣當(dāng)App切換到后臺的時候,IOS會接管這個標(biāo)記為"用于VoIP服務(wù)"的socket. 這個socket的響應(yīng)函數(shù)(比如,一個delegate,或者是個block)會正常的響應(yīng), 就像App還在前臺一樣.

2、10s魔咒. 當(dāng)socket有任何數(shù)據(jù)從服務(wù)端傳來, 你在app里為socket寫的響應(yīng)函數(shù)都會做處理.但是, 你只有最多10s的時間來干你想干的事情. 也就意味著你在響應(yīng)函數(shù)里新建一個大于10s的timer是沒有意義的. 并且IOS并不保證給你足夠10s的時間,視系統(tǒng)情況而定.

3、在socket的響應(yīng)函數(shù)里, 你能通過NSLocalNotification來通知用戶"電話來了". 除此之外, 你沒法做其他任何視覺上的動作來提醒用戶, 因?yàn)槟愕腶pp還處于某個不知道的次元, 甚至連window都還沒創(chuàng)建.

4、你永遠(yuǎn)也沒有辦法知道或者決定NSLocalNotification的樣式是banner還是alert. 你也許鐘愛后者, 但是決定權(quán)在用戶手里.

5、允許在后臺定期執(zhí)行一段代碼. 你可以設(shè)定一個大于等于10分鐘的時間t, 和一個定期執(zhí)行的handler, IOS系統(tǒng)會在每次經(jīng)過t時間的時候調(diào)用一次這個handler. 但是IOS不保證這個handler會準(zhǔn)時運(yùn)行, 只保證在時間t范圍內(nèi)的某個點(diǎn)會執(zhí)行一次.

6、我們通常用樓上的handler處理socket的斷線重連操作. 因?yàn)榫W(wǎng)絡(luò)不穩(wěn)定, 或者用戶開啟飛行模式等原因, 我們用于voip服務(wù)的socket會斷開連接. 在這個handler里,如果發(fā)現(xiàn)連接斷開,我們只需要跟條目1一樣的創(chuàng)建socket,設(shè)置一樣的socket響應(yīng)函數(shù),一切又會恢復(fù)正常.

7、不建議這個handler做太多事情, 因?yàn)樗灿?0s魔咒.(據(jù)不完全統(tǒng)計,蘋果所有的后臺處理都有這個10s限制. 不保證絕對正確哈, 僅供參考)

8、自啟服務(wù). 當(dāng)IOS重新啟動, 或者你的app因?yàn)槠渌蛲顺鰰r, IOS會馬上啟動你注冊為voip的app, 你可以很迅速的恢復(fù)socket連接. 但是, 從底部多任務(wù)欄中手動關(guān)閉應(yīng)用除外.更"code"的說明是:當(dāng)程序退出的exitcode != 0,IOS會重啟你的app.經(jīng)試驗(yàn)發(fā)現(xiàn),從底部多任務(wù)欄關(guān)閉的時候,程序的exitcode == 0.

9、如果你親愛的用戶是一個典型的"app終結(jié)者",那么你還剩最后一條路來通知來電提醒:NSRemoteNotification. 你也許會被NSRemoteNotification的可靠性和實(shí)時性折騰的抓狂, 但是, 誰讓你選了IOS? 你享受了封閉帶來的傳世體驗(yàn), 也得承受封閉的限制.

10、當(dāng)條目8描述的情況發(fā)生之后,app的application:didFinishLaunchingWithOptions:會被調(diào)用. 但是,請時刻提醒自己我們的app仍然處于后臺. 我們以前總在這里創(chuàng)建window創(chuàng)建rootController, 但現(xiàn)在不必了. 現(xiàn)在我們需要的就是把可愛的socket連上, 像在條目1里一樣,讓一切回歸正常(我不去寫歌詞真浪費(fèi)了_).

11、在application:didFinishLaunchingWithOptions:里你能通過[application applicationState] == UIApplicationStateBackground來判斷是正常啟動應(yīng)用還是系統(tǒng)自動啟動, 然后決定該創(chuàng)建window還是創(chuàng)建voip的socket.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容