• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 文章精選 >
     首頁(yè) > 新聞 > 文章精選 >

    PushKit和CallKit實(shí)現——基于實(shí)時(shí)語(yǔ)音通話(huà)

    2018-01-11 16:43:46   作者:   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      蘋(píng)果在2016年的WWDC大會(huì )上推出了iOS10,提供了一系列更加開(kāi)放的新特性,其中CallKit對實(shí)時(shí)語(yǔ)音通話(huà)業(yè)務(wù)最實(shí)用,這個(gè)框架能夠讓第三方應用獲得系統電話(huà)的權限以及體驗。容聯(lián)快聊基于PushKit和CallKit提供給用戶(hù)更好的體驗:




      小伙伴,接下來(lái)跟著(zhù)我一起開(kāi)始實(shí)時(shí)通話(huà)集成吧
      一、PushKit介紹
      PushKit從iOS 8版本開(kāi)始支持,具體實(shí)現如下:
    1. app需要開(kāi)啟推送,且后臺模式勾選Voice over IP;
    2. 創(chuàng )建PushKit推送證書(shū),證書(shū)創(chuàng )建類(lèi)型選擇VoIP Services Certificate,具體生成過(guò)程不再贅述與普通推送證書(shū)過(guò)程一樣;
    3. 引用PushKit.framework庫;
    4. 注冊PushKit推送通知,代碼如下:
    代理函數的實(shí)現:
      PushKit與原來(lái)遠程推送的區別:
      原來(lái)遠程推送是由服務(wù)器發(fā)出消息之后,iPhone設備收到消息,由iOS 系統彈出通知窗口。
      PushKit是由服務(wù)器發(fā)出消息之后,iPhone設備收到消息后,會(huì )在后臺啟動(dòng)app(在設備上看不到,即使雙擊Home也看不到),消息會(huì )送達到回調函數里,由應用決定怎么處理該消息,如彈出本地通知或做一些其他操作;后臺時(shí)間有限,不能做過(guò)于耗時(shí)操作。
      PushKit和原來(lái)遠程推送是共存的,所以在系統里需要兩個(gè)證書(shū),也會(huì )有對應的push token生成;呼叫模塊會(huì )根據PushKit證書(shū)和對應的push token同時(shí)存在推送PushKit推送,否則還走原來(lái)的遠程推送邏輯。
      二、CallKit介紹:
      CallKit是從iOS 10開(kāi)始支持,需要引用CallKit.framework庫。
      優(yōu)點(diǎn):
    1. 提高網(wǎng)絡(luò )通話(huà)的音頻權限:避免在通話(huà)過(guò)程中被傳統電話(huà)無(wú)腦打斷,更順暢!
    2. 可以使用系統電話(huà)的UI界面:實(shí)時(shí)語(yǔ)音通話(huà)真正地變成了“電話(huà)”!
      簡(jiǎn)單介紹:
      首先得介紹一下CallKit的框架。他分為三大模塊:通話(huà)管理,CallCenter和來(lái)電屏蔽,要實(shí)現上述功能我們只需要關(guān)注通話(huà)管理模塊。通話(huà)管理模塊里主要有兩個(gè)類(lèi):CXProvider和CXCallController。
      CXProvider可以理解為處理系統電話(huà)界面有關(guān)的邏輯,比如來(lái)電呼起系統電話(huà)界面或者將用戶(hù)在系統電話(huà)界面上的操作通知給App。 CXCallController則是將用戶(hù)在A(yíng)pp界面上的操作通知給系統。
      CallKit來(lái)電場(chǎng)景的介紹:
      網(wǎng)絡(luò )通話(huà)適配CallKit主要包含三個(gè)流程:收到來(lái)電主動(dòng)通知CallKit、用戶(hù)在CallKit界面點(diǎn)擊接聽(tīng)、用戶(hù)在A(yíng)pp界面點(diǎn)擊掛斷。下面將通過(guò)三個(gè)流程來(lái)介紹CXProvider、CXCallController的使用。
      App收到來(lái)電
      收到SDK的onIncomingCallReceived回調消息時(shí),其他邏輯不變只需要調用CXProvider的reportNewIncomingCall就可以展示系統電話(huà)界面。
      用戶(hù)在CallKit界面點(diǎn)擊接聽(tīng),該流程可用于用戶(hù)對Callkit的所有操作回調:
      用戶(hù)點(diǎn)擊接聽(tīng)后,我們會(huì )受到CXAnswerCallAction的回調,在這里面添加acceptCall接聽(tīng)來(lái)電,再調用fulfill,整個(gè)流程就完成了。在前面判斷如果callid不存在字典中顯示失敗。
      用戶(hù)在A(yíng)pp中掛斷電話(huà)
      這時(shí)候我們需要添加一個(gè)CXEndCallAction到CXTransaction并調用requestTransaction請求執行:
      之后的流程與CallKit界面點(diǎn)擊接聽(tīng)類(lèi)似,收到CXEndCallAction回調,執行掛機邏輯,調用fulfill完成流程。所有用戶(hù)在app內的操作都以這種方式通知CallKit:
      上面簡(jiǎn)單介紹來(lái)電的場(chǎng)景,希望大家舉一反三,在A(yíng)pp中補充其他的電話(huà)流程。
      三、系統適配問(wèn)題:
      根據上面所講內容,iOS 8和iOS 9是支持PushKit但不支持CallKit,如果這個(gè)時(shí)候收到PushKit的通知就需要應用來(lái)做本地推送,這樣會(huì )造成工作量的增加;所以在注冊PushKit的時(shí)候,判斷當前系統是否支持CallKit,支持CallKit再注冊PushKit推送,這樣服務(wù)器會(huì )判斷當前沒(méi)有PushKit的token會(huì )走原來(lái)的推送;當然如果PushKit有其他用途的就另當別論了。
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 连云港市| 沾益县| 偏关县| 门头沟区| 鄂州市| 高尔夫| 鲁山县| 攀枝花市| 额敏县| 前郭尔| 台东市| 墨竹工卡县| 新河县| 中阳县| 塔城市| 公安县| 高邮市| 台湾省| 新昌县| 宣化县| 河池市| 河间市| 阜宁县| 始兴县| 延安市| 托克托县| 马鞍山市| 绥德县| 收藏| 呼伦贝尔市| 济南市| 简阳市| 丹棱县| 观塘区| 林周县| 神木县| 丰顺县| 沂源县| 临漳县| 融水| 比如县| http://444 http://444 http://444 http://444 http://444 http://444