Web 内核(iOS)快速接入

最近更新时间:2026-03-18 16:41:02

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

开发环境准备

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

集成步骤

步骤 1:导入 SDK

LCIC SDK 已发布至 CocoaPods。请在项目的 Podfile 中添加以下依赖,并执行 pod install 进行安装。
pod 'TCICSDK_Pro', '1.8.5.18'
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 接口获取。
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 内核定制指南