抖音开放平台Logo
开发者文档
控制台

弹幕玩法接入抖音云服务指南
收藏
我的收藏

一、介绍​

弹幕玩法是基于抖音直播场景的新型实时互动内容。弹幕玩法由开发者自主开发,接入平台并开放给抖音主播挂载使用。​
弹幕玩法由「主播弹幕玩法客户端」和「开发者后端服务」 2 部分构成,「开发者后端服务」用于从抖音开放平台接收直播间点赞、送礼、评论的指令,并通过 webscoket 长链接实时推送到玩法客户端。厂商需要至少配置 1 个专职后端来搭建后端服务,在首次接入和后续上线运维中,开发者会面临着许多业务逻辑开发外的工作及挑战。​
抖音云服务面向直播弹幕小玩法提供了解决方案,助力开发者专注业务开发,可降低开发成本(首次接入 3-14 人天,迭代减少 0.5 人天起),提升稳定性(指令推送到开发者服务的失败率降低 90%,时延降低 60%),云服务成本降低 10-30%。已支持上百款弹幕玩法入驻。​
后端服务搭建上的问题及抖音云解决方案​
问题​
抖音云解决方案​
开发者接入收益​
首次接入成本​
接收平台指令推送需要申请域名并备案(7 -14 天起)​
免域名,直接走内网推送指令。​
无需申请域名及备案,减少备案 7-14 人天
搭建指令实时推送到主播玩法客户端的 websocket 长链接链路,研发及维护成本高​
提升接入效率​
    提供 Unity SDK 接入​
    支持 websocket 长链接网关​
    免 token 换取直播间信息​
    免鉴权调用 OpenAPI​
首次开发减少 3-14 人天,运维成本减少 3 人天,每次迭代减少 0.5 人天起
难以预估上线后的并发数,不知道该如何配置服务器​
无需提前预估服务器规格,服务根据并发弹性扩缩容​
云服务成本减少 10-30%​
上线后运维​
流量突增后服务宕机导致业务中断​
服务根据并发数弹性扩缩容,轻松应对流量突增​
业务不再宕机,从 1h->0​
走公网推送指令不可靠消息丢失,时延高​
走内网推送指令到开发者后端服务,低延迟高可靠。​
指令推送到开发者服务的失败率降低 90%,时延降低 60%​
线上异常发现及定位难,缺少日志、告警等完善的运维工具。​
完善的运维能力,监控、告警、日志​
无需搭建运维基础设施,减少 3 人天,提升定位问题效率​
深度与弹幕玩法业务场景结合,支持免登录、免鉴权调用 OpenAPI,支持免域名走内网专线推送指令到开发者服务,开发者服务推送给抖音云网关进行指令下发到主播玩法客户端。​

二、接入要求​

面向「弹幕玩法」类目开放接入。​
已支持开发者自行在弹幕玩法控制台配置走内网专线推送指令到抖音云。详情

三、接入流程​

入驻抖音云​

前往抖音云控制台入驻后,在「总览页」完成「快速体验」可获得 180 元代金券(30 天有效期)用于深度体验。同一企业主体仅限发放一次。​
选择应用​
开通抖音云​
进入「总览页」​

创建后端服务资源与存储组件,配置抖音回调​

步骤​
详情​
创建服务​
我们提供了 2 类服务可供选择​
    1.容器服务:通过 dockerfile 构建镜像,支持所有语言和框架。参考快速部署服务
    2.函数服务:支持 Node.js 在线开发、运行、部署,详情云函数开发指南
开通存储组件​
在组件中心选择所需的存储组件用于弹幕玩法的数据存储,详情 缓存数据库 Redis
配置抖音回调​
先在 dev 开发环境添加回调地址后,更新直播间数据能力开发配置。​

服务端开发​

服务端开发全景图​

目前直播小玩法整体的交互逻辑如下,详情接入与开发_直播小玩法

小玩法开发者需要关注的几个核心环节​

核心环节​
对应步骤​
具体逻辑​
服务器部署在第三方云服务上时​
开发者后端部署在抖音云上时​
置换直播间信息​
3、4、5、8​
玩法客户端需要将 token 传给开发者服务器(步骤 3),开发者服务器通过 openAPI 访问平台服务器获取直播信息(步骤 4),拿到 room_id 并将 room_id 返回给玩法客户端(步骤 5/8)​
    开发者需要自行维护实现对应逻辑​
    走公网传输存在 token 暴露的风险,导致直播被攻击​
    玩法客户端启动时传入抖音云 Unity SDK 即可,通过 Unity SDK 请求服务器时,后端服务器即可在请求头拿到直播间信息;​
    网络请求走内网专线,免 token 泄露风险,免 DDos 攻击​
    使用示例可以参考接入代码示例中/start_game接口​
