iOS VoIP电话:CallKit与PushKit的应用

本文详细介绍了iOS10中的CallKit和PushKit如何结合实现VoIP电话功能,包括CallKit的CXProvider、CXCallController、CXProviderConfiguration的使用,以及PushKit的VoIP push配置和问题解决。还探讨了锁屏收不到消息、APP启动时获取VoIP token、兼容老版本、免提键失效等常见问题的解决方案,并分享了审核注意事项和CallKit的通讯录扩展应用。
摘要由CSDN通过智能技术生成

苹果在WWDC2016推出了iOS10系统新功能CallKit,可以调起系统的电话接听页,配合iOS8推出的PushKit使用,形成了一套完整的VoIP解决方案。这篇文章主要记录了实现VoIP时遇到的问题以及对CallKit与PushKit的一些理解。


效果图如下,因为CallKit使用的是系统原生的控件, iOS10与iOS11的样式上有区别(左边两张图是iOS10样式):

640?wx_fmt=png

-

闲鱼调用的逻辑图

640?wx_fmt=png


下面是CallKit和PushKit这两个库的简单介绍:

CallKit主要有:CXProvider、CXCallController、CXProviderConfiguration这三个类,CXProvider提供系统电话界面有关的处理逻辑,CXCallController则是将用户在App界面上的操作通知给系统 ,使用时需要新建一个CallKit管理类并实现CXProviderDelegate协议。 实现步骤如下:

1,设置CXProviderConfiguration

static CXProviderConfiguration* configInternal = nil;	
configInternal = [[CXProviderConfiguration alloc] initWithLocalizedName:@"闲鱼"];	
configInternal.supportsVideo = true;	
configInternal.maximumCallsPerCallGroup = 1;	
configInternal.maximumCallGroups = 1;	
configInternal.supportedHandleTypes = [[NSSet alloc] initWithObjects:[NSNumber numberWithInt:CXHandleTypeGeneric],[NSNumber numberWithInt:CXHandleTypePhoneNumber], nil];	
UIImage* iconMaskImage = [UIImage imageNamed:@"IconMask"];	
configInternal.iconTemplateImageData = UIImagePNGRepresentation(iconMaskImage);

2,初始化CXProvider与CXCallController

self.provider = [[CXProvider alloc] initWithConfiguration: configInternal];	
[provider setDelegate:self queue:dispatch_get_main_queue()];	
self.callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];

3,实现通话流程或按钮的回调方法(每个回调结束的时候要执行[action fulfill];否则会提示通话失败)

- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action;	
- (void)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值