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
有不正确的地方,但愿看到的大神帮忙指点下。
相关文章
相关标签/搜索