CallKit的使用介绍

作者: OlsonXia | 来源:发表于2016-07-07 19:10 被阅读20889次

CallKit的功能介绍

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


1.jpg

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


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

非锁屏时,有来电


4.jpg
接听后
5.jpg
让你的网络电话有类似iphone自带电话的体验,确实很cool
而且call kit还可以让你的在线电话应用和系统电话,FaceTime音频通话,甚至是其他网络电话相互作用
6.jpg
从系统通讯录,通话记录中打开你的电话应用
7.jpg
通过Siri,蓝牙调起你的电话应用拨打电话。系统的免打扰设置对你的应用也是有效的。这就是CallKit。

CallKit的类和分工

8.jpg

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


9.jpg

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


10.jpg
Provider想要和系统交互,通过CXCallUpdate来传递信息
11.jpg
系统想要Provider知道用户进行那种操作,通过CXAction来传递信息
12.jpg

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


13.jpg

Incoming Call的Demo

先看一下接电话的例子


14.jpg

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


15.jpg
初始化方法中,创建了CXProvider对象,设置了Delegate,如果没有用户授权的话,请求用户授权。
16.jpg

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


17.jpg
下面看下当一个电话打进来的时候,我们应该怎样处理
首先,我们会接到推送通知
18.jpg
如果是voip类型的推送,我们可以解析到UUID(通话的唯一标识),handle(谁打的电话)
调用ProviderDelegate的方法,通知系统显示Incoming Call的全屏UI,
19.jpg
注意CXProvider通知系统来电话了,是通过CXCallUpdate传递的信息。
实际代码效果
20.jpg
当用户点击接听,我们还需要对CXProviderDelegate的代理方法进行处理
21.jpg

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


22.jpg
当接听用户需要挂断电话的时候,同样是处理代理方法
23.jpg
这里还需要强调一点,在call的处理过程中,开发者还需要管理好AudioSession,具体可以参看Demo源码。

Outgoing Call的Demo

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


24.jpg

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


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

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


27.jpg
代码中会执行App拨打电话的逻辑,并且设置connecting和connected的回调block,这样才能保证call的生命周期处理,让CXProvider正确的更新状态。
如果支持通过Siri或者电话通讯录等唤醒你的应用,进行拨打电话的操作,实现AppDelegate的方法。
28.jpg
实际效果如下
29.jpg
30.jpg
连接成功后
31.jpg

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


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

总结

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

相关文章

  • CallKit的使用介绍

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

  • CallKit使用

    打开 “项目->Capabilities”,找到App Groups的数据栏1、创建一个名为ckphone的项目如...

  • Guideline 5.0 - Legal callkit

    意思是用了Callkit 中国商店不给使用解决方案

  • iOS CallKit技术在APP中的应用方案

    CallKit framework()是苹果在2016年推出iOS10系统时...

  • Voip Pushkit Callkit的使用

    1、Responding to VoIP Notifications from PushKit https://d...

  • CallKit中数据共享

    CallKit“来电阻止和身份识别”数据共享 CallKit作为一个扩展应用(Extension target) ...

  • 聊天项目遇到的坑记录

    1.VOIP+CALLKit,voip被调起后,先写callkit代码!!!其它逻辑代码在调试的时候会被系统kil...

  • iOS利用Callkit实现来电提醒

    iOS利用Callkit实现来电提醒 标签(空格分隔): 个人经验 前言 Callkit框架可以让开发者通过它实现...

  • CallKit

    创建一个call项目 Call Directory Extension创建成功后,会发现多了下面几个文件: Cal...

  • callkit

    http://www.jianshu.com/p/2bf4f186dfd9 https://developer.a...

网友评论

  • 心语风尚:callkit可以监听到主叫吗
  • 心语风尚:请教下
  • 0271fb6f797c:你好,我程序推倒后台后,点击系统上方会显示通话中的提示。无法回到应用,而是进入了拨打电话界面,请问这是什么原因造成的呢?
  • 奔向大牛:你好,我现在集成了pushkit和callkit,但是我不知道怎么衔接自己的语音通话进来的哇,要是有时间的话还望指点一下
    3accedc77df3:请问 如何和自己app的音视频通话结合到一起啊 app使用的是环信
    3accedc77df3:@dong136279559 请问 如何和自己app的音视频通话结合到一起啊 app使用的是环信
    0271fb6f797c:朋友,你怎么实现的,我现在也想集成自己的语音视频通话,但是不知道怎么做,请指教下!!!:pray:
  • f6a25fc388db:你好,想请教下,如你文中结尾处所说:
    如果支持通过Siri或者电话通讯录等唤醒你的应用,进行拨打电话的操作,实现AppDelegate的代理方法(OC):
    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

    我在AppDelegate.m中实现了上面这个方法,在通讯录中点击APP的拨号按钮也能调用这个方法并跳转到我的APP,但是在这个方法中,传递的参数却是空的,没有具体的号码信息。
    想请教下,除了实现这个代理方法,还需要做什么操作吗,才能在userActivity中获取到通讯录中的号码信息呢,谢谢!
    天翔软件:ios voip 企业解决方案:QQ:1530591908
    相见是为了再分:请教一个问题: 用不用创建那个target 创建之后怎么用的呢,和demo一样的代码,被呼叫的时候代理方法进入到reset。而demo中不会出现。
    _keepGoingKeepF:@wlm0813 你好,请问下。你是如何将自己APP图标放入原生通讯录UI之中的 能指导下吗?
  • Damon4Zhou:swift版本官网有提供
  • 小小朮:请问demo在哪里下载?急,谢谢!
  • a28c45b770c6:想问一下,有没有Demo或OC版本的呢
  • bcd80ebeef93:同问,demo在哪里
  • 刘大运:demo 地址在哪里呢?
  • e32950f79177:有没有oc写的
    f561b5146a0c:@幸运女神会有烦恼吗 我们项目也是用oc鞋的,不知道oc 版本的什么时候出来,琢磨着参考swift版本的demo,写个oc版本的!
    e32950f79177:@chen_jun6 我还没试过,因为我这个项目是用OC写的,所以想找个OC的框架,swift我还正在学习呢,怕集成上去不靠谱啊
    f561b5146a0c:@幸运女神会有烦恼吗 我也在找oc鞋的啊,目前好像没有,不知道后续会不会出!你有在真机上跑swift版本的demo吗?如果跑起来过的话,请教下啊!
  • e32950f79177:有没有oc版本的
  • f561b5146a0c:楼主,你好,我下载了demo,跑起来是老提示我:Signing for "IntentsExtension" requires a development team. Select a development team in the project editor.但是我都已经配置了的啊,请问是什么原因啊!
    b13357c8b8d2:xcode 8 的general 里面 关闭自动 sign,然后在 setting 里面配置两个target 的 sign。两个都要配置。
    小小朮:@chen_jun6 你好,请问demo在哪里下载的,能否指导一下,谢谢!
    刘大运:@chen_jun6 你好 ,我怎么没有找到demo的地址呢?能告诉下我吗?谢谢
  • 退休老干部:哎 楼主你知道挂断以后点击那个回拨有什么回调吗 卡在这里很久了
  • supersmalltalk:手动点赞

本文标题:CallKit的使用介绍

本文链接:https://www.haomeiwen.com/subject/abuljttx.html