置顶礼物与开启推送任务​
6、7​
开发者需要通过 openAPI 访问平台服务器,设置置顶礼物(步骤 6)和开启推送任务(步骤 7),以便于来接收玩法指令推送;​
    开发者请求 openAPI 时需要 access_token,开发者需要自行维护该字段的生命周期;​
    走公网传输存在 access_token 暴露的风险,导致玩法业务被攻击​
    抖音云服务请求 openAPI 时无需指定 access_token,节省开发成本;​
    请求走内网专线,免恶意黑产攻击,更稳定​
    使用示例可以参考接入代码示例中/start_game接口​
接收玩法指令推送并推送到玩法客户端​
12、13、14​
开发者通过 HTTP 接收平台的玩法指令推送(步骤 12),并将玩法指令推送到玩法客户端(步骤 13);并轮询查询失败数据,并补推到玩法客户端(步骤 14)​
    指令数据走公网传输,存在泄露的风险​
    开发者需要自行实现推送能力,开发成本高​
    通过抖音云提供的 websocket 网关完成指令推送,接入简单,更多接入详情参考:​
    使用示例可以参考接入代码示例中的/live_data_callback接口​
世界排行榜能力​
部分玩法开发者业务上有全局排行榜能力,需要每个结算周期​
    抖音云提供了定时触发器能力,快速实现定时调度能力,详情见触发器

通过抖音云 websocket 网关推送指令到客户端​

小玩法服务器在收到直播间的互动数据(点赞、弹幕、送礼)后,开发者经过业务逻辑处理后,需要将对应数值信息推送到客户端,客户端完成动画渲染; ​
目前业界目前比较通用的方案是使用 websocket 协议来完成服务器向客户端的数据实时下推,但是开发者在使用 websocket 功能时往往面临如下问题: ​
    消息延迟:主播端的网络环境变差时,原生 websocket 并不会立即感知,会导致底层的 tcp 数据包一直在重传,主播端的表现就是直播间的互动数据客户端迟迟没有收到,引发主播、观众投诉; ​
    消息丢失:websocket 底层是基于可靠的 tcp 协议,但是当主播端网络抖动,导致连接断开;客户端需要及时感知此类事件并及时发起重连,而重连期间的消息,服务端需要有对应的存储机制,保证这段时间的消息不会丢失,否则引发用户投诉,甚至退款; ​
    长连接服务器变更:服务端如果有业务逻辑变更,因为服务端有长连接服务器,所以需要平滑发布的能力,否则会导致发布期间连接断开,进而消息丢失; ​
    动态扩缩容能力:传统 websocket 服务器,如果业务上遇到上下行推送的消息量激增,是无法通过水平扩容来解决的;开发者需要自行针对此类问题定制化扩缩容策略和热点问题; ​
针对上述传统 websocket 的问题,抖音云提供了 websocket 网关+Unity SDK 托管了长连接的管理和维护能力,开发者服务器只需要和抖音云网关之间通过 HTTP 请求的形式交互,就可以实现 websocket 消息的收发,并且具有: ​
    消息秒级必达且不丢失:抖音云 websocket 网关保证消息推送秒级必达并且传输耗时小于 100ms,开发者可以更专注于业务逻辑开发; ​
    服务发布和动态扩容能力:开发者服务器通过 HTTP 请求和抖音云网关交互,长连接交由抖音云网关管理,开发者无需关心服务器发布期间连接断开的问题,并且服务器可以按照流量进行动态扩缩容,应对业务流量激增更从容。​
更多接入详情,参考:服务端使用 websocket 能力

代码示例​

代码示例接口说明​

可参考以下代码示例了解如何在抖音云搭建弹幕玩法的后端服务,该示例仅包含一个最小可执行的 Demo,真实用于线上环境请补齐业务相关逻辑并进行联调验证,如指令存储,排行榜结算等。​
示例代码接口说明​
接口​
接口调用来源​
接口功能​
建议开发者添加的业务逻辑​
/start_game​
主播玩法客户端​
外网访问需要先添加授权访问路径,未配置调用接口将会返回 403。详情见 外网流量
开始玩法对局可通过 callContainer 调用该接口,会调用弹幕玩法 OpenAPI 开始指令推送任务​
    1.存储对局的信息​
    2.礼物置顶
