主题
Skip to content
1. 直玩模式概念理解
微信直玩,指的是微信在游戏A的视频广告中,将游戏B加载,并在特殊的广告界面下进行游玩的一种功能。通过该方式启动游戏时,微信会提供特殊的启动场景判断标识。目前微信将直玩的倒计时控制为30S。
在判断为直玩启动时,游戏需要切割出直玩关卡,或者专项直玩模式,以最快的速度自动跳转。直玩模式下,微信的广告/支付等功能都不可用,游戏实际以白包模式运行。
直玩模式下广告功能将失效,请务必屏蔽相关逻辑,请勿调用相关方法。
1.1 直玩的3个阶段(4种状态)
阶段1![]() | 阶段2![]() | 阶段3![]() |
|---|
1.1.1 阶段1 - 广告弹出、蒙层遮挡
以直玩模式启动游戏时,游戏上层会自动覆盖微信的蒙层。蒙层会自动覆盖在屏幕最上层,无需游戏手动处理。
1.1.2 阶段2 - 戳破蒙层、进入游戏
点击一下屏幕即可戳破蒙层,玩家可正式操作游戏:
如果戳的过早,游戏还没加载好,则还需等待游戏进入场景才能玩
如果戳的刚好,游戏已经加载完毕,则刚好可以开始玩
如果戳的很晚,则游戏已经加载完毕等了很久,则玩不了几秒钟
1.1.3 阶段3 - 直玩结束
有两种可能性触发直玩结束:
微信的直玩倒计时结束(一般为30S),微信弹出结束蒙层。玩家选择继续玩<当前直玩的游戏>,还是关闭并返回原游戏
直玩模式因其他操作异常退出
请注意,对于直玩游戏来说,仅当玩家点击《继续玩》按钮时,直玩状态才会改变!并不是倒计时到了就改变。如果玩家一直停在结束蒙层,状态就一直不会改!
2. 业务设计
2.1 特殊注意点
直玩模式进入的游戏
为游戏抽离/设计专门的直玩模式:
【选项A】将现有模式的某一关(一般为第一关)单独抽出来作为直玩落地场景。玩家玩完后即可继续后面的关卡
【选项B】单独把一关拿出来作为专属直玩模式,作为小游戏分包。玩家玩完后自动跳回大厅,让他玩普通模式
不再展示 隐私 界面,也不再调用
GameHelper.AAP.startProcess方法,直接无缝进入直玩游戏场景。从直玩模式退出时也不用展示隐私。相当于直玩进入的用户,全程不用展示隐私,不用调用GameHelper.AAP的任何方法。需要屏蔽任何设计内购、广告的元素,不可调用SDK相关方法,玩法为纯净游戏体验。如游戏与广告/内购相关的元素(例如道具)不好在直玩模式下屏蔽,可以考虑变更为免费发放
2.2 游戏链路设计

