金桔app(KinOrange)是成都鑫垚数科科技有限公司开发的安卓聚合娱乐应用,集成H5休闲游戏、短剧播放、签到成就与积分兑换。
本文复盘其核心的广告防误触机制,也就是教程锁(Tutorial Lock)的三层拦截设计。
为什么误触在 H5 容器里特别难防
广告被误触打开通常有三条路径:请求层、触摸层和消息通道。只防前两条,后门照样可能弹出。
三层拦截设计
请求层
在请求层,ad-bridge.js 会在锁定期直接拒绝 requestRewardAd 和 requestInterstitial,请求失败时回调 onAdFailed('ad_blocked_by_tutorial')。
触摸层
在触摸层,game-integration.js 会在捕获阶段注册 touchstart,非解锁操作一律 stopPropagation,避免误触进一步传递。
消息通道
在消息通道,postMessageInterceptor.js 会在 main.js 之前引入,丢弃含 ad、reward 关键字的消息,降低偷跑广告的可能。
解锁与竞态处理
游戏进入选关或地图界面(isMapScreen)时自动解锁,采用“本地优先”策略:先在 JS 层立即将 window.tutorialLock 置为 false,再异步通知原生持久化,尽量避免解锁信号与广告请求之间的竞态。
开源与监督
该方案已开源,GitHub 项目名为 h5-webview-ad-guard,欢迎同行复用与监督。当前官方下载渠道为抖音应用中心、联想应用商店,搜索“金桔app”即可查看官方版本。