iOS CallKit 开发指南

简介

CallKit 是融云音视频通话功能的 UI 界面 SDK。包含了单人、多人音视频通话的界面的各种场景和功能。您可以快速的集成 CallKit 来实现丰富的音视频通话界面,并进行自己的 UI 定制开发。同时我们开源了 CallKit,您可以根据您的需要去使用。

GitHub 项目:CallKit 开源代码

开通方式

音视频服务开通,请参考音视频开通方式说明。

使用说明

由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的 VoIP 不能互通。

音视频 SDK 为商用收费功能,之前的 SDK 中的 VoIP 为免费测试功能,如果您还想使用之前的 VoIP,可以使用 2.5.2 版本。

集成说明

导入SDK

有两种方式可以将 SDK 导入您的项目中:

  • 通过 CocoaPods 管理依赖
  • 手动导入 SDK 并管理依赖

使用 CocoaPods 导入 SDK

1、 Cocoapods 的安装、使用,可以参考IM SDK - 下载与导入SDK文档。

2、 使用 CocoaPods 导入融云 SDK

在您的工程根目录下新建一个 Podfile 文件,在文件中输入以下内容。(在此以 2.8.0 版本为例,其中 “MyApp” 为自己工程名)

  target 'MyApp' do
    pod 'RongCloudIM/IMLib', '2.8.0'
    pod 'RongCloudIM/IMKit', '2.8.0'
    pod 'RongCloudIM/CallLib', '2.8.0'
    pod 'RongCloudIM/CallKit', '2.8.0'
  end

然后在终端中运行以下命令:

  pod install

完成后,CocoaPods 会在您的工程根目录下生成一个 .xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 .xcodeproj

请务必保证使用的 RongCloudIM 所有模块版本号一致。
关于融云 IM CocoaPods 功能模块的介绍和使用说明,可以参考说明文档
如果您使用的是2.8.0之前的SDK,请参考知识库文档

手动导入 SDK

1、 下载 SDK

您可以到融云官方网站下载 SDK。

2、 融云 IM SDKCall SDK 的基础。使用 CallKitCallLib,必须同时集成使用融云 IM SDK。 手动导入 IM SDK,可以参考IM SDK - 下载与导入SDK文档。

SDK 文件说明:

文件 说明 注意事项
RongCallKit.framework CallKit的framework 库 使用 CallKit 必须导入
RongCallLib.framework CallLib的framework 库 使用 CallLib 与使用 CallKit 都必须导入
AgoraRtcEngineKit.framework 通话引擎 必须导入,否则通话功能将无法使用

3、 手动集成了融云 SDK 之后,您需要在您的工程中导入 RongCallLib.framewrokRongCallKit.framewrokAgoraRtcEngineKit.framework 以及系统库 CoreMotion.frameworkVideoToolbox.framework

4、 在 Xcode 项目 Build Settings -> Other Linker Flags 中,增加"-ObjC"。

快速集成

使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMKit 快速集成文档。

1、发起通话

使用 CallKit 可以通过两种方式发起通话:

  1. 在聊天界面输入扩展的加号内,点击语音通话/视频通话按钮直接发送通话。
这个功能在 SDK 中已经默认实现了,您不需要做什么额外的操作。
  1. 调用 RCCall 类中的以下方法发起通话。

  2. 发起单人通话

// RCCall Class

/*!
 发起单人通话

 @param targetId  对方的用户ID
 @param mediaType 使用的媒体类型
 */
- (void)startSingleCall:(NSString *)targetId
              mediaType:(RCCallMediaType)mediaType;
  • 选择成员并发起多人通话
// RCCall Class

/*!
 选择成员并发起多人通话

 @param conversationType 会话类型
 @param targetId         会话目标ID
 @param mediaType        使用的媒体类型

 @discussion 此方法会先弹出选择成员界面,选择完成后再会发起通话。目前支持的会话类型有讨论组和群组。

 @warning 如果您需要在群组中调用此接口发起多人会话,需要设置并实现groupMemberDataSource。
 */
- (void)startMultiCall:(RCConversationType)conversationType
              targetId:(NSString *)targetId
             mediaType:(RCCallMediaType)mediaType;
需要注意的是,如果您需要在群组中调用此接口发起多人会话,需要设置并实现 groupMemberDataSource
SDK 在选择群组成员的时候,会调用 getAllMembersOfGroup:result: 接口获取群成员列表并显示。
  • 直接发起多人通话
// RCCall Class

/*!
 直接发起多人通话

 @param conversationType 会话类型
 @param targetId         会话目标ID
 @param mediaType        使用的媒体类型
 @param userIdList       邀请的用户ID列表

 @discussion 此方法会直接发起通话。目前支持的会话类型有讨论组和群组。

 @warning 您需要设置并实现groupMemberDataSource才能加人。
 */
- (void)startMultiCallViewController:(RCConversationType)conversationType
                            targetId:(NSString *)targetId
                           mediaType:(RCCallMediaType)mediaType
                          userIdList:(NSArray *)userIdList;

2、通话接听

当收到一个通话呼叫的时候,

  1. 当 App 处于前台状态的时候,SDK 会自动弹出通话界面。

  2. 当 App 处于后台活动状态的时候,SDK 会弹出本地通知并播放铃声。

  3. 当 App 处于后台暂停状态的时候,如果您的 App 开启了 VoIP 后台运行模式并在开发者后台上传了 VoIP 推送证书,这时候 App 会在后台启动并弹出本地通知;否则,App 会收到远程推送提醒,VoIP Push 设置请参考 VoIP 推送设置文档

关于 App 运行状态的更多信息,您可以参考 SDK 的运行状态文档。

3、会话是否支持发起通话

目前,SDK 支持在单聊发起单人通话,在讨论组、群聊中发起多人通话。

您可以通过RCCall类的以下接口查询当前会话的通话能力。

// RCCall Class

/*!
 当前会话类型是否支持音频通话

 @param conversationType 会话类型

 @return 是否支持音频通话
 */
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;

/*!
 当前会话类型是否支持视频通话

 @param conversationType 会话类型

 @return 是否支持视频通话
 */
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;

4、设置多人最大通话人数限制

CallKit 默认音频通话最大人数为 20 人,视频通话最大人数为 9 人。

如果不符合您的需求,您可以通过 RCCall 以下接口设置最大人数。

// RCCall Class

/*!
 音频通话支持的最大通话人数
 */
@property (nonatomic, assign) int maxMultiAudioCallUserNumber;

/*!
 视频通话支持的最大通话人数
 */
@property (nonatomic, assign) int maxMultiVideoCallUserNumber;
建议您在设置最大人数的时候,考虑移动设备的带宽(主要是多路视频通话)和UI交互友好。
CallLib 的话音频和视频人数默认均没有限制。

5、UI界面说明

CallKit 中默认实现了一套较为通用的通话 UI,包含单人音视频通话界面 RCCallSingleCallViewController 、多人音频通话界面 RCCallAudioMultiCallViewController 、多人视频通话界面 RCCallVideoMultiCallViewController、最小化的通话界面 RCCallFloatingBoard、聊天界面的通话提示 RCCallDetailMessageCellRCCallTipMessageCell等。

如果能满足您的需求,您可以基于 CallKit 直接开发,如果您的需求较为特殊,可以直接使用 CallLib 并实现相关的界面UI,您也可以向我们商务索取 CallKit 源码以供参考。

VoIP 推送设置

详细请参考 VoIP 推送设置文档


© 2016 RongCloud. All Rights Reserved. Version 2.8.5