无 UI 集成 ( 最近更新时间:2020-04-28 19:00:00 )
# 前置条件
RongCallLib
提供了单人,多人实时音视频通话的基础功能,并且提供了简单易于的接口,还封装了控制音视频通话状态的信令消息和通话控制逻辑,使其可以有效的管理通话状态。RongCallLib
是基于 RongRTCLib
实现的,RongCallLib
的音视频采集和实时传输的能力来自于 RongRTCLib
。
兼容性
RongCallLib 支持 iOS 8.0 及以上系统。 2.9.13 及以上版本的 RongCallLib 与 2.9.12 及其以下版本不能互通。
说明
开发者想要了解 RongCallLib
接口使用方法,除了阅读文档,还可以可以参考 RongCallKit
源代码: https://github.com/rongcloud/callkit-ios
# 服务开通
- 在 开发者后台 创建应用。
- 开通音视频服务,开通位置如下图。
# SDK 导入
以下两种方式可以将 SDK 导入您的项目中:
- 通过
CocoaPods
自动导入管理依赖 (推荐使用) - 手动导入 SDK 并管理依赖
# 自动导入
- 如果没有特殊要求,建议开发者使用最新版本融云 SDK ,请运行以下命令更新本地的
CocoaPods
仓库列表:
pod repo update
已复制
- 请在
podfile
中添加如下内容:
pod 'RongCloudIM/IMLib','~> 2.10.5' pod 'RongCloudRTC/RongCallLib','~> 2.10.5'
已复制
2
- 请在终端中运行以下命令:
pod install
已复制
完成后,CocoaPods
会在您的工程根目录下生成一个 .xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 .xcodeproj
# 手动导入
在融云官网下载通讯能力 SDK 库进行集成
导入下载的通讯能力 SDK 库
添加以下系统依赖库
- AssetsLibrary
- MapKit
- ImageIO
- Security
- SystemConfiguration
- QuartzCore
- AVFoundation
- GLKit
- OpenGLES
- CoreGraphics
- CoreLocation
- CoreTelephony
- CoreFoundation
- CoreMedia
- CoreAudio
- CoreVideo
- CFNetwork
- AudioToolbox
- VideoToolBox
- AVFoundation
- libc++.tbd
- libz.tbd
- libbz2.tbd
- libiconv.tbd
- libsqlite3.tbd
# 工程配置
音视频通话需要用到摄像头和麦克风权限,请在工程的 info.plist 中添加如下键值:
Privacy - Microphone Usage Description
Privacy - Camera Usage Description
音视频通话中需要用到
HTTP
请求,请在工程的 info.plist 中添加如下键值:App Transport Security Settings
在此键值下再添加
Allow Arbitrary Loads
并将 Value 设置为 YES请将工程中
Target -> Signing & Capabilities -> Background Modes
如下内容勾选:Audio, AirPlay, and Picture in Picture
Voice over IP
请将工程中
Target -> Build Settings -> Enable Bitcode
将此项设置为NO
。请将工程中
Target -> Build Settings -> Other Linker Flags
在此项中添加-ObjC
。为避免造成编译失败,禁止使用-all_load
和-force_load
。
# 初始化
在启动时,使用单例初始化IM,并连接IM服务。
示例代码
// AppKey 设置 [[RCIMClient sharedRCIMClient] initWithAppKey:@"请在开发者平台获取AppKey"];
已复制
2
# 连接IM
IM初始化完成后需要连接IM服务。
示例代码
// 连接IM服务 [[RCIMClient sharedRCIMClient] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值" dbOpened:^(RCDBErrorCode code) {} success:^(NSString *userId) {} error:^(RCConnectErrorCode status) {} tokenIncorrect:^{}];
已复制
2
3
4
5
6
7
# 通话监听
此代理定义在 RCCallClient
中定义了全局通话呼入的监听器 RCCallReceiveDelegate 设置并实现此代理方法即可收到来电。
- (void)didReceiveCall:(RCCallSession *)callSession;
已复制
示例代码
初始化 RongCallLib
后可收到 RCCallReceiveDelegate 的来电回调。
[[RCCallClient sharedRCCallClient] setDelegate:RCCallReceiveDelegate的实现类];
已复制
# 发起通话
使用 RongCallLib
库中 RCCallClient
的单例 startCall:targetId:to:mediaType:sessionDelegate:extra:
方法可以发起指定呼叫。
示例代码
self.callSession = [[RCCallClient sharedRCCallClient] startCall:conversationType targetId:targetId to:userIdList mediaType:mediaType sessionDelegate:self extra:nil];
已复制
2
3
4
5
6
# 接听通话
当需要接听通话时,利用发起呼叫返回的 callSession 或来电代理返回的 callSession 对象调用接听方法。
示例代码
[self.callSession accept:self.callSession.mediaType];
已复制
# 挂断通话
当需要挂断通话时,利用发起呼叫返回的 callSession 或来电代理返回的 callSession 对象调用挂断方法。
示例代码
[self.callSession hangup];
已复制