帮你快速理解、总结文档立即下载

Web 内核(iOS)快速接入

最近更新时间:2026-05-09 22:01:51
我的收藏
本文档旨在指导 iOS 开发者快速将互动课堂(LCIC)SDK 集成至现有项目中。
说明:
阅读本文前,您可以先了解 移动端原生内核与 Web 内核的区别。

开发环境准备

在开始集成前,请确保您的开发环境满足以下要求:
开发工具:Xcode 14 或更高版本。
系统要求:iOS 11.0 或更高版本。

集成步骤

步骤 1:导入 SDK

LCIC SDK 已发布至 CocoaPods。请在项目的 Podfile 中添加以下依赖,并执行 pod install 进行安装。
pod 'TCICSDK_Pro', '1.8.5.20'
pod 'TXLiteAVSDK_Professional', '12.7.19324'

步骤 2:配置 App 权限

LCIC SDK 需要使用相机、麦克风及相册权限。请在主 App 的 Info.plist 文件中添加以下键值对,并填入相应的权限申请描述:
<key>NSCameraUsageDescription</key>
<string>需要访问您的相机以进行视频互动</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问您的麦克风以进行语音互动</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要访问相册以保存图片</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册以读取图片</string>

步骤 3:全局环境配置

在启动课堂前,建议进行全局环境参数配置(如域名、语言等)。
// 1. 设置课堂域名
// 默认域名为:class.qcloudclass.com
// targetDomain 必须为腾讯提供的专用域名
[TCICClassController setDomain:targetDomain];

// 2. 设置 H5 端版本号
// 默认为:"latest"。一般情况下无需调整
[TCICClassController setH5Version:targetVersion];

// 3. 设置课堂语言类型
// 默认为中文: "zh"。具体参数值请参考下文参数表
[TCICClassController setClassLanuage:[msgDic objectForKey:@"lng"]];

// 4. 预加载资源
// 注意:预加载逻辑需放在最后调用,前面的配置变更会清除预加载内容
[TCICClassController preloadClass];

步骤 4:准备课堂参数

请按照文档 接入准备 获取必要参数。
进入课堂需要构建 TCICClassConfig 对象。请通过以下方式获取所需参数:

参数详情表

字段
类型
必填
含义
备注
schoolid
int
是
应用 ID
在 接入准备 中创建的应用 ID (SdkAppId)。
userid
long
是
课堂 ID
通过 RegisterUser 接口获取。
token
string
是
用户 ID
通过 LoginUser 接口获取。
classid
string
是
鉴权 Token
通过 CreateRoom 接口获取。
region
string
否
服务器地域
默认值 cn,即访问中国大陆服务器节点。支持值:
cn:中国大陆。国内用户或全球不确定位置用户。
sg:新加坡。全球非中国大陆用户。
scene
string
否
场景名称
用于区分不同的定制布局,有两种配置方式:
方式1:使用 SetAppCustomContent 接口配置。
方式2:控制台 场景配置。
lng
string
否
语言参数
界面语言设置。支持值:
zh-CN:中文简体
zh-TW:中文繁体
en-US:英语
ja:日语
ko:韩语
ar:阿拉伯语
vi:越南语
id:印尼语
需配合 TCICWebViewManager.getInstance().setClassLanguage 使用。
camera
int
否
开启摄像头
1:开启 (默认),0:关闭。
mic
int
否
开启麦克风
1:开启 (默认),0:关闭。
speaker
int
否
开启扬声器
1:开启 (默认),0:关闭。
groupLiveCode
string
否
分组直播码
详见 分组直播。

步骤 5:调起课堂页面

构建 TCICClassConfig 对象并传入必要参数,即可调起 LCIC 组件主页面。
打开课堂代码示例:
TCICClassConfig *roomConfig = [[TCICClassConfig alloc] init];

// 必填参数
roomConfig.schoolId = 123456; // 学校/应用 ID
roomConfig.userId = "test_user"; // 用户 ID
roomConfig.token = "test_token"; // 鉴权 Token
roomConfig.classId = 654321; // 课堂 ID

// 可选参数配置
[roomConfig setValue:@"en" forKey:@"language"]; // 设置语言
[roomConfig setValue:@"scene_name" forKey:@"scene"]; // 设置场景
[roomConfig setValue:@(0) forKey:@"preferPortrait"]; // 屏幕方向:0 横屏(默认),1 竖屏

// 初始化并跳转控制器
TCICClassController *vc = [TCICClassController classRoomWithConfig:roomConfig];
if (vc) {
[(UINavigationController *)self.window.rootViewController pushViewController:vc animated:YES];
} else {
NSLog(@"错误:参数配置有误,无法初始化课堂控制器");
}
监听退出通知:
如果您需要监听用户退出课堂的事件,请注册 TCICExitClassRoomCompleteNotify 通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleClassExit)
name:@"TCICExitClassRoomCompleteNotify"
object:nil];

步骤 6:SDK 授权申请

如果是“直播大班课”班型,需申请播放器权限。请按以下模板填写信息并提交 腾讯云工单,相关疑问可通过 联系我们 加入微信群了解。
参考模板提供信息:
问题:实时互动-教育版申请播放器授权
公司名称:
联系方式:
App Name:
Package Name (Android):
Bundle ID (iOS):
注意:
一个旗舰版仅支持授权一个正式包名,请确认信息无误。

