Feed直玩订阅(抖音)
业务场景
抖音小游戏:为了提升游戏曝光,推荐流直出小游戏。
流程图
调用示例
用户直玩订阅
检查用户订阅情况
- 未订阅,提示用户完订阅活动
- 已订阅
// 订阅状态查询
var checkFeedParams = {
type: 'play', // play=直玩(该场景必传scene)
scene: 1,
onSuccess: (isCheck) => {
if (!isCheck) {
// 用户没有订阅,需提供入口,让用户点击订阅【点击事件不继承,需重新发起】
}
},
onFailed: (errorInfo) => {
// 失败
},
};
SDKManager.checkFeedSubscribeStatus(checkFeedParams);
用户未订阅
点击调用订阅弹窗:
- 不要和一般订阅
requestSubscribeMessage
同时调用,会存在冲突导致其中一个 API 失效 - 一般订阅 和 直玩订阅的弹窗效果不一致,请注意甄别
- 直玩订阅所有弹窗都能正常弹出才算验收成功
// 订阅
var subscribeParams = {
type: 'play', // play=直玩(该场景必传scene)
scene: 1, // 一次只能订阅一个
contentIDs: ['xxxx', 'xxxx'],
onSuccess: (requestStatus) => {
// requestStatus 用户的订阅结果(true为成功,false为失败)
},
onFailed: (errorInfo) => {
// 失败
},
};
SDKManager.requestFeedSubscribe(subscribeParams);
直玩订阅弹窗
Feed 推流进入
检查用户是否 Feed 推流进入
- 非 Feed 推流进入,正常流程进入游戏
- Feed 推流进入,根据启动参数
feed_game_scene
,进入到对应的场景,然后上报到渠道
const launchInfo = SDKManager.getLaunchOptions();
// 判断是Feed直玩启动
if (/3041$/g.test(launchInfo.scene)) {
const { feed_game_scene, feed_game_extra, feed_game_channel } = launchInfo.query;
// feed_game_scene 场景值,对应订阅的scene
// feed_game_extra - 开发者自定义字段,通过服务端进行赋值
// feed_game_channel - Number类型,1: 访客版;2:获客版(新用户进入)
}
游戏就绪上报: Feed 推流进入
SDKManager.reportChannelGameInfo({ eventType: 6 });
服务端推送
CP 服务端需要提供一个查询用户就绪场景接口给到 SDK,具体的实现请看服务端接入文档-抖音直玩能力
涉及 API
客户端:
服务端:
FAQ
Q: 多个 content_id 都满足的情况下,推送哪个给用户?
A: 同一个 scene,多 content_id 的情况下,按返回的顺序定优先级(位置越前,优先级越高),测试时候可单独每一个一种场景,保证验收通过
Q: 用户什么情况下会收到抖音的推送?
A: 用户订阅后,退出游戏,在抖音界面刷视频的时候,如果条件满足会收到抖音的推送
Q: 服务端提供查询接口有什么要求?
A: CP 侧的服务端 + SDK 侧服务端,查询的整体时间不能超过 300 毫秒
Q: 如果调试该功能?
A: 需要使用对应的 debug 版抖音去验收,注意 IOS 目前仅能申请两台设备作为测试验收,安卓目前没限制
Q: 验收没通过,没出现弹窗?
A: 申请的场景全部都要触发对应的弹窗 UI,如果是因为已经订阅了没有出现弹窗的,去 右上角-->设置页-->游戏进入提醒-->关闭
Q: 测试过程中,没有出现游戏卡?但有提示【游戏正在预启动】等 toast 提示
A: 一般是由于用户操作过快导致的,为保证游戏卡正常出现,在上述提示出现的时候,请不要请滑动视频,直到出现场景加载完成提示,就可以正常往下刷。因为抖音下发了游戏卡后,插入到当前视频下面,例如插入到第 8 个位置,如果刷到第 7 个时候,还没检测到 游戏就绪上报,下面就不会出卡,再往下刷就删了这个游戏卡,游戏会被杀掉
Q: 上述问题中,一直在同一个视频中等待,看到 【游戏正在预启动】,一直没有 【场景加载完成】 的提示?
A: 需要 CP 检查是否在过程中出现弹窗、公告等需要用户点击才能跳过操作,导致没法正常加载到就绪场景,从而没有调用到SDKManager.reportChannelGameInfo({ eventType: 6 });