/finish_game​
一局玩法结束时可通过 callContainer 调用该接口,做榜单排行和结算等逻辑。​
    1.开发需要自行处理榜单和结算逻辑​
/websocket_callback​
抖音云 websocket 监听的回调函数,客户端建连/上行发消息都会走到该 HTTP 回调函数中。connectContainer 传入该 path。​
    1.接收到客户端上行消息和下行后,服务端的处理逻辑​
/live_data_callback​
抖音内网专线回调​
请参考如下文档完成抖音回调的路径配置:直播间数据走内网专线推送到抖音云
注:该路径只支持内网调用,因此无需担心外网伪造请求推送指令。同时支持开发者通过请求 headers 中个 x-tt-source:xxx 来校验来源是弹幕玩法。​
通过抖音云服务接收直播间数据,内网专线加速+免域名备案。​
    1.服务端数值计算与存储​

JAVA 版本代码示例​

针对弹幕玩法场景,抖音云提供了 java 版本 springboot 的服务端示例,更完整的项目地址参考:抖音云 x 直播小玩法服务端 java demo;核心文件接口代码解释如下:​
接口​
示例代码​
功能解释​
/start_game​
@PostMapping(path = "/start_game") public JsonResponse callContainerExample(HttpServletRequest httpRequest) { // 开发者可以直接通过请求头获取直播间信息,无需自行通过token置换 // 应用id String appID = httpRequest.getHeader("X-TT-AppID"); // 直播间id String roomID = httpRequest.getHeader("X-Room-ID"); // 主播id String anchorOpenID = httpRequest.getHeader("X-Anchor-OpenID"); // 主播头像url String avatarUrl = httpRequest.getHeader("X-Avatar-Url"); // 主播昵称 String nickName = httpRequest.getHeader("X-Nick-Name"); log.info("appID: {}, roomID: {}, anchorOpenID: {}, avatarUrl: {}, nickName: {}", appID, roomID, anchorOpenID, avatarUrl, nickName); // 调用弹幕玩法服务端API,开启直播间推送任务,开启后,开发者服务器会通过/live_data_callback接口 收到直播间玩法指令 List<String> msgTypeList = new ArrayList<>(); msgTypeList.add("live_like"); msgTypeList.add("live_comment"); msgTypeList.add("live_gift"); msgTypeList.add("live_fansclub"); for (String msgType : msgTypeList) { boolean result = startLiveDataTask(appID, roomID, msgType); if (result) { log.info("{} 推送开启成功", msgType); } else { log.error("{} 推送开启失败", msgType); } } JsonResponse response = new JsonResponse(); response.success("开始玩法对局成功"); return response; }
客户端在初始化后通过 callContainer 请求服务器对应 path,服务器可以直接在请求头中获取直播间相关信息,开发者无需通过 token 置换对应直播间信息​
private boolean startLiveDataTask(String appID, String roomID, String msgType) { // example: 通过java OkHttp库发起http请求,开发者可使用其余http访问形式 OkHttpClient client = new OkHttpClient(); String body = new JSONObject() .fluentPut("roomid", roomID) .fluentPut("appid", appID) .fluentPut("msg_type", msgType) .toString(); Request request = new Request.Builder() .url("http://webcast.bytedance.com/api/live_data/task/start") // 内网专线访问小玩法openAPI,无需https协议 .addHeader("Content-Type", "application/json") // 无需维护access_token .post( okhttp3.RequestBody.create( MediaType.get("application/json; charset=utf-8"), body ) ) .build(); try { Response httpResponse = client.newCall(request).execute(); if (httpResponse.code() != 200) { log.error("开启推送任务失败,http访问非200"); return false; } LivePlayAPIResponse livePlayAPIResponse = JSON.parseObject(httpResponse.body().string(), LivePlayAPIResponse.class); if (livePlayAPIResponse.getErrNo() != 0) { log.error("开启推送任务失败,错误信息: {}", livePlayAPIResponse.getErrorMsg()); return false; } } catch (IOException e) { log.error("开启推送任务异常,e: {}", e.getMessage(), e); return false; } return true; }
    通过调用开启推送任务来开启任务,任务开启后玩法指令会通过/live_data_callback回调过来​
    利用了抖音云内网专线加速的能力,访问无需指定访问凭证(即 access_token),并且无需使用 https 协议;​
    实例代码中使用了 java OkHttp 库来发起 http 请求,开发者可以使用其余 http 访问形式​
/websocket_callback​
@RequestMapping(path = "/websocket_callback", method = {RequestMethod.POST, RequestMethod.GET}) public JsonResponse websocketCallback(HttpServletRequest request) { String eventType = request.getHeader("x-tt-event-type"); switch (eventType) { case "connect": // 客户端建连 case "disconnect": { // 客户端断连 } case "uplink": { // 客户端上行发消息 } default: break; } JsonResponse response = new JsonResponse(); response.success("success"); return response; }
    客户端在调用 connectContainer 时传入该接口 path,当连接建立/断开/上行发送消息到服务器时,抖音云网关会将相关信息转发到开发者服务器对应的 path 上,开发者通过请求头x-tt-event-type来区分属于哪种数据类型​
/live_data_callback​
@PostMapping(path = "/live_data_callback") public JsonResponse liveDataCallbackExample( @RequestHeader("X-Anchor-OpenID") String anchorOpenID, @RequestHeader("x-msg-type") String msgType, @RequestBody String body) { List<LiveDataModel> liveDataModelList = JSON.parseArray(body, LiveDataModel.class); liveDataModelList.forEach(liveDataModel -> pushDataToClientByDouyinCloudWebsocket(anchorOpenID, liveDataModel.getMsgID(), msgType, body) ); JsonResponse response = new JsonResponse(); response.success("success"); return response; } private void pushDataToClientByDouyinCloudWebsocket(String anchorOpenId, String msgID, String msgType, String data) { // 这里通过HTTP POST请求将数据推送给抖音云网关,进而抖音云网关推送给主播端 OkHttpClient client = new OkHttpClient(); Map<String, String> bodyMap = new HashMap<>(); bodyMap.put("msg_id", msgID); bodyMap.put("msg_type", msgType); bodyMap.put("data", data); // bodyMap.put("extra_data", ""); String bodyStr = JSON.toJSONString(bodyMap); Request request = new Request.Builder() .url("http://ws-push.dycloud-api.service/ws/live_interaction/push_data") .addHeader("Content-Type", "application/json") .addHeader("X-TT-WS-OPENIDS", JSON.toJSONString(Arrays.asList(anchorOpenId))) .post( okhttp3.RequestBody.create( MediaType.parse("application/json; charset=utf-8"), bodyStr ) ) .build(); try { Response httpResponse = client.newCall(request).execute(); log.info("websocket http call done, response: {}", JSON.toJSONString(httpResponse)); } catch (IOException e) { log.error("websocket http call exception, e: ", e); } }
    /start_game示例中开启推送任务后,直播间指令数据即通过该接口发送到开发者的服务器上​
    收到数据后,这里直接通过 HTTP 将数据推送给抖音云网关,抖音云网关将数据实时推送给客户端。​

Node.js 云函数接入示例​

如果开发者是 Node.js 技术栈,抖音云提供了 Node.js TypeScript 版本云函数的接入示例,详情云函数开发指南。模板代码如下:​
新建云函数项目后在云函数项目中创建文件,文件名称对应调用路径。​
接口​
示例代码​
功能解释​
/start_game​
/** * @param params 调用参数,HTTP 请求下为请求体 * @param context 调用上下文 * * @return 函数的返回数据,HTTP 场景下会作为 Response Body * */ interface Data { err_no?: number; err_msg?: string; data?: any; } import { dySDK } from '@open-dy/node-server-sdk'; export default async function (params: any, context: any) { let serviceContext = dySDK.context(context); let { appId, roomId, anchorOpenId, avatarUrl, nickName } = serviceContext.getContext(); context.log(`appId is ${appId}, roomId is ${roomId}, anchorOpenID is ${anchorOpenId}, avatarUrl is ${avatarUrl}, nickName is ${nickName}`); try { let msgTypes = ['live_comment', 'live_like', 'live_gift', 'live_fansclub']; for (const msgType of msgTypes) { await startLiveDataTask(appId, roomId, context, msgType); } } catch (err) { context.log(err); } };
    客户端在初始化后通过 callContainer 请求服务器对应 path,服务器可以直接在请求头中获取直播间相关信息,开发者无需通过 token 置换对应直播间信息​
async function startLiveDataTask(appId: string, roomId: string, context: any, msgType: string) { const serviceContext = dySDK.context(context); try { let param = { roomid: roomId, appid: appId, msg_type: msgType }; // 调用弹幕玩法服务端API,开启直播间推送任务,开启后,开发者服务器会通过/live_data_callback_example接口 收到直播间玩法指令 const res: Data = await serviceContext.openApiInvoke({ url: "https://webcast.bytedance.com/api/live_data/task/start", method: "POST", // openAPI 调用方式, headers: { "Content-Type": "application/json" }, // openAPI 请求头 data: param }); if (res?.err_no === 0) { return res?.data; } context.log('开启评论推送任务失败,错误信息', res?.err_msg); return res?.err_msg; } catch (err) { context.log('启评论推送任务失败,错误信息为', err); return 'error'; } }
    通过调用开启推送任务来开启任务,任务开启后玩法指令会通过/live_data_callback回调过来​
    利用了抖音云内网专线加速的能力,访问无需指定访问凭证(即 access_token),并且无需使用 https 协议;​
    实例代码中使用了 @open-dy/node-server-sdk 中的 openAPI 调用方法,开发者可以使用其余 http 访问形式。​
/websocket_callback ​
/** * 抖音云websocket监听的回调函数,客户端建连/上行发消息都会走到该HTTP回调函数中 ref:https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/websocket-guide/websocket#%E5%BB%BA%E8%BF%9E%E8%AF%B7%E6%B1%82 */ export default async function (params: any, context: any) { let eventType = context.headers['x-tt-event-type']; switch (eventType) { // 客户端建连 case "connect": context.log('connect'); break; // 客户端断连 case "disconnect": { context.log('disconnect'); break; } // 客户端上行发消息 case "uplink": { context.log('uplink', params.toString()); break; } default: break; } return "success"; };
    客户端在调用 connectContainer 时传入该接口 path,当连接建立/断开/上行发送消息到服务器时,抖音云网关会将相关信息转发到开发者服务器对应的 path 上,开发者通过请求头x-tt-event-type来区分属于哪种数据类型​
/live_data_callback​
/** * 通过抖音云服务接受直播间数据,内网专线加速+免域名备案 * 通过内网专线会自动携带X-Anchor-OpenID字段 * ref: <a href="https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/danmu-callback">...</a> */ import { dySDK } from '@open-dy/node-server-sdk'; export default async function (params: any, context: any) { const anchorOpenID = context.headers['x-anchor-openid']; const msgType = context.headers['x-msg-type']; let body = { msg_id: params[0].msg_id, msg_type: msgType, data: JSON.stringify(params) } // 推送失败时,开发者可增加相关重试逻辑再次调用pushDataToClientByDouyinCloudWebsocket。 await pushDataToClientByDouyinCloudWebsocket(body, anchorOpenID, context); return "success"; }; /** * 使用抖音云websocket网关,将数据推送到主播端 * ref: <a href="https://developer.open-douyin.com/docs/resource/zh-CN/developer/tools/cloud/develop-guide/websocket-guide/websocket#%E4%B8%8B%E8%A1%8C%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81">...</a> */ async function pushDataToClientByDouyinCloudWebsocket(params: any, anchorOpenID: string, context: any) { const serviceContext = dySDK.context(context); try { const res = await serviceContext.openApiInvoke({ url: "http://ws-push.dycloud-api.service/ws/live_interaction/push_data", method: "POST", // openAPI 调用方式, headers: { "Content-Type": "application/json",'X-TT-WS-OPENIDS': JSON.stringify([anchorOpenID]) }, // openAPI 请求头 data: params }); context.log("抖音云弹幕推送res", res); return res; } catch (err) { context.error('抖音云弹幕推送错误err', err); return err; } }
    /start_game示例中开启推送任务后,直播间指令数据即通过该接口发送到开发者的服务器上​
    收到数据后,这里直接通过 HTTP 将数据推送给抖音云网关,抖音云网关将数据实时推送给客户端。​
/finish_game​
/** * @param params 调用参数,HTTP 请求下为请求体 * @param context 调用上下文 * * @return 函数的返回数据,HTTP 场景下会作为 Response Body * */ export default async function (params: any, context: any) { return '结束玩法成功'; };
    一局玩法结束时可通过 callContainer 调用该 finish_game 方法做榜单排行和结算等逻辑。​

客户端接入​

客户端接入参考:直播小玩法-Unity SDK

客户端与服务端联调​

当开发者本地完成客户端与服务端开发后,会进入测试联调的阶段,可以参考:直播小玩法-测试与提审;但是当通过直播伴侣小扳手启动测试时,往往会因为挂机直播被封禁、服务端代码修改需要频繁部署等原因,导致测试阶段困难重重;针对这些情况抖音云推出了本地调试能力,开发者无需使用真实 token,并且可以在本地完成开发测试联调:​
    直播小玩法控制台 openAPI 自测工具暂时不支持请求抖音云服务​
    当服务部署在抖音云上,开发者可以通过本地 HTTP 请求服务器的形式来模拟直播间数据推送,抖音云服务提供了默认域名的访问方式来支持测试调试,具体可见:外网流量
客户端​
Unity SDK 中 DYCloud 初始化参数可指定联调的后端服务​
    isDebug 是否调试​
    IP 后端服务的调试 IP 地址,建议提供局域网环境 IP​
服务端​
后端使用 抖音云 IDEA 插件在本地启动后端服务,提供 IP 地址给客户端​

部署到抖音云正式环境,发布弹幕玩法​

「直播间数据能力开发配置」仅支持推送到一个目标地址,建议开发阶段先配置到抖音云的 dev 开发环境测试验证,验证通过后需要在 prod 线上环境部署。上线前建议完成如下配置​
dev/prod 环境是独立的 2 套环境,建议在 dev 环境验证后再发布到 prod 环境,避免线上故障。prod 环境提供更多特性支持,如 事件预警、告警等能力。​
checklist​
操作说明​
内网指令推送配置​
先在 prod 生产环境添加回调地址后,更新直播间数据能力开发配置。​
客户端代码检查​
需在客户端初始化 DYCloud 时关闭本地调试模式(isDebug 设置为 false 或者不传),且不传入 IP 地址。​
传入线上真实 token。获取方式可参考上述 Unity SDK 接入示例。​
事件预警​
抖音云支持开发者配置事件预警规则,感知高热事件,提前介入处理避免故障的发生。开发者可在总览页面观察应用监控、环境调用量监控,实时感知流量。 应用监控及流量突增事件预警
服务日志​
在服务端代码中完善日志输出,用于线上异常定位,详情见日志查询
配置告警​
抖音云默认会对 prod 环境注入告警,开发者可根据自身需要添加更多规则,详情见告警

自查工具​

「直播间数据能力开发配置」仅支持推送到一个目标地址,配置到 prod 生产环境后,如需测试验证可使用自查工具,自查工具的测试数据将推送到 dev 开发环境上的服务。​
操作​
使用自查工具​
编辑自查工具配置​
截图​

四、最佳实践​

资源配置推荐​

详情见产品定价。​
推荐配置​
案例: ​
服务​
实例数量设置 1-10,会常驻 1 个实例,当并发数增长后会自动扩充实例数量。​
以下配置适用于 150+主播同时挂载开播,QPS 峰值 200+。云服务月销近 200 元​
    1.服务​
    a.函数服务 5 元​
    b.日志服务 10 元​
    2.Redis 2 台 180 元​
    a.dev 环境配置「256MB*2 节点」 包年包月 20 元​
    b.prod 环境配置「2GiB * 2 节点」 包年包月 160 元​
存储​
开通后系统默认会注入高负载告警规则,收到告警后可在控制台进行升配。​
    Redis: ​
    dev 开发环境「256MB*2 节点」 包年包月 20 元​
    prod 线上环境「1GiB * 2 节点」 包年包月 80 元​
    MySQL:「1 核 2GB 内存 20GB」 包年包月 264 元​
    MongoDB:「1 核 2GB 内存 20GB」 包年包月 297 元​

五、FAQ​

访问接口 403​

对于需要对外网提供接口的服务,请打开外网入流量开关,并添加授权外网访问的路径,避免内网接口被外网调用产生越权。详情外网流量

多个弹幕玩法希望复用一套应用后端服务​

抖音云支持资源复用,通过 A 玩法开通抖音云搭建后端服务,然后复用服务给 B、C、D 等玩法。再在 B、C、D 等玩法中配置推送到 A 的服务中,即可实现不同玩法复用同一个后端服务器与存储资源。​

下线弹幕玩法后关闭抖音云服务​

步骤​
说明​
关闭组件、删除服务后将不再扣费​
账号余额提现​
开通按量付费产品后,账号将会预留 100 元不可提现。​
你需要先关闭组件、删除服务后再联系我们为您退订开通的云产品,退订后将不再预留 100 元。​