CallKit的使用介紹

CallKit的功能介紹

CallKit可以幫我們的網(wǎng)絡電話提供怎樣更好的體驗?
鎖屏時,有一個來電,現(xiàn)在是這樣的


1.jpg

就是一條普通的推送信息,看起來和iMessage的一條信息沒有什么區(qū)別。
沒有鎖屏時,如下,都是需要點擊后進入應用內再進行操作。


2.jpg

CallKit會帶來怎樣的改變呢,我們可以看下,
鎖屏時,有一個來電
3.jpg

非鎖屏時,有來電


4.jpg

接聽后
5.jpg

讓你的網(wǎng)絡電話有類似iphone自帶電話的體驗,確實很cool
而且call kit還可以讓你的在線電話應用和系統(tǒng)電話,F(xiàn)aceTime音頻通話,甚至是其他網(wǎng)絡電話相互作用
6.jpg

從系統(tǒng)通訊錄,通話記錄中打開你的電話應用
7.jpg

通過Siri,藍牙調起你的電話應用撥打電話。系統(tǒng)的免打擾設置對你的應用也是有效的。這就是CallKit。

CallKit的類和分工

8.jpg

CallKit有兩個主要的類CXProvider和CXCallController
CXProvider可以將一些外來事件通知給系統(tǒng)


9.jpg

CXCallController可以讓系統(tǒng)收到App的一些Request,用戶的action,內部的事件。還可以完成上面說的與其他的電話應用進行交互的操作。


10.jpg

Provider想要和系統(tǒng)交互,通過CXCallUpdate來傳遞信息
11.jpg

系統(tǒng)想要Provider知道用戶進行那種操作,通過CXAction來傳遞信息
12.jpg

controller想要系統(tǒng)知道用戶進行了什么操作,通過CXTransaction承載信息


13.jpg

Incoming Call的Demo

先看一下接電話的例子


14.jpg

Demo中有兩個比較關鍵的類SpeakerboxCallManager和SpeakerboxCall
SpeakerboxCallManager是通話的管理類,可以完成撥打電話,掛斷電話等功能。
SpeakerboxCall是通話的Model類,保存通話的一些信息。
我們新創(chuàng)建一個ProviderDelegate,它實現(xiàn)了CXProviderDelegate。


15.jpg

初始化方法中,創(chuàng)建了CXProvider對象,設置了Delegate,如果沒有用戶授權的話,請求用戶授權。
16.jpg

可以看到初始化CXProvider對象時還會進行一些配置,包括通話中UI上顯示的應用的名字,是否支持視頻,應用的icon。代碼中配置每組中最多有一個通話,也就是不會出現(xiàn)同時接聽兩個以上通話的情況。


17.jpg

下面看下當一個電話打進來的時候,我們應該怎樣處理
首先,我們會接到推送通知
18.jpg

如果是voip類型的推送,我們可以解析到UUID(通話的唯一標識),handle(誰打的電話)
調用ProviderDelegate的方法,通知系統(tǒng)顯示Incoming Call的全屏UI,
19.jpg

注意CXProvider通知系統(tǒng)來電話了,是通過CXCallUpdate傳遞的信息。
實際代碼效果
20.jpg

當用戶點擊接聽,我們還需要對CXProviderDelegate的代理方法進行處理
21.jpg

可以看到系統(tǒng)反饋的用戶操作是CXAnswerCallAction,它是CXAction的一種。
CXAction有兩種狀態(tài),出錯調用fail(),成功調用fulfill()。這個操作是必須的,系統(tǒng)才能正確處理UI的顯示和進行通話狀態(tài)的控制。


22.jpg

當接聽用戶需要掛斷電話的時候,同樣是處理代理方法
23.jpg

這里還需要強調一點,在call的處理過程中,開發(fā)者還需要管理好AudioSession,具體可以參看Demo源碼。

Outgoing Call的Demo

撥打電話的處理起來會稍微復雜一點,先看下生命周期示意圖


24.jpg

我們看下SpeakerboxCallManager中撥打電話的實現(xiàn)


25.jpg

26.jpg

撥打電話的時候我們會生成一個CXTransaction,它包含一組CXAction,Demo中是CXStartCallAction。

調用CXCallController對象的request方法,請求Start Call。
當系統(tǒng)接受request,進入start call狀態(tài)后,會通過CXProviderDelegate的代理方法通知App,也就是Demo中的ProviderDelegate。


27.jpg

代碼中會執(zhí)行App撥打電話的邏輯,并且設置connecting和connected的回調block,這樣才能保證call的生命周期處理,讓CXProvider正確的更新狀態(tài)。
如果支持通過Siri或者電話通訊錄等喚醒你的應用,進行撥打電話的操作,實現(xiàn)AppDelegate的方法。
28.jpg

實際效果如下
29.jpg

30.jpg

連接成功后
31.jpg

我們回到桌面,應用進入后臺


32.jpg

可以看到系統(tǒng)上方會顯示通話中的提示。點擊后可以回到應用。

總結

CallKit到目前為止只提供了講解視頻,沒提供編程指南,更多更復雜的功能可能需要等待具體的文檔來了解了,比如同時有多個通話處理等。

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

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,035評論 4 61
  • 1、招20名總代企業(yè)家。 2、送給父母一輛30萬的車。 3、存款1000萬。 4、買一套別墅。 完成了以上目標請團...
    迪爺是微商閱讀 248評論 0 0
  • 一年一度,斗轉星移, 不變的是新生初來乍到的不適; 一屆一屆,薪火相傳, 永恒的是新生乍寒還暖的感動! 天氣很好,...
    楊文倩閱讀 720評論 0 1
  • 我就這樣看著你這樣摸不著你碰不著你地看著你,當時間與空間兩皆虛無我依然不悔地凝視著你,在距你最近也是最遠的地方。
    沉迷止丶惆悵歲月稀世閱讀 744評論 0 0

友情鏈接更多精彩內容