2.1 接入准备:开通服务与鉴权配置

别急着写代码:先理清开通什么

集成 TRTC 的第一天,最容易犯的错就是直奔 SDK 写 demo,写到一半发现服务没开通、鉴权没签发,报错一屏一屏地翻。我带过的两个实习生都是这个路数,我自己当年也一样。这一节先把接入前的准备工作列成一张清单,逐项打勾之后再进下一节,后面的进房代码会顺很多。

接入准备清单如下,按真正动手的顺序排:

序号 事项 涉及产品 说明 完成标准
1 注册账号并完成实名认证 腾讯云 个人或企业均可,企业认证额度更高 控制台显示已认证
2 开通 TRTC 服务 TRTC 在 TRTC 控制台开通视频通信服务 控制台可创建应用
3 创建应用拿到 SDKAppID TRTC 一个项目对应一个应用,是全局标识 记录 SDKAppID
4 生成测试 userSig TRTC 先用控制台辅助工具跑通流程 测试号能进房
5 搭建正式签发服务 云服务器 userSig 签发放后端,密钥不落客户端 后端接口可签发
6 规划录制与消息配套 COS、IM 录制文件落 COS,课堂消息走 IM 各产品均已开通

第 6 步先建占位即可,录制和互动在后面篇章才真正用到,但提前开通能避免到时候手忙脚乱。集成过程中要反复查的资料集中在TRTC 文档中心,建议直接收藏,每动一个新能力点之前都先查文档再写代码——我们团队后来立了这条规矩,光这一条就省下无数联调时间。

这张清单里最容易忽略的是第 5 步。很多人把第 4 步的测试签名当成正式方案,一直到上线都让客户端直接拿本地配置里的签名进房,等于把家门钥匙挂在门外。趁早把签发服务搭起来,后续的所有安全策略才有意义。

开通服务这件事本身不复杂,但有两个常见限制提前知道能少走弯路。一是新账户有默认的并发上限,小机构刚开始上课完全够用,等节假日活动排课量上来了再提额;二是部分能力的开通需要审核,留出半天到一天的提前量,别等开课前一天才想着点开关。当时我们把排课记录和预估上课人数整理好放在手边,提额申请一次通过,比反复补充材料快得多。这些运营细节在第五篇成本与迭代那章会系统讲,这里先提个醒。

开通阶段被问得最多的几个报错,也一并整理成 Q&A,新人接手时按图索骥:

报错现象 原因 解决办法
进房提示服务未开通 应用创建后没等能力生效 等待生效后重试,或检查应用状态
提示 SDKAppID 无效 数字填错或用了应用名 到控制台核对应用的数字标识
userSig 校验不通过 密钥与当前应用不匹配 用当前应用的密钥重新签发
偶发进不去但重试可以 并发达到默认额度 提额或错峰,别硬扛高峰
创建应用失败 账号未完成认证或欠费 先补认证、检查账户余额

这张表在我们的内部文档里更新过三四轮,每加一行都对应一次真实事故。新人入职第二天就能独立处理开通类问题,靠的就是它。

userSig 是什么:进房之前先过鉴权

TRTC 的每一个房间都有鉴权门槛,userSig 就是这道门的通行证。简单说,它是一段由密钥(secretKey)和用户标识(userId)按规则计算出来的签名串,SDK 在进房时把它交给服务端,服务端验签通过才放行。所以 userSig 不是密码本身,而是用密码算出来的凭证——密码永远待在服务端,凭证可以下发到客户端。

三个问题逐个回答。

userSig 是什么? 一段带有效期的签名串,和 userId、SDKAppID 绑定。同一个 userId 在不同应用下 userSig 不同,换了密钥之后旧签名立刻失效。这一点很关键:任何时候怀疑密钥泄露,换密钥比换账号简单,旧签名全部作废。

谁来签发? 原则只有一个:密钥不过客户端。测试时可以用控制台的辅助工具手动生成,正式环境必须由自己的后端服务签发——客户端拿着 userId 向后端换 userSig,后端保管 secretKey。这么做即使前端代码被扒,攻击者也拿不到密钥,最多伪造一个已经过期的签名。签发接口本身要做好频率限制,否则有人拿接口刷签名也挺烦。

有效期怎么定? 官方建议的有效期上限是 24 小时,实际按业务节奏选。我们的课堂一节 90 分钟,学生端签发时长设为 2 小时,覆盖一节课加上课前调试;老师端设长一些,避免讲到一半签名过期被踢出房间。有效期不是越长越好:签名越长,泄露之后的可用窗口越宽;太短又会课中掉线。具体规划见下表。

角色 签发时长 考虑因素 过期表现
学生 2 小时 一节课 90 分钟加缓冲 下课前不会掉线
老师 12 小时 连上多节课、中途休息 一天内不用重新登录
助教 4 小时 巡课轮班 换班时重新签发
测试号 尽量短 只为调试方便 严禁长期复用

签发服务部署在云服务器上,部署与子账号权限的具体做法可以参考腾讯云五件套实战里的服务部署章节,这里不展开。只需要记住一句话:签发服务必须是整个平台里最早搭建、最后下线的后端模块。

测试环境与正式环境分开

