LayaAir源码广告联盟广告管理的核心类,负责广告配置的管理和广告展示
配置访问 - 提供了多个getter方法获取广告配置参数- nativeId 原生广告ID- videoId 视频广告ID- bannerId 横幅广告ID- insertId 插屏广告ID- appId 应用ID- 以及其他广告相关配置参数### 2.2 广告展示控制广告展示时机控制 - canShowBanner() 控制横幅广告的展示时机- canShowInsert() 控制插屏广告的展示时机- canShowNative() 控制原生广告的展示时机展示逻辑 - 基于游戏启动时间和配置的延迟时间判断是否可以展示广告canShowBanner() {if (this.showBanner) {return true;}if (this._gameConfig.bannerDelay 0) {return false;}let offset new Date().getTime() - this.startGameTime;this.showBanner offset / 1000 this._gameConfig.bannerDelay;return this.showBanner;}### 2.3 时间范围控制时间范围检查 - isInTimeRange(cfgTime) 检查当前时间是否在允许展示广告的时间范围内isInTimeRange(cfgTime) {if (!cfgTime) {console.warn([AdMgr.isInTimeRange]invalidconfig, time:${cfgTime});return false;}let date new Date();let times date.getHours().toString() date.getMinutes().toString();let tmp cfgTime.split(-);let lowerBound tmp[0];let topBound tmp[1];return lowerBound times times topBound;}### 2.4 版本兼容性检查版本检查 - isAudit(cfgVer) 检查当前应用版本是否符合广告配置要求isAudit(cfgVer) {if (!cfgVer) {console.warn([AdMgr.isAudit]invalid config,ver:${cfgVer});return true;}let version Laya.Browser.onQGMiniGame ?OppoVersion : (Laya.Browser.onVVMiniGame ?VivoVersion : QQVersion);return CommonUtils.Ins.compareVersion(version,cfgVer) 0;}## 3. 技术实现细节### 3.1 单例模式AdMgr 采用单例模式设计确保全局只有一个实例static get Ins() {if (AdMgr._ins null) {AdMgr._ins new AdMgr();}return AdMgr._ins;}### 3.2 平台适配通过 Laya.Browser 的平台检测方法自动适配不同平台的广告配置- Laya.Browser.onQGMiniGame OPPO小游戏- Laya.Browser.onVVMiniGame VIVO小游戏- Laya.Browser.onWeiXin 微信小游戏- Laya.Browser.onQQMiniGame QQ小游戏### 3.3 配置热更新通过远程服务器加载广告配置实现配置的热更新无需修改代码即可调整广告策略- 从不同平台的URL加载配置- 检查配置的安全性和时间有效性- 动态更新广告配置### 3.4 广告展示策略- 延迟展示 通过 bannerDelay 、 insertDelay 、 nativeDelay 控制广告展示的延迟时间- 时间控制 通过 timeThreshold 控制广告展示的时间范围- 版本控制 通过 safeVersion 确保广告配置与应用版本兼容## 4. 与其他模块的交互### 4.1 与平台实现类的交互AdMgr 为各平台实现类如 OppoPlatform 、 VivoPlatform 、 QQPlatform 、 WeChatPlatform 等提供广告配置信息- 平台实现类通过 AdMgr.Ins 获取广告ID和配置- 平台实现类根据配置实现具体的广告加载和展示逻辑### 4.2 与游戏逻辑的交互游戏逻辑通过 AdMgr 控制广告的展示时机- 检查是否可以展示广告- 获取广告配置参数- 调整广告展示策略## 5. 代码优化建议### 5.1 性能优化1. 配置缓存 - 建议增加配置缓存机制避免重复请求远程配置- 可以将配置缓存到本地存储定期更新2. 广告预加载 - 可以在游戏启动时预加载广告减少用户等待时间- 实现广告加载状态的管理避免重复加载### 5.2 代码结构优化1. 模块化 - 将广告配置管理和广告展示控制分离为不同的模块- 增加广告事件管理模块统一处理广告事件2. 错误处理 - 增加更完善的错误处理机制特别是网络请求失败的情况- 提供默认配置确保在配置加载失败时仍能正常运行3. 可扩展性 - 设计更灵活的广告配置结构支持更多广告类型和平台- 增加广告效果分析模块收集广告展示和点击数据### 5.3 功能增强1. 广告效果分析 - 增加广告展示、点击、转化等数据的收集和分析- 提供广告效果报告帮助优化广告策略2. 智能广告投放 - 根据用户行为和游戏状态智能调整广告投放策略- 实现广告A/B测试优化广告效果3. 用户体验优化 - 增加广告展示频率控制避免过度打扰用户- 提供广告关闭选项增强用户体验## 6. 总结AdMgr 是一个设计合理、功能完善的广告联盟管理核心类通过以下特点实现了高效的广告管理1. 集中化管理 统一管理不同平台的广告配置2. 灵活配置 支持远程配置热更新无需修改代码3. 智能控制 基于时间、版本等因素智能控制广告展示4. 平台适配 自动适配不同平台的广告API和配置5. 可扩展性 设计灵活易于扩展新的广告类型和平台通过 AdMgr 的管理游戏可以在不同平台上实现高效的广告变现同时保持良好的用户体验。## 7. 核心代码示例### 7.1 初始化与配置加载// 初始化AdMgrAdMgr.Ins.init();// 获取广告配置let bannerId AdMgr.Ins.bannerId[0];let videoId AdMgr.Ins.videoId[0];// 检查是否可以展示广告if (AdMgr.Ins.canShowBanner()) {// 展示横幅广告}if (AdMgr.Ins.canShowInsert()) {// 展示插屏广告}### 7.2 平台实现类中使用AdMgr// 在平台实现类中获取广告IDshowBannerAd() {this.showBanner true;if (qg) {this.bannerAd qg.createBannerAd({adUnitId: AdMgr.Ins.bannerId[0],style: {},});// 其他广告配置...}}loadVideoAd() {return new Promise((resolve, reject) {this.video1 qg.createRewardedVideoAd({adUnitId: AdMgr.Ins.videoId[0]});// 其他视频广告配置...});}