iOS10 Callkit框架整合总结

本文详细介绍了iOS10中CallKit框架的整合过程,包括嵌入后效果、核心类CXProvider和CXCallController的解析,以及被叫、主叫流程的详细步骤。CallKit提升了voip应用体验,使得应用的通话功能达到系统级别。文中还探讨了挂断处理的多种情况,以及如何实现与通讯录的对接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前不久苹果推出的callkit framework简直就是voip类应用的福音啊,一下把应用的体验提升到了系统级别的高度,加上之前推出的pushkit,形成了一套完整的voip解决方案。正好我们的产品就是一个类voip应用,当然要把callkit加进去,不过callkit刚刚推出,网上的资料实在是少,甚至连官方的api文档里都是大片空白,下面记录一下我对整合callkit的一些总结与理解,也算丰富一下网上的相关资料吧。

一、嵌入后效果

首先,先对Callkit框架嵌入后的实际使用效果有个直观的概念,可以使用手机qq中的qq电话功能(qq已经做了Callkit的框架嵌入)。拨叫、被叫的等业务自己尝试几次,可以发现:

呼出时:直接在qq应用内触发,没有系统电话界面的显示,整个通话过程中的操作都是在qq应用内部完成的,但是通话结束后,系统通话记录中会出现此次对应的通话记录。

被叫时:会显示出系统的电话接听界面,整个通话过程中的操作都可以借助系统通话界面完成,双击home键,可以看到qq应用被启动了,并跳转到了接听界面,用户可以随意切换,通话过程中操作既可以使用系统界面完成,也可以使用qq应用内接听界面完成,最后通话结束后,系统通话记录中会多出此次对应的通话记录。

二、核心类

callkit框架主要围绕的就是CXProvider以及CXCallController两个核心类

关于CXProvider、CXCallController,有文章里是这么描述的:

CXProvider类主要负责 系统->程序方向 的信息、状态传递

CXCallController类主要负责 程序->系统方向的 信息、状态传递

这种描述并没有错误,但是却会让我在有些地方产生困惑,下文我会提到我的困惑,并尝试给出我的理解

三、流程示例

注:不同app的具体实现肯定是各不相同,但会话建立的整体流程应该都是大同小异的,下文的示例是依据我们app的实现写的,看的时候,不要太过纠结于细节或个别环节的差异,应该从整体流程上去体会callkit框架嵌入后带来的变化,最后再结合自己app的实际情况,去做自己的嵌入实现

1.被叫流程

未加入callkit前:

服务器通知app有来电->app显示接听界面->选择接听,进入app通话界面,应答服务器,建立话音通道->通话->挂断电话或被对方挂断 

加入callkit框架后:

服务器通知app有来电->调用CXProvider的reportNewIncomingCallWithUUID方法告知系统有来电,系统显示出系统接听界面->选择接听,系统回调performAnswerCallAction,进入app通话界面->系统通知 audiosession可用didActivateAudioSession->应答服务器,建立话音通道->通话->挂断电话或被对方挂断 

主要区别:

1.未加入callkit前,接听界面是app提供的,整个流程都掌控在app内部;加入后,首先要调用reportNewIncomingCallWithUUID通知系统有来电,让系统显示出系统接听界面。
2.加入callkit后,用户在系统接听界面选择接听后,不能立即建立话音通道,需要等待didActivateAudioSession的回调

被叫流程代码示例

(1)app调用reportNewIncomingCallWithUUID告知系统有来电,系统显示出系统接听界面 

    CXCallUpdate *callUpdate = [[CXCallUpdate alloc] init];
    CXHandle *handle = [[CXHandle alloc] initWithType:CXHandleTypePhoneNumber value:callInfo.phoneNum];
    callUpdate.remoteHandle = handle;
    callUpdate.loca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值