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 有不正确的地方,但愿看到的大神帮忙指点下。