高级功能:移动端屏幕分享

LCIC SDK 支持 iOS 系统级屏幕分享功能。实现该功能需要利用 iOS 的 ReplayKit 框架及 App Group 能力。

1. 创建 App Group

请参考 TRTC 官网文档 > 步骤 1:创建 App Group 完成 App Group 的创建。

2. 创建 Broadcast Upload Extension

请参考 TRTC 官网文档 > 步骤 2:创建 Broadcast Upload Extension 在工程中创建一个新的 Target(类型为 Broadcast Upload Extension)。

3. 配置 Extension 依赖

在 Podfile 中为新创建的 Extension Target 添加依赖,并重新执行 pod install。
target 'YourExtensionTargetName' do
# 如果不使用动态库,请注释下一行
# use_frameworks!
pod 'TCICSDK_Pro_ReplayKit'
end

4. 实现 SampleHandler

在 Extension 的 SampleHandler.m 文件中,导入头文件并实现以下逻辑。
注意:
请将 APPGROUP 宏定义的值修改为您在 上文 中创建的 App Group ID。
#import "SampleHandler.h"
#import <TXLiteAVSDK_ReplayKitExt/TXLiteAVSDK_ReplayKitExt.h>
#import <TCICScreenKit/TCICScreenKit.h>

// TODO: 替换为您创建的 App Group Identifier
#define APPGROUP "group.com.yourcompany.app"

@interface SampleHandler() <TXReplayKitExtDelegate>
@end

@implementation SampleHandler

- (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo {
// 初始化 ReplayKitExt
[[TXReplayKitExt sharedInstance] setupWithAppGroup:APPGROUP delegate:self];
// 通知 LCIC ScreenKit 开始
[[TCICScreenKit sharedScreenKit] onScreenKitStarted];
}

- (void)broadcastPaused {
[[TCICScreenKit sharedScreenKit] onScreenKitPaused];
}

- (void)broadcastResumed {
[[TCICScreenKit sharedScreenKit] onScreenKitResumed];
}

- (void)broadcastFinished {
[[TXReplayKitExt sharedInstance] finishBroadcast];
[[TCICScreenKit sharedScreenKit] onScreenKitFinished];
}

#pragma mark - TXReplayKitExtDelegate

- (void)broadcastFinished:(TXReplayKitExt *)broadcast reason:(TXReplayKitExtReason)reason {
NSString *tip = @"";
switch (reason) {
case TXReplayKitExtReasonRequestedByMain:
tip = @"屏幕共享已结束";
break;
case TXReplayKitExtReasonDisconnected:
tip = @"应用断开";
break;
case TXReplayKitExtReasonVersionMismatch:
tip = @"集成错误(SDK 版本号不匹配)";
break;
}
NSError *error = [NSError errorWithDomain:NSStringFromClass(self.class) code:0 userInfo:@{
NSLocalizedFailureReasonErrorKey:tip
}];
[self finishBroadcastWithError:error];
}

- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
// 假设 kSupportSceenShare 是您控制是否开启的宏或变量,如不需要可移除判断
if (kSupportSceenShare) {
switch (sampleBufferType) {
case RPSampleBufferTypeVideo:
case RPSampleBufferTypeAudioApp:
// 分发数据给 LCIC ScreenKit
[[TCICScreenKit sharedScreenKit] processSampleBuffer:sampleBuffer withType:sampleBufferType];
// 分发数据给 TXLiteAVSDK
[[TXReplayKitExt sharedInstance] sendSampleBuffer:sampleBuffer withType:sampleBufferType];
break;
case RPSampleBufferTypeAudioMic:
// 麦克风音频通常由主 App 采集,此处一般忽略
break;
default:
break;
}
}
}
@end

5. 主 App 对接配置

在主 App 初始化课堂配置时,必须设置 appGroup 参数,以便主 App 能与 Extension 通信。
TCICClassConfig *roomConfig = [[TCICClassConfig alloc] init];
roomConfig.userId = "test";
roomConfig.token = "test_token";
roomConfig.classId = 123454;
roomConfig.schoolId = 123456; // 同 SDKAppId

// 【关键步骤】通过 KVC 设置 AppGroup
[roomConfig setValue:@"group.com.yourcompany.app" forKey:@"appGroup"];

6. 注意事项

1. 触发方式:
iOS 12及以上:TCICSDK 已内置屏幕分享触发按钮(需不依赖 Scene 生命周期)。具体可参见 TRTC 官网文档 > 步骤 4:增加屏幕分享的触发按钮(可选),但该功能有限制条件。
如果代码中已支持 Scenedelegate,可参见 Xcode 11 删除 Scenedelegate,进行移除。
以 Demo 为例,弹出效果如下,单击开始直播即可。

iOS 11:需引导用户在控制中心长按录屏按钮,选择您的 Extension 应用(如“腾讯会议”示例图所示)来启动。

2. 版本兼容:Extension 的 Deployment Target 建议设置为 iOS 11.0。
3. 后台模式:主 App 必须开启 Background Modes 中的 “Audio, AirPlay, and Picture in Picture” 选项,以保证后台保活。


附录与参考

异常监控:建议接入 腾讯 Bugly 以监控应用稳定性。
示例代码:下载 iOS 开发 Demo 参考完整实现。
进阶配置:更多自定义页面配置请参考 Web 内核定制指南。