TCIC Native SDK Skill
这个 skill 默认服务于“SDK 集成方”,不是 TCIC 仓库维护者。
默认假设:
- 用户只有自己的 Android / iOS 宿主工程
- 用户已经集成了 TCIC SDK,或者准备集成
- 用户通常拿不到 TCIC SDK 的内部源码
因此回答时不要默认要求用户去看 SDK 内部文件路径,而是优先基于:
- 宿主工程里的初始化代码
- 宿主工程里的
TCICManager调用位置 - 宿主工程里的
TCICConfig构造逻辑 - 宿主工程里的权限声明和运行时授权
- 宿主工程里的回调、弹窗、抽屉、BottomSheet、原生自定义 View
先读 references/overview.md,再按问题选择专题:
- 安装、初始化、权限:
references/install_and_permissions.md - 全量公开 API 能力:
references/api_capabilities.md - Android 集成与排查:
references/android.md - iOS 集成与排查:
references/ios.md - Objective-C 集成:
references/objective-c.md - 自定义能力与设计边界:
references/customization.md builderJson写法、事件、Slot、示例:references/builder_json.mdlayoutConfig、自定义布局、拖拽浮层:references/layout_config.md- 语言、繁体中文、自定义文案:
references/language_and_i18n.md - 回放打开、PlaybackConfig、离线缓存、缓存回调:
references/playback.md - 回调参数详解、错误码、NativeImageProvider:
references/callbacks_detail.md - 典型场景模板:
references/demos.md
回答工作流:
- 先判断用户是 Android、iOS、Objective-C,还是跨平台问题。
- 再判断问题属于哪一类:
- 接入失败 / 页面打不开 / 权限问题
- 回调没收到 / 回调对象释放
- 课堂生命周期:加入、退出、开课、结束、销毁
- 自定义课堂结束弹窗
- 发送消息前拦截
- 自动切换下一节课堂
- 回放 / WebView 回放 / 自动播放 / 离线缓存
- 回放 AppBar 或悬浮按钮自定义、运行时显隐
- 白板 / 文档 / 录屏 / 任务
- RTC 或设备控制
- 自定义按钮不生效
- Flutter 入口按钮点了以后要交给 native 弹窗
- 拖拽浮层 / 自定义布局 / 横竖屏布局
- 修改某个默认组件的布局、颜色、字号、圆角或图标
-builderJson不知道怎么写
- 语言设置 / 繁体中文 / 自定义文案 / 名称覆盖
- 水印配置、Toast 自定义、画中画、Native 图片 - 优先检查用户宿主工程中的这些位置:
- SDK 初始化位置
-setConfig调用位置
- 打开课堂或回放页面的位置
- 回调注册和对象持有位置
-AndroidManifest.xml/Info.plist
- 自定义按钮 JSON、NativeView 注册代码、UI 事件处理代码 - 如果问题涉及自定义 UI,先分清:
- 配置字段:显隐、颜色、字号、圆角、功能开关
-builderJson:由 SDK 内部 Flutter 层渲染,适合图标和轻量 UI
-builder/ NativeView:由宿主原生渲染,适合宿主完全掌控样式与行为
-layoutConfig:适合位置、宽高、横竖屏布局、浮动、拖拽、贴边、折叠 - 如果问题涉及点击后打开原生弹窗,明确说明:
- 入口 UI 可以在 TCIC 页面内
- 点击后的抽屉、底部面板、居中弹窗、分享面板、原生路由都可以完全由宿主 native 实现
在客户项目里优先搜索这些公开符号:
TCICManagerTCICConfigTCICCallbackUIEventCallbackEventBusCallbackPlaybackCallbackPlaybackCacheCallbackNativeImageProviderTCICBasicConfigTCICHeaderComponentConfigTCICFooterComponentConfigTCICMessageComponentConfigTCICVideoComponentConfigTCICMembersComponentConfigTCICWhiteBoardComponentConfigTCICSettingComponentConfigTCICMainViewComponentConfigTCICLayoutConfigTCICLayoutComponentConfigPlaybackConfigsetConfiggetConfigopenTCICPagegetTCICIntentopenPlaybackopenPlaybackWithActivityopenPlaybackWithViewControllerupdatePlaybackConfiggetPlaybackDurationcacheMetaDataByClassIdgetCachedMetaDataStatusclearCachedMetaDatasetLanguagelangConfigcustomStringstextReplacenameConfignextClassIdonClassEndDialogRequestedhasClassEndDialogHandlerbeforeSendMessageonClassSwitchingonClassSwitchSucceededonClassSwitchFailedheaderActionsTailBuilderJsoninputExtraActionsBuilderJsonappBarActionBuilderJsonfloatingActionBuilderJsonfloatingActionVisiblewebviewModeautoPlayOnReadylandscapeLayoutConfigportraitLayoutConfigcomponentConfigcustomLayoutBuildersbuilderJsonbuilderwatermarkConfigtoastConfigallowPipModeteacherVideoFloatingenableQuicModehideEmojiButtonhideFileButtonhideGroupNotificationButtonhideSettingButtonsetActivityThemesetNativeImageProvider
回答时必须坚持这些边界:
- 不要把 TCIC 内部源码路径当成客户必须具备的前提。
- 不要把
builderJson说成由客户自己项目中的 Flutter 页面解析,客户通常只是在 config 里传 JSON。 - 不要把“自定义按钮”写成某个内置固定业务按钮;它应该是业务方自己决定样式和行为。
- 不要把“能不能弹 native 窗”理解成 Flutter 要负责弹窗;TCIC 页面里的点击事件只需要把事件交还宿主即可。
- 不要把
callTCICControllerMethod作为第一推荐;先看公开封装 API 和 config 是否能满足。 - 如果本地 SDK 版本的公开方法签名和这里的示例略有差异,优先以客户项目里实际可用的 SDK API 为准。
优先输出顺序:
- 直接结论
- 用户在宿主工程里应该检查或添加什么
- 推荐的集成方式或自定义方式
- 如果需要,再给一段最小代码示例