刚集成时图省事,正式应用和测试 demo 共用一个 SDKAppID,结果吃了两次亏。第一次是调试码率调得猛,把并发时长刷得很难看,账单出来多了一截;第二次更严重——半夜联调时房间号段和正式课堂撞车,把正在上课的老师挤出了房间,家长群里当时就炸了。从此我把环境彻底拆开。

做法很朴素:测试用独立的应用,一个叫 classroom-dev,一个叫 classroom-prod,两套密钥、两套签发服务,部署域名也分开。应用名带 dev 后缀,配置项里一眼能分清,防止改错。测试应用用过期时间长的签名没关系,正式应用一律走短时效签发。

两套环境的具体配置对照如下,迁移到别的项目时照着改就行:

配置项 classroom-dev(测试) classroom-prod(正式)
签名有效期 24 小时,图省事 老师 12 小时,学生 2 小时
签发方式 本地直出,不走后端 后端接口签发,带频率限制
房间号段 固定几个号,随便用 按排课计划动态生成
域名 内网联调域名 备案过的正式域名
监控告警 只看本地日志 接云监控,错误率告警
人员访问 开发全员 仅运维和值班助教

表格里第一行是最容易忽略的:测试图省事用长签名,正式环境千万不能照抄。曾经有个新同事把 dev 的 24 小时签名配置直接复制到 prod,当天就有几十个学生签到了一个长期有效的签名,幸亏发现得早。

环境拆开后还有个意外收获:压测和联调可以放开手脚跑,不用担心污染线上数据,也不用担心把上课的老师挤下麦。后来做新功能演示也都在 dev 环境里录视频,客户验收之前先在测试环境完整走一遍排课流程。测试与正式环境隔离的通用原则,轻量建站实战里讲得更系统,思路完全相通。

最后补一句签发服务的高可用。签发服务挂了等于全员进不了房,它是整个平台单点风险最高的模块。我们给它配了独立告警:接口错误率连续超过阈值就电话通知,同时签发接口做了缓存兜底——同一个 userId 短时间内重复请求,直接返回未过期的旧签名,省掉重复计算。密钥这类敏感配置全部走环境变量注入,不进代码仓库,这样即便仓库权限管不严,密钥也不会跟着代码泄露。

踩坑记录:测试号用着用着突然过期

印象最深的坑发生在联调的第三周。前端同事反馈进房接口偶发报错,我们查了网络、查了 SDK 版本、查了房间号,都没问题。最后发现是测试 userSig 早就过期了——辅助工具生成的测试签名有效期很短,而我们把它写死在了本地配置文件里,前两周能进房是因为恰好赶在有效期窗口内,第三周起每一次进房都是带着过期签名硬闯。报错信息里其实写了解析失败,但当时没养成看鉴权错误的习惯,一拍脑袋先怀疑网络。

解法分三步。第一,本地配置里的 userSig 改成每次启动时重新生成;第二,进房失败的回调里先判断是不是鉴权错误,是的话引导重新签发而不是直接重试,避免带过期签名反复撞门;第三,正式环境里后端签发接口的返回值带上过期时间戳,客户端算着时间提前刷新,而不是等失败了再补救。三步做完,这类报错在监控系统里就绝迹了。

后来复盘,这类问题的根因是把一次性测试凭证当成了长期配置。类似的习惯问题在团队协作里很常见,1Panel 面板实战里关于测试配置管理的章节也反复强调过:凡是有有效期的凭证,都必须有过期提醒机制,而不是靠人来记。

开通之后的第一次验证

服务开完不等于能用。我确认环境可用的方式是先跑通最基本的一条链路:两个浏览器标签页互相看见对方。一个标签填测试号 A,一个填测试号 B,都进同一个房间,A 能看到 B 的画面、B 能听到 A 的声音,就算验证通过。这件小事看起来不起眼,但它一次排除了应用配置、密钥、网络和 SDK 引用四个环节的问题,比写业务页面之前先跑通要踏实得多。

正式开发前的验收点我列了一张表,每个点都要求在本机跑通才动业务代码:

检查点 操作 预期结果
签名可用 测试号进空房间 秒进,无报错
媒体授权 浏览器请求摄像头和麦克风 授权后本地画面出现
双端互通 两个标签页互看对端 双向画面与声音正常
房间隔离 进相邻房间号 互相看不到对方
错误可读 故意用过期签名进房 报错信息能定位到鉴权

第五行是特意加的:很多平台的报错信息对用户不友好,学生看到一串英文直接懵。我们把鉴权错误统一翻译成学生听得懂的话,比如提示重新登录而不是甩出一串错误码。

成本意识:接入阶段别把额度烧光

最后叮嘱一句和钱有关的事。接入联调阶段最浪费的是时长用量:一个测试房挂一下午忘了关,几个并发小时就没了;压测脚本循环进出房,用量翻着倍往上涨。我们在第一个月账单上看到一笔意料之外的开销,就是联调留下的。对策有三条:测试用独立应用(前面说过,用量账单和正式分开看);设一个定时任务,每天晚上自动关掉还在运行的测试房间;压测改为短时脉冲式而不是长时挂机。养成这几个小习惯,接入期的试错成本就可控了,真到了正式上课高峰,额度要留给真正重要的场景。

延伸阅读