iOS10 CallKit簡單開發

iOS10,對於voip 應用的app來了一個強有力的功能,系統級通話界面的支持。 參考之:【Dev Club 分享第十一期】QQ電話適配iOS10 Callkit框架分享 http://dev.qq.com/topic/58009392302e4725036142fcios

上面的分享已經對CallKit的主要流程作了比較詳細的說明,這邊就不重複了。主要說下幾點我在實際過程當中遇到的比較重要的地方。git

1.CXProviderConfiguration 配置項: 若是須要實現相似whatsApp 長按系統聯繫人中的呼叫或視頻 彈出app內撥打該號碼的功能。以下圖所示: IMG_4118.jpggithub

那你可能須要實現它的屬性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
有不正確的地方,但願看到的大神幫忙指點下。
相關文章
相關標籤/搜索