CallKit的使用介绍

CallKit的功能介绍

CallKit可以帮我们的网络电话提供怎样更好的体验?
锁屏时,有一个来电,现在是这样的


CallKit的使用介绍_第1张图片
1.jpg

就是一条普通的推送信息,看起来和iMessage的一条信息没有什么区别。
没有锁屏时,如下,都是需要点击后进入应用内再进行操作。


CallKit的使用介绍_第2张图片
2.jpg

CallKit会带来怎样的改变呢,我们可以看下,
锁屏时,有一个来电
3.jpg

非锁屏时,有来电


4.jpg

接听后
CallKit的使用介绍_第3张图片
5.jpg

让你的网络电话有类似iphone自带电话的体验,确实很cool
而且call kit还可以让你的在线电话应用和系统电话,FaceTime音频通话,甚至是其他网络电话相互作用
CallKit的使用介绍_第4张图片
6.jpg

从系统通讯录,通话记录中打开你的电话应用
CallKit的使用介绍_第5张图片
7.jpg

通过Siri,蓝牙调起你的电话应用拨打电话。系统的免打扰设置对你的应用也是有效的。这就是CallKit。

CallKit的类和分工

CallKit的使用介绍_第6张图片
8.jpg

CallKit有两个主要的类CXProvider和CXCallController
CXProvider可以将一些外来事件通知给系统


CallKit的使用介绍_第7张图片
9.jpg

CXCallController可以让系统收到App的一些Request,用户的action,内部的事件。还可以完成上面说的与其他的电话应用进行交互的操作。


CallKit的使用介绍_第8张图片
10.jpg

Provider想要和系统交互,通过CXCallUpdate来传递信息
CallKit的使用介绍_第9张图片
11.jpg

系统想要Provider知道用户进行那种操作,通过CXAction来传递信息
CallKit的使用介绍_第10张图片
12.jpg

controller想要系统知道用户进行了什么操作,通过CXTransaction承载信息


CallKit的使用介绍_第11张图片
13.jpg

Incoming Call的Demo

先看一下接电话的例子


14.jpg

Demo中有两个比较关键的类SpeakerboxCallManager和SpeakerboxCall
SpeakerboxCallManager是通话的管理类,可以完成拨打电话,挂断电话等功能。
SpeakerboxCall是通话的Model类,保存通话的一些信息。
我们新创建一个ProviderDelegate,它实现了CXProviderDelegate。


CallKit的使用介绍_第12张图片
15.jpg

初始化方法中,创建了CXProvider对象,设置了Delegate,如果没有用户授权的话,请求用户授权。
CallKit的使用介绍_第13张图片
16.jpg

可以看到初始化CXProvider对象时还会进行一些配置,包括通话中UI上显示的应用的名字,是否支持视频,应用的icon。代码中配置每组中最多有一个通话,也就是不会出现同时接听两个以上通话的情况。


CallKit的使用介绍_第14张图片
17.jpg

下面看下当一个电话打进来的时候,我们应该怎样处理
首先,我们会接到推送通知
CallKit的使用介绍_第15张图片
18.jpg

如果是voip类型的推送,我们可以解析到UUID(通话的唯一标识),handle(谁打的电话)
调用ProviderDelegate的方法,通知系统显示Incoming Call的全屏UI,
CallKit的使用介绍_第16张图片
19.jpg

注意CXProvider通知系统来电话了,是通过CXCallUpdate传递的信息。
实际代码效果
20.jpg

当用户点击接听,我们还需要对CXProviderDelegate的代理方法进行处理
CallKit的使用介绍_第17张图片
21.jpg

可以看到系统反馈的用户操作是CXAnswerCallAction,它是CXAction的一种。
CXAction有两种状态,出错调用fail(),成功调用fulfill()。这个操作是必须的,系统才能正确处理UI的显示和进行通话状态的控制。


CallKit的使用介绍_第18张图片
22.jpg

当接听用户需要挂断电话的时候,同样是处理代理方法
CallKit的使用介绍_第19张图片
23.jpg

这里还需要强调一点,在call的处理过程中,开发者还需要管理好AudioSession,具体可以参看Demo源码。

Outgoing Call的Demo

拨打电话的处理起来会稍微复杂一点,先看下生命周期示意图


CallKit的使用介绍_第20张图片
24.jpg

我们看下SpeakerboxCallManager中拨打电话的实现


CallKit的使用介绍_第21张图片
25.jpg

CallKit的使用介绍_第22张图片
26.jpg

拨打电话的时候我们会生成一个CXTransaction,它包含一组CXAction,Demo中是CXStartCallAction。

调用CXCallController对象的request方法,请求Start Call。
当系统接受request,进入start call状态后,会通过CXProviderDelegate的代理方法通知App,也就是Demo中的ProviderDelegate。


CallKit的使用介绍_第23张图片
27.jpg

代码中会执行App拨打电话的逻辑,并且设置connecting和connected的回调block,这样才能保证call的生命周期处理,让CXProvider正确的更新状态。
如果支持通过Siri或者电话通讯录等唤醒你的应用,进行拨打电话的操作,实现AppDelegate的方法。
CallKit的使用介绍_第24张图片
28.jpg

实际效果如下
CallKit的使用介绍_第25张图片
29.jpg

CallKit的使用介绍_第26张图片
30.jpg

连接成功后
CallKit的使用介绍_第27张图片
31.jpg

我们回到桌面,应用进入后台


32.jpg

可以看到系统上方会显示通话中的提示。点击后可以回到应用。

总结

CallKit到目前为止只提供了讲解视频,没提供编程指南,更多更复杂的功能可能需要等待具体的文档来了解了,比如同时有多个通话处理等。

你可能感兴趣的:(CallKit的使用介绍)