前提条件
- Xcode 10.0 或以上版本(本文 Xcode 的界面描述以 Xcode 12.0 为例)
- iOS 9.0 或以上版本的设备
- 有效的 anyRTC 开发者账号
创建 iOS 项目
-
打开 Xcode 并点击 Create a new Xcode project。
-
选择平台类型为 iOS、项目类型为 Single View App,并点击 Next。
-
输入项目名称(Product Name)、开发团队信息(Team)、组织名称(Organization Name)和语言(Language)等项目信息,并点击 Next。
如果你没有添加过开发团队信息,会看到 Add account… 按钮。点击该按钮并按照屏幕提示登入 Apple ID,完成后即可选择你的 Apple 账户作为开发团队。
-
选择项目存储路径,并点击 Create。
获取 SDK
选择如下任意一种方式获取最新版 RTC SDK。
方法一:使用 CocoaPods 获取 SDK
- 开始前确保你已安装 Cocoapods。参考 Getting Started with CocoaPods 安装说明。
- 在终端里进入项目根目录,并运行
pod init
命令。项目文件夹下会生成一个Podfile
文本文件。 - 打开
Podfile
文件,修改文件为如下内容。注意将Your App
替换为你的 Target 名称。
# platform :ios, '9.0'
use_frameworks!
target 'Your App' do
pod 'ARtcKit_iOS'
end
- 在终端内运行
pod install
命令安装 SDK。成功安装后,Terminal 中会显示Pod installation complete!
,此时项目文件夹下会生成一个xcworkspace
文件。 - 打开新生成的
xcworkspace
文件。
方法二:从官网获取 SDK
-
前往 SDK 下载页面,获取最新版的 RTC SDK,然后解压。
-
根据你的需求,选择以下一种方法将
ARtcKit.framework
动态库复制到项目的./project_name
文件夹下(project_name
为你的项目名称)。 -
打开 Xcode,进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content菜单。
-
点击 + > Add Other… > Add Files 添加
ARtcKit.framework
动态库,并确保添加的动态库 Embed 属性设置为 Embed & Sign。 添加完成后,项目会自动链接所需系统库。
根据 Apple 官方要求,app 的 Extension 中不允许包含动态库。如果项目中的 Extension 需要集成 SDK,则添加动态库时需将文件状态改为 Do Not Embed。
基本流程
现在,我们已经将 RTC SDK 集成到项目中了。接下来我们要在 ViewController
中调用 anySDK 提供的核心 API 实现基础的语音通话功能,API 调用时序见下图。
1. 导入类
// Objective-C
// ViewController.h
#import <ARtcKit/ARtcKit.h>
// 声明 ARtcEngineDelegate,用于监听回调
@interface ViewController : UIViewController <ARtcEngineDelegate>
// 定义 rtcKit 变量
@property (strong, nonatomic) ARtcEngineKit *rtcKit;
// Swift
// ViewController.swift
import ARtcKit
class ViewController: UIViewController {
...
// 定义 rtcKit 变量
var rtcKit: ARtcEngineKit?
}
2. 初始化 ARtcEngineKit 对象
调用 sharedEngineWithAppId
创建并初始化 ARtcEngineKit
对象。你需要将 YourAppID
替换为你的 anyRTC 项目的 App ID。详见获取App ID。
你还可以根据场景需要,在初始化时注册想要监听的回调事件。
// Objective-C
// ViewController.m
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 后续步骤调用 anyRTC API 使用的函数
[self initializeRtcEngine];
[self joinChannel];
}
- (void)initializeRtcEngine {
// 初始化 ARtcEngineKit 对象
self.rtcKit = [ARtcEngineKit sharedEngineWithAppId:@"YourAppID" delegate:self];
}
// Swift
// ViewController.swift
class ViewController: UIViewController {
...
override func viewDidLoad() {
super.viewDidLoad()
// 后续步骤调用 anyRTC API 使用的函数
initializeRtcEngine()
joinChannel()
}
func initializeRtcEngine() {
// 初始化 ARtcEngineKit 对象
rtcKit = ARtcEngineKit.sharedEngine(withAppId: "YourAPPID", delegate: self)
}
}
3. 加入频道
调用 joinChannelByToken
加入频道。
在 joinChannelByToken
中你需要将 YourToken
替换成你自己生成的 Token,并将 YourChannelName
替换为你生成 Token 时填入的频道名称。
- 在测试阶段,你可以直接在控制台生成临时 Token。加入频道时,请确保填入的频道名和生成临时 Token 时填入的频道名一致。
- 在生产环境,我们推荐你在自己的服务端生成 Token,详见在服务端生成 Token。加入频道时,请确保填入的频道名和 uid 与生成临时 Token 时填入的频道名和 uid 一致。
用户成功加入频道后,会默认订阅频道内其他所有用户的音频流,因此产生用量并影响计费。如果想取消订阅,可以通过调用相应的mute
方法实现。
// Objective-C
// ViewController.m
- (void)joinChannel {
[self.rtcKit joinChannelByToken:@"YourToken" channelId:@"YourChannelName" info:nil uid:0 joinSuccess:^(NSString * _Nonnull channel, NSUInteger uid, NSInteger elapsed) {
// Did join channel
}];
}
// Swift
// ViewController.swift
func joinChannel(){
rtcKit?.joinChannel(byToken: "YourToken", channelId: "YourChannelName", uid: nil, joinSuccess: { (channel, uid, elapsed) in
// Did join channel
})
}
4. 离开频道
根据场景需要,如结束通话、关闭 App 或 App 切换至后台时,调用 leaveChannel
离开当前通话频道。
// Objective-C
// ViewController.m
// 将以下代码填入你定义的函数中
[rtcKit leaveChannel:nil];
// Swift
// ViewController.swift
// 将以下代码填入你定义的函数中
rtcKit?.leaveChannel(nil)
5. 销毁 ARtcEngineKit 对象
离开频道后,如果你想释放 RTC SDK 使用的所有资源,需调用 destroy
销毁 ARtcEngineKit
对象。
// Objective-C
// ViewController.m
// 将以下代码填入你定义的函数中
[ARtcEngineKit destroy];
// Swift
// ViewController.swift
// 将以下代码填入你定义的函数中
ARtcEngineKit.destroy()
运行项目
在运行项目前,你需要设置签名和开发团队,并添加设备权限。
1. 设置签名和开发团队
- 在 Xcode 中,进入 TARGETS > Project Name > Signing & Capabilities > Signing 菜单,勾选 Automatically manage signing。
- 仔细阅读弹窗提示,并点击 Enable Automatic。
- 成功设置签名后,在 Team 处选择你的开发团队。
2. 添加设备权限
在 Xcode 中,打开 info.plist
文件。在右侧列表中添加如下内容,获取相应的设备权限:
Key | Type | Value |
---|---|---|
Privacy - Microphone Usage Description | String | 使用麦克风的目的,例如:for a call or live interactive streaming。 |
iOS 14.0 版本新增了 Privacy - Local Network Usage Description 权限。