实时互动-教育版 Web 内核(iOS)快速接入

这篇档旨在指导 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; // 学校/应用 IDroomConfig.userId = "test_user"; // 用户 IDroomConfig.token = "test_token"; // 鉴权 TokenroomConfig.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 内核定制指南。

赞 (0)
上一篇 4天前
下一篇 4天前