3. 研发接入
3.1 STEP1 - 直玩模式判断&业务回调注册
在初始化SDK后,于GameHelper.init的callback回调中,需要先判断是否为微信且为微信直玩进入GameHelper.WXFeed.isFeedEnter
如果为true,不再展示 隐私 界面(不再调用
GameHelper.AAP.startProcess方法),立即注册好直玩状态的处理回调,直接无缝进入直玩游戏场景。如果为false,则走普通逻辑,
以下为代码示例
typescript
// STEP1: 加载SDK
this.SDKComp.loadSDK({
....
suCallback: () => {
console.log("业务层 - SDK代码加载成功");
// STEP2: 初始化SDK
GameHelper.init({
...................................
isWXFeedEnterDebug: true, // 微信直玩模式的调试开关,上线包不能传此参数!!!
callback: () => {
// 在sdk初始化完成的第一行,判断是否为微信+直玩进入
if (GameHelper.CCComFun.isPlatform(GameHelper.CCConst.PLATFORM.WEIXIN) && GameHelper.WXFeed.isFeedEnter) {
console.log("!!!!判断为直玩进入, 不弹隐私,屏蔽广告点逻辑,加载直玩分包,跳转直玩场景");
// 如为直玩进入,在下一行就立即注册直玩状态的业务监听。处理好直玩模式跳转普通模式的逻辑
GameHelper.WXFeed.setListener((status) => {
switch (status) {
case GameHelper.WXFeed.STATUS.END_CONTINUE:
console.log("直玩时间到,直玩模式结束,点击了继续玩。游戏恢复为普通模式。必须做处理!!!");
console.log(
"根据玩法的设计,选择让玩家继续游戏,恢复广告点位等逻辑,或者将玩家转移回主页",
);
//假设这个代表回到普通模式
cc.director.loadScene("DEMO_Home");
break;
case GameHelper.WXFeed.STATUS.END_ABNORMAL:
console.log("直玩模式异常退出。游戏恢复为普通模式。必须做处理!!!");
console.log(
"根据玩法的设计,选择让玩家继续游戏,恢复广告点位等逻辑,或者将玩家转移回主页",
);
//假设这个代表回到普通模式
cc.director.loadScene("DEMO_Home");
break;
}
});
// 切换加载微信直玩的特殊场景逻辑,最小化加载,玩法加载完毕后尽快跳转到游戏场景
console.log("加载直玩场景,尽快跳转");
director.loadScene("DEMO_WXFeed");
} else {
// 非微信 or 微信但非直玩模式进入,则正常走隐私逻辑
GameHelper.AAP.startProcess((_isAgree) => {
........
});
}
},
failCallback(source: string) {
console.log("业务层 - 监听了SDK初始化失败");
GameHelper.CCComFun.showToast({ title: `出错来源: ${source}`, duration: 3000 });
},
});
},
failCallback: () => {
console.log("业务层 - SDK分包加载fail回调执行");
},
});3.2 STEP2 - 自测调试
当前渠道不支持全真模拟直玩进入
3.2.1 设置直玩进入测试开关
SDK初始化提供了isWXFeedEnterDebug测试参数,用于强制设置SDK的直玩判断状态
请注意,该参数会覆盖SDK正规的场景值判断结果,上线前请及时删除!!!

