应用出海,如何使用苹果 CallKit 提升网络通话体验
【关注 融云全球互联网通信云】2016 年,苹果 iOS10 发布了 CallKit 框架,使第三方 VoIP 类型语音通话类 APP,可以拥有与手机系统一样的来电体验——直接显示在锁屏界面,并且通话过程中,APP 的音视频权限和运营商电话一样,不会被其他应用打断。如何实现?
2018 年,苹果 APP 审核中心通过邮件告知开发者:在中国大陆地区上架的 APP 不可使用 Callkit。
并且,从 iOS13 开始,基于安全角度考虑,苹果要求在使用 VoIP 推送时必须配合 CallKit 框架使用,否则 iOS 系统将在收到 VoIP 推送后杀掉 APP 进程,就像没有收到 VoIP 推送一样。
苹果 CallKit 框架无法在国内上架使用,我们也就无法在国内使用 VoIP 推送功能在手机后台唤醒息屏了的 APP。
但是,对于在没有上架限制地区投放的应用,苹果 CallKit 依然是提升用户使用体验的重要手段。
当下,出海浪潮浩浩荡荡,融云作为布局全球的通信云服务商,为全球开发者提供安全、可靠的互联网通信云服务。上架海外应用商店的 APP,在使用融云 SDK 获得稳定通信能力后集成苹果 CallKit,可以大幅提高用户体验和使用便捷性。
本文分享通过苹果 CallKit 框架实现来电、接听、挂断、呼叫等通话场景的流程。
苹果 CallKit 效果
在 iPhone 锁屏状态下 APP 来电时,通过苹果 CallKit 可以像 iOS 原生电话来电一样展现全屏的来电及接听界面,VoIP APP 与系统 Call 有着相同的通话优先级别,而且在通讯录中的拔号记录、Siri 唤起、勿扰模式等都可以得到很好的支持。
(苹果 CallKit 框架下的 APP 来电界面)
(苹果 CallKit 框架下的 APP 接听界面)
下图简略描述了原生 APP、第三方 APP 在 CallKit 框架下的关系。CallKit 在系统中提供了一种独有的服务,在需要的时刻,原生或者第三方 APP 通过 CallKit 提供的 API 向系统请求诸如来电、拔出等展现服务,由 Call Service 统一安排调度这些请求以达成统一的交互响应。
(原生和第三方 APP 在 CallKit 框架下的关系)
如何使用苹果 CallKit
苹果 CallKit 提供了统一的语音通话 UI 及与该 UI 交互的 API,但实际的通话链路监听、搭建和管理还需要沿用 APP 原有的实现思路。下面,我们分享来电、拔出等场景下 APP 与 CallKit 的交互流程。
Prepare
① 创建 CXProvider,指定 CallKit 展现 UI 中的 APP 名称和图标、通话数量、来电铃声等 Configuration
② 实现 CXProviderDelegate 协议,以接收来自 Call Service 发来的更新状态,例如用户点击了接听或者挂断等动作,决定网络链路的处理动作;还有 AudioSession 的激活状态,决定 Audio 播放录制的启动关闭时机
③ 创建 CXCallController,使 APP 可以发送更新状态给 Call Service,例如用户拔出电话或者对方挂断电话等状态
④ 如果需锁屏界面及 APP 未启动状态下显示来电界面,要搭建 PushKit 通路,与 APNS 差不多,只是 APP 端处理方式有些不同。
(准备工作)
Incoming Call
① APP 前台时收到来自网络 Server 端的连接请求,或者 APP 后台时收到来自网络 Push Server 的 PushEvent
② APP 收到连接请求或者 Push 消息后,创建 CXCallUpdate 对象,指定此次来电的号码等属性
③ 将上面创建的 CXCallUpdate 对象通过 CXProvider 的 reportNewIncomingCall WithUUID 方法报告给 iOS 系统
④ Call Service 收到新的来电请求后根据当前的状态,展现原生来电 UI
(来电场景实现流程)
Answer Call
① 用户点击来电界面上的接听按钮
② Call Service 通过 CXProvider 的 Delegate 协议 performAnswerCallAction 方法告知 APP
③ APP 将接听命令通过网络传给对端,开始实际音频数据传输,进行通话
(接听场景实现流程)
End Call
① 用户点击 APP UI 中的挂断按钮
② 创建 CXEndCallAction 对象,指定此次通话的 UUID 属性
③ 创建 CXTransaction,将 Action 指定给它
④ 通过 CXCallController,调用 request Transaction 将这个挂断事件通知给 Call Service
⑤ Call Service 通过当前通话状态,通过 CXProvider 将挂断动作通知回给 APP
⑥ 在 CXProviderDelegate 中的 performEnd CallAction 中结束此次通话的网络链路,停止音频录制播放 Loop
(挂断场景实现流程)
Outgoing Call
① 用户通过 APP UI、通话录、Siri 发起一个拔出请求
② 创建 CXHandle 指定拨出的电话号码,创建 CXStartCallAction 并将 CXHandle 指定给它
③ 创建 CXTransaction,将刚刚的 Action 指定给它
④ 通过 CXCallController 调用 request Transaction,将这个拔出事件通知给 Call Service
⑤ Call Service 收到新的拨出请求后根据当前的状态,通过 CXProvider 将拨出动作通知回 APP
⑥ 在 CXProviderDelegate 中的 perform StartCallAction 中开启此次呼叫的网络链路,通过 CXProvider 的 reportOutgoing CallWithUUID 设置呼叫与接通时间,根据链路建立的结果来展现原生呼叫 UI 的状态(呼叫成功或者失败)
(拨出场景实现流程)
苹果 CallKit 开发框架,赋予语音或视频通话应用的开发者诸多便利——
允许开发者将 UI 界面整合在 iPhone 原生的电话 APP 中;
允许开发者将通讯 APP 的功能内建在电话 APP 的“常用联络资讯”以及“通话记录”,方便用户透过原生电话 APP,直接取用这些第三方功能;
允许用户在通知中心直接浏览并回复来电,来电的画面也将整合在 iOS 原生的 UI 里。
总而言之,苹果 CallKit 让 iOS 原本单纯用来打电信电话的“电话”功能,能够结合众多第三方语音通讯软件,具备更完整的数码电话能力。而对融云服务的广大出海开发者来说,集成苹果 CallKit,应用内的 VOIP 通话可以获得系统级的通话效果,极大地提升用户使用体验。
应用出海,如何使用苹果 CallKit 提升网络通话体验相关推荐
- 出海有“云”!华为云全球加速助力跨国企业提升网络体验
对于需要面向全球提供产品和服务的企业来说,跨地域网络的质量和安全性是普遍存在的需求.许多使用传统网络加速解决方案的游戏公司和跨国公司,在运营过程中逐渐发现,丢包.抖动和高延迟等网络问题时常显现,网络卡 ...
- 工信部叫停苹果 Callkit,微信不能直接接听视频了
开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> 苹果有 ARkit.Classkit.Homekit 和 Sirikit 等开发工具,但 Callkit 却并不被 ...
- 安卓callkit_苹果Callkit国内被叫停:无需解锁即可接听网络电话 曾在微信短暂“现身”...
(图片来源于网络) 苹果有 ARkit.Classkit.Homekit 和 Sirikit 等实用的开发工具,但其中一款却没那么有名气,这款工具名叫Callkit. 简单来说,这是一款能够将微信等网 ...
- p2p网络测试工具_自媒体 IPFS官方升级DHT方案,提升网络整体性能
IPFS官方升级DHT方案,提升网络整体性能 4 月底,官方发布了迄今为止最大的 go-ipfs 更新:IPFS 0.5.0.此升级为 IPFS 带来了主要的性能和可靠性改进,尤其是在内容发现和路由方 ...
- 【深度学习】利用深度可分离卷积减小计算量及提升网络性能
[深度学习]利用深度可分离卷积减小计算量及提升网络性能 文章目录 1 深度可分离卷积 2 一个深度可分离卷积层的代码示例(keras) 3 优势与创新3.1 Depthwise 过程3.2 Point ...
- 网络营销外包期间如何提升网络营销外包外链优化效果?
在网络营销推广过程中,网站外链建设的作用不言而喻,不仅可以从多方面为网站提升曝光度,还能促进搜索引擎蜘蛛爬虫对网站内容迅速抓取,那么在网络营销外包期间是如何做好网站外链建设优化的呢?下面就针对该问题进 ...
- 卷积核一定可以提升网络性能吗?-分类0,2
制作一个网络然后向这个网络上加1-9个卷积核,通过网络的分辨准确率来比较卷积核对网络性能的影响. 网络的结构是 (mnist 0 ,mnist2)81-con(3*3)*n-(49*n)-30-2-( ...
- mac苹果ping不通网络
新买了mac,在安装synergy的时候,我拿我的win当server,mac当client,随后发现,synergy提示连接不到server,ping host 失败, cannot connect ...
- 又崩了?苹果发生大规模网络故障:多项服务受影响 目前已恢复
3月22日消息,针对原神部分用户充值异常的问题,原神官微今日发文称,由于Apple服务异常,部分旅行者出现了游戏充值异常的问题.现在相关服务已恢复. 周一下午晚些时候,苹果发生大规模网络故障,苹果iC ...
最新文章
- Datawhale组队学习周报(第018周)
- 风云编程python-python网络编程(一)
- javaweb学习总结(二十二):基于Servlet+JSP+JavaBean开发模式的用户登录注册
- gcc的警告提示信息
- 洛谷 P1330 封锁阳光大学题解
- Discuz!NT 缓存设计简析
- 三元一次方程组步骤_姜红梅名师工作室【教学感悟】三元一次方程组解法的思考...
- 通信工程师考试基本情况及经验分享
- 通达OA二次开发手册V12
- 【论文翻译】从零开始PointNet论文分析与代码复现
- 将优盘的FAT32格式改为NTFS
- 计算机乱七八糟小知识备忘录
- ThreadPoolExecutor中addWorker,continue retry和break retry是什么意思
- Java面向对象原谅帽
- java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒
- Linux基础(2)/Linux 基本概念及操作
- Excel成绩表打印
- 小米4电信4G_2014726_官方线刷包_救砖包_解账户锁
- SCAU 1028 求素数
- Linux系统性能监控分析工具perf