iOS10,對於voip 應用的app來了一個強有力的功能,系統級通話界面的支持。 參考之:【Dev Club 分享第十一期】QQ電話適配iOS10 Callkit框架分享 http://dev.qq.com/topic/58009392302e4725036142fcios
上面的分享已經對CallKit的主要流程作了比較詳細的說明,這邊就不重複了。主要說下幾點我在實際過程當中遇到的比較重要的地方。git
1.CXProviderConfiguration 配置項: 若是須要實現相似whatsApp 長按系統聯繫人中的呼叫或視頻 彈出app內撥打該號碼的功能。以下圖所示: github
那你可能須要實現它的屬性supportedHandleTypes 可支持的事件類型,且這個功能只有在這個方法調用到以後,纔會註冊到系統,因此要注意調用這句話的時機!api
typedef NS_ENUM(NSInteger, CXHandleType) { CXHandleTypeGeneric = 1, CXHandleTypePhoneNumber = 2, CXHandleTypeEmailAddress = 3, } API_AVAILABLE(ios(10.0));
2.CXHandle call的事件:它的value 若是是電話號碼,呼入和呼出時,value最好與通信錄中的號碼格式保持一致(有無+區號),簡單的說就是取系統的手機號碼。app
CXHandle *handle = [[CXHandle alloc] initWithType:(CXHandleType)person.personHandle.type value:self.currentPhoneNumber];
maximumCallGroups 不能設置爲0 不然在主動撥打時會報錯errorCode 7 CXErrorCodeRequestTransactionErrorMaximumCallGroupsReached框架
3.利用CXCallObserverDelegate的返回,能夠比較清楚的知道這個call的流程走向。ide
看一下demo中.h的方法 能知道大概的思路和使用了吧:code
/*** 接收方 展現電話呼入等待接收界面 ****/ - (void)showCallInComingWithName:(NSString *)userName andPhoneNumber:(NSString *)phoneNumber isVideoCall:(BOOL)isVideo; /**** 撥打方 呼出電話 ****/ - (void)starCallWithUserActivity:(NSUserActivity *)userActivity; /******* Action **********/ //撥打方 開始鏈接 - (void)startedConnectingOutgoingCall; //撥打方 通話鏈接成功 顯示通話時間 - (void)connectedOutgoingCall; //撥打方 結束通話調用 - (void)endCallAction; //接聽方 結束電話 - (void)finshCallWithReason:(CXCallEndedReason)reason; /****** commom *****/ //禁音通話 - (void)muteCurrentCall:(BOOL)isMute; //保留通話 - (void)heldCurrentCall:(BOOL)onHold; //設置雙音頻功能 - (void)playDTMFCurrentCall:(CXPlayDTMFCallActionType)playType andDigits:(NSString *)digits; //設置羣組通話 - (void)setGroupCurrentCallWithGroupUUID:(NSUUID *)groupUUID;``` 其餘的就很少說了,主要查看系統api方法 由於在開發時沒有找到OC的demo,下面提供本身針對上面流程寫的一個簡單demo //https://github.com/weskhen/CallKitManager 有不正確的地方,但願看到的大神幫忙指點下。