3.2.2 模拟直玩状态改变
由于无法全真模拟直玩场景,需要游戏业务层自行通过GM等逻辑模拟行为的触发,调试整个链路。
请务必调用GameHelper.WXFeed.emitTestStatusChange进行模拟,因为SDK内部也有逻辑需要处理,得听业务指挥。emitTestStatusChange会同时执行游戏业务层setListener注册的回调 + SDK内部逻辑。所以请勿手动执行业务回调,不然业务回调会执行两遍
javascript
// 直玩时间到,直玩模式结束,点击了继续玩。游戏恢复为普通模式。必须做处理!!!
// 仅供本地模拟关键行为使用,上线请一定要屏蔽!!!
testWXFeedFakeEventEndContinue() {
GameHelper.WXFeed.emitTestStatusChange(GameHelper.WXFeed.STATUS.END_CONTINUE);
}
// 直玩模式异常退出。游戏恢复为普通模式。必须做处理!!!
// 仅供本地模拟关键行为使用,上线请一定要屏蔽!!!
testWXFeedFakeEventEndAbnormal() {
GameHelper.WXFeed.emitTestStatusChange(GameHelper.WXFeed.STATUS.END_ABNORMAL);
}上线前请移除本地调试的全部逻辑,也就是emitTestStatusChange的所有调用 和 isWXFeedEnterDebug!!!
调试方法调用成功时,SDK会有如下打印:
游戏必须处理以下两个,对应直玩退出回到普通模式的事件,执行的回调一般相同:
GameHelper.WXFeed.STATUS.END_CONTINUEGameHelper.WXFeed.STATUS.END_ABNORMAL
3.3 API
| 属性 | 类型 | 说明 |
|---|---|---|
| STATUS | STATUS | 直玩状态枚举 |
| isFeedEnter | boolean | 用户是否为直玩进入 |
| setListener | (callback: function) =>{} | 设置游戏业务的直玩状态变更处理回调 |
| emitTestStatusChange | (status: STATUS) =>{} | 发送测试用的直玩状态变更事件 |
STATUS
object
| 属性 | 类型 | 说明 |
|---|---|---|
| END_CONTINUE | number | 【需关注!】直玩时间到,直玩模式结束,点击了继续玩 |
| END_ABNORMAL | number | 【需关注!】直玩模式异常退出。游戏恢复为普通模式 |
setListener
描述
设置业务层处理直玩状态改变的回调函数。当判断isFeedEnter为true时,应当立即注册。
请勿重复注册,业务回调只能注册一份,后面设置的会把之前设置的给盖掉。
参数
| 属性 | 类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
| callback | (status: STATUS) => {} | / | 否 | 直玩状态处理的业务回调 |
返回值
无
示例
javascript
GameHelper.WXFeed.setListener((status) => {
switch (status) {
case GameHelper.WXFeed.STATUS.END_CONTINUE:
console.log("直玩时间到,直玩模式结束,点击了继续玩。游戏恢复为普通模式。必须做处理!!!");
console.log("根据玩法的设计,选择让玩家继续游戏,恢复广告点位等逻辑,或者将玩家转移回主页");
break;
case GameHelper.WXFeed.STATUS.END_ABNORMAL:
console.log("直玩模式异常退出。游戏恢复为普通模式。必须做处理!!!");
console.log("根据玩法的设计,选择让玩家继续游戏,恢复广告点位等逻辑,或者将玩家转移回主页");
break;
}
});emitTestStatusChange
描述
用于本地测试的事件派送逻辑。模拟关键行为触发,并触发业务回调。
请务必调用
GameHelper.WXFeed.emitTestStatusChange进行模拟,因为SDK内部也有逻辑需要处理,得听业务指挥。仅供本地模拟关键行为使用,上线请一定要屏蔽!!!
参数
| 属性 | 类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
| status | STATUS | / | 是 | 期望切换成的直玩状态 |
返回值
无
示例
typescript
GameHelper.WXFeed.emitTestStatusChange(GameHelper.WXFeed.STATUS.END_CONTINUE);4. 业务测试点位
4.1 进入游戏
直玩模式
游戏能正常启动,无缝跳到直玩模式,期间无需玩家额外操作。不允许在原正常流程上添加多余的加载过渡页面。
进入过程不弹出除SDK登录失败弹框以外的,任何打扰直玩过程的弹框。特别说明:
- 不展示隐私等相关场景or弹出隐私确认框(不再调用
GameHelper.AAP.startProcess方法)。但建议将著作权人/健康忠告/备案的内容放在加载页
- 不展示隐私等相关场景or弹出隐私确认框(不再调用
直玩模式的进程不可被游戏元素打断,保证玩家一直停留在直玩模式里。例如需要屏蔽回到首页等按钮
直玩模式需要屏蔽任何设计内购、广告的元素,不可调用SDK相关方法,玩法为纯净游戏体验
- 如游戏与广告/内购相关的元素(例如道具)不好在直玩模式下屏蔽,可以考虑变更为免费发放
直玩模式的玩法内容,需要保证能被至少玩25秒
普通模式
游戏能正常启动,体验跟普通保持一致
如游戏有DIY隐私弹框的逻辑,则需在首次非直玩启动时弹出
通用
- 游戏可同时兼容两种启动模式
4.2 直玩状态更新
当《直玩时间结束,玩家点击继续玩》或《直玩异常退出》:
游戏应当回归正常模式
如有隐私弹框机制,不可弹出
根据游戏自身的设计:
如直玩关卡为独立抽出的模式,与主玩法关卡无关联,不存在连续性,则应当通过良好的过渡(自动跳转或弹出跳转UI确认框),将玩家导向正常模式的主页,让其继续游玩
如直玩关卡为主玩法关卡的一关,存在连续性,则应停留在当前页面,恢复跳出当前关卡的UI组件,恢复成正常模式的形状
恢复游戏的视频点位、支付点位
点我快速对接



›
‹


