直播互动工具接入抖音云指南收藏我的收藏
收藏
我的收藏一、介绍
直播互动工具是以主播为展示主体,提供丰富直播间互动效果的助播工具。互动工具由开发者自主开发,接入平台并开放给抖音主播挂载使用。互动工具支持通过 JS API 接入直播开放能力,包含直播间的用户信息、互动数据(点赞、送礼、评论等)。
直播互动工具会使用到抖音直播间数据,基于抖音侧合规风险考量,互动工具如果需要进行网络请求,需将后端服务部署到抖音云。
抖音云是服务于抖音开放生态的 一站式后端服务托管平台,为应用(小程序、小游戏、小玩法)开发者提供后端服务的开发、部署、运行、监控、运维的一站式开发体验。
- •提升研效:一体机式后端服务托管平台,免登录免鉴权云调用降低接入门槛。首次接入 3-14 人天,迭代减少 0.5 人天起
- •提升安全性:调用链路免费防 DDoS 攻击,就近加速;服务端与抖音开放平台 OpenApi 走内网专线。
- •提升稳定性:通过 Serverless 弹性伸缩的服务、开箱即用的的运维监控等产品能力提高稳定性
二、整体接入流程
接入流程
系统交互
三、分环节说明
为应用开通抖音云并初始化云资源
为应用开通抖音云
选择应用 | 开通抖音云 | 进入「总览页」 |
初始化云资源:新建服务及开通数据库
开发
客户端开发
- •callContainer:发起 http 协议请求到抖音云
- •connectContainer:使用 websocket 协议请求抖音云
兼容性说明
支持在基础库 3.48.0.0 版本以上使用,在各个客户端的版本兼容性如下。
| 抖音 App(安卓/iOS) | 直播伴侣 | IDE |
tt.login | 32.1.0 及以上 | 8.8.0 及以上 | 4.3.2 及以上 |
tt.checkSession | 32.1.0 及以上 | 8.8.0 及以上 | 4.3.2 及以上 |
tt.createCloud | 32.1.0 及以上 | 8.8.0 及以上 | 4.3.2 及以上 |
cloud.callContainer | 32.1.0 及以上 | 8.8.0 及以上 | 4.3.2 及以上 |
cloud.connectContainer | 32.1.0 及以上 | 8.8.0 及以上 | 4.3.2 及以上 |
在代码中添加对基础库版本的兼容性判断逻辑:
canUseCommand(version1) { const compareVersion = '3.48.0.0'; const v1 = version1.split('.').map(Number); const v2 = compareVersion.split('.').map(Number); for (let i = 0; i < v1.length; i++) { if (v1[i] > v2[i]) { return true; } else if (v1[i] < v2[i]) { return false; } } return true; },
在使用 tt.login, tt.checkSession, tt.createCloud, cloud.callContainer, cloud.connectContainer 前使用上述判断方法,如下:
const systemInfo = tt.getSystemInfoSync(); if(this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.login) { tt.login({ success: (res) => { }, fail: (res) => { }, }); }
const systemInfo = tt.getSystemInfoSync(); if(this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.createCloud) { const cloud = tt.createCloud({ serviceID: 'xxx', envID: 'xxx' }); // 创建 cloud 实例后即可使用 callContainer 和 connectContainer cloud.callContainer() cloud.connectContainer() }
最佳实践 WIP
app.js 中初始化 cloud
在 app.js 的 onLaunch 方法中可全局实例化一个 cloud 实例,后续通过该 cloud 实例调用 callContainer 和 connectContainer。全局也仅需调 1 次 tt.login 即可,代码如下:
App({ canUseCommand(version1) { const compareVersion = '3.48.0.0'; const v1 = version1.split('.').map(Number); const v2 = compareVersion.split('.').map(Number); for (let i = 0; i < v1.length; i++) { if (v1[i] > v2[i]) { return true; } else if (v1[i] < v2[i]) { return false; } } return true; }, onLaunch: async function () { const systemInfo = tt.getSystemInfoSync(); if (this.canUseCommand(systemInfo.SDKUpdateVersion) && tt.createCloud && tt.login && tt.checkSession) { const cloud = tt.createCloud({ envID: "xxx", // 抖音云环境 ID serviceID: "xxx", // 抖音云服务 ID }); let isLogin = false; try { await this.handleCheckSession(); isLogin = true; } catch (err) { console.log(`session 已过期,需要重新登录`, err); const res = await this.handleLogin(); isLogin = res.isLogin; } this.globalData = { cloud, isLogin, }; }else { console.log('抖音云暂无法使用'); } }, handleLogin() { return new Promise((resolve) => { return tt.login({ success: (res) => { console.log("login success", res); resolve(res); }, fail: (err) => { console.log("login err", err); resolve({ isLogin: false, errMsg: err.errMsg, }); }, }); }); }, handleCheckSession() { return new Promise((resolve, reject) => { return tt.checkSession({ success: (res) => { console.log("checkSession success", res); resolve(res); }, fail: (err) => { console.log("checkSession fail", err); reject(err); }, }); }); }, });
备注:若在首页 onload 时需要调用 callContainer 和 connectContainer。 可将上述 onLaunch 里的逻辑移步至首页的 onLoad 中。在拿到 cloud 实例后再去调用 callContainer 或者 connectContainer。
调用云托管服务(cloud.callContainer)
开发者使用 cloud.callContainer 可调用部署在抖音云上的 http 服务接口,如下所示:
// 从全局获取 cloud 实例并调用 callContainer if (getApp().globalData && getApp().globalData.cloud) { const cloud = getApp().globalData.cloud; cloud.callContainer({ // 请改成实际业务path path: 'xxx', init: { method: 'GET', header: { 'content-type': 'application/json', }, timeout: 60000,//ms }, success: (res) => { console.log('callContainer success res', res); }, fail: (failRes) => { console.log('callContainer fail res', failRes); } }) } else { console.log('抖音云 callContainer 暂无法使用'); }
在服务端接口 header 中会默认注入如下参数,websocket 注入参数相同。
{ 'x-tt-serviceid': 'xxx', // 服务ID 'x-forwarded-for': 'XXX', // ip 地址 'x-tt-appid': 'xxx', // appid 'x-tt-envid': 'xxx', // 服务ID 'x-tt-openid': 'xxx', // 登录情况下注入主播的 openid }
调用 webSocket(cloud.connectContainer)
以下为客户端代码,服务端开发参考 服务端使用云托管 webSocket
// websocket 使用前提为必须登录 if (getApp().globalData && getApp().globalData.cloud && getApp().globalData.isLogin) { const cloud = getApp().globalData.cloud; cloudSocketTask = cloud.connectContainer({ path: "/xxx", //请填写实际业务path success: (res) => { // 创建成功的回调 console.log("websocket创建成功", res); }, fail: (res) => { // 创建失败的回调 console.log("websocket 创建失败", res); }, complete: (res) => { // 创建完毕的回调 console.log("websocket 创建完毕", res); }, }); cloudSocketTask.onOpen(() => { // 此时表示 websocket 已经处于 open 状态 console.log("WebSocket 已连接"); cloudSocketTask.send({data:'hello'}); }); cloudSocketTask.onClose(() => { // 此时表示 websocket 已经处于 closed 状态 console.log("WebSocket 已断开"); }); cloudSocketTask.onError((error) => { // 此处表示 websocket 有错误发生 console.error("WebSocket 发生错误:", error); }); cloudSocketTask.onMessage((message) => { // 每次 WebSocket 发送的信息 console.log("websocket 下行消息", message); }); }else { console.log('抖音云 websocket 不可用'); }
服务端开发
部署到 dev 开发环境
基于行业运营规则,dev 开发环境仅限 IDE 开发时进行调用,抖音 App 及直播伴侣的线上流量无法访问。
容器服务部署 | 函数服务部署 |
IDEA 插件支持一键部署到 dev 开发环境 | 函数服务可使用 抖音云 cli 部署 |
调试
自测接口
联调接口
容器服务 | 函数服务 |
|
|
4.3 真机调试
在 IDE 点击「预览」or「真机调试」,生成调试二维码,使用直播间「调试悬浮球」扫调试二维码,然后开始测试
IDE 点击「预览」or「真机调试」 | 使用直播间「调试悬浮球」扫调试二维码 |
部署到 prod 生产环境
dev/prod 环境是独立的 2 套环境,建议在 dev 环境验证后再发布到 prod 环境,避免线上故障。prod 环境提供更多特性支持,如 事件预警、告警等能力。
基于行业运营规则,抖音 App 及直播伴侣的线上流量仅限访问 prod 生产环境,无法请求 dev 开发环境。提审版本需要注意指定调用 prod 生产环境。
选择代码 | 部署发布 | 灰度上线 | 添加授权访问路径 |
prod 环境仅支持部署 dev 环境已发布成功的版本。请先在 dev 环境发布验证完后,再部署到 prod 环境。 | 构建并部署 | 灰度时,可查看灰度版本及线上版本的监控、日志、实例详情。 调整流量到 100% 后完成全量上线。 |
运维
监控 | 服务日志 | 添加告警 | 事件预警 |
| 在服务端代码中完善日志输出,用于线上异常定位,详情见日志查询 | | 抖音云支持开发者配置事件预警规则,感知高热事件,提前介入处理避免故障的发生。开发者可在总览页面观察应用监控、环境调用量监控,实时感知流量。 应用监控及流量突增事件预警 暂不支持互动工具,预期 11 月底支持。 |
查看账单并充值开票
四、最佳实践
云服务资源配置推荐
| 推荐配置 | 案例: |
服务 | 实例数量设置 0-10,无流量下会自动缩容到 0,当并发数增长后会自动扩充实例数量。 缩容到 0 后首次调用会触发冷启动,设置最小实例为 1 可消除冷启动影响 | 以下配置适用于 QPS 峰值 200+,云服务月销近 200 元
可选
|
存储 | 开通后系统默认会注入高负载告警规则,收到告警后可在控制台进行升配。
|
五、常见问题
后端服务是否一定要部署在抖音云?
直播互动工具会使用到抖音直播间数据,基于抖音侧合规风险考量,互动工具如果需要进行网络请求,需将后端服务部署到抖音云。
上线前如何验证 prod 生产环境?
目前 prod 生产环境流量仅限抖音 App 及直播伴侣的线上流量访问,可在业务中做灰度逻辑进行验证,验证完成后再全量。
真机调试请求失败
真机调试 属于调试流量,目前仅支持请求 dev 开发环境。
访问接口 403
对于需要对外网提供接口的服务,请打开外网入流量开关,并添加授权外网访问的路径,避免内网接口被外网调用产生越权。详情外网流量
下线互动插件后关闭抖音云服务
步骤 | 说明 |
关闭组件、删除服务后将不再扣费 | |
账号余额提现 | 开通按量付费产品后,账号将会预留 100 元不可提现。 你需要先关闭组件、删除服务后再联系我们为您退订开通的云产品,退订后将不再预留 100 元。 |