QQ小游戏 RewardedVideoAd 创建激励视频广告组件 API

QQ小游戏激励视频广告组件详解

RewardedVideoAd 创建激励视频广告组件 qq.createRewardedVideoAd(Object object)


RewardedVideoAd qq.createRewardedVideoAd(Object object)

创建激励视频广告组件。开发者工具 0.1.26 版本开始支持调试广告组件。

参数
Object object
属性类型默认值必填说明
adUnitIdstring广告单元 id
返回值
RewardedVideoAd

激励视频广告组件

激励视频广告组件是一个原生组件,并且是一个全局单例。层级比上屏 Canvas 高,会覆盖在上屏 Canvas 上。激励视频 广告组件默认是隐藏的,需要调用 RewardedVideoAd.show() 将其显示。


方法
Promise RewardedVideoAd.load()

加载激励视频广告数据

Promise RewardedVideoAd.show()

显示激励视频广告。激励视频广告将从屏幕下方推入。

RewardedVideoAd.onLoad(function callback)

监听激励视频广告加载事件

RewardedVideoAd.offLoad(function callback)

取消监听激励视频广告加载事件

RewardedVideoAd.onError(function callback)

监听激励视频错误事件

RewardedVideoAd.offError(function callback)

取消监听激励视频错误事件

RewardedVideoAd.onClose(function callback)

监听用户点击 关闭广告 按钮的事件

RewardedVideoAd.offClose(function callback)

取消监听用户点击 关闭广告 按钮的事件

.load

Promise RewardedVideoAd.load()

隐藏激励视频广告

返回值
Promise

激励视频广告加载数据的结果

.offClose

RewardedVideoAd.offClose(function callback)

取消监听用户点击 关闭广告 按钮的事件

参数
function callback

用户点击 关闭广告 按钮的事件的回调函数

.offError

RewardedVideoAd.offError(function callback)

取消监听激励视频错误事件

参数
function callback

激励视频错误事件的回调函数

.offLoad

RewardedVideoAd.offLoad(function callback)

取消监听激励视频广告加载事件

参数
function callback

激励视频广告加载事件的回调函数

.onClose

RewardedVideoAd.onClose(function callback)

监听用户点击 关闭广告 按钮的事件

参数
function callback

用户点击 关闭广告 按钮的事件的回调函数

参数

Object res

属性类型说明最低版本
isEndedboolean视频是否是在用户完整观看的情况下被关闭的

.onError

RewardedVideoAd.onError(function callback)

监听激励视频错误事件

参数
function callback

激励视频错误事件的回调函数

参数

Object res

属性类型说明最低版本
errMsgstring错误信息
errCodenumber错误码

.onLoad

RewardedVideoAd.onLoad(function callback)

监听激励视频广告加载事件

参数
function callback

激励视频广告加载事件的回调函数

.show

Promise RewardedVideoAd.show()

显示激励视频广告。激励视频广告将从屏幕下方推入。

返回值
Promise

激励视频广告显示操作的结果


错误码信息与解决方案表

错误码说明

代码异常情况理由解决方案
1000后端错误调用失败该项错误不是开发者的异常情况一般情况下忽略一段时间即可恢复。
1001参数错误使用方法错误可以前往 q.qq.com 确认具体教程(小程序和小游戏分别有各自的教程,可以在顶部选项中,“设计”一栏的右侧进行切换。
1002广告单元无效可能是拼写错误、或者误用了其他 APP 的广告 ID请重新前往 q.qq.com 确认广告位 ID。
1003内部错误该项错误不是开发者的异常情况一般情况下忽略一段时间即可恢复。
1004无适合的广告广告不是每一次都会出现,这次没有出现可能是由于该用户不适合浏览广告属于正常情况,且开发者需要针对这种情况做形态上的兼容。
1005广告组件审核中你的广告正在被审核,无法展现广告请前往 q.qq.com 确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1006广告组件被驳回你的广告审核失败,无法展现广告请前往 q.qq.com 确认审核状态,且开发者需要针对这种情况做形态上的兼容。
1007广告组件被驳回你的广告能力已经被封禁,封禁期间无法展现广告请前往 q.qq.com 确认小程序广告封禁状态。
1008广告单元已关闭该广告位的广告能力已经被关闭请前往 q.qq.com 重新打开对应广告位的展现。

其他API:
QQ小游戏 BannerAd 创建banner广告组件 API
QQ小游戏 AppBox 创建广告盒子组件 API
QQ小游戏 RewardedVideoAd 创建激励视频广告组件 API

使用方法:
接QQ小游戏小程序盒子广告sdk
接QQ小游戏Banner广告sdk
接QQ小游戏小程序视频广告sdk


维尼聚合工具


<think>我们正在使用EgretWing(一个基于Egret引擎的开发工具)开发游戏。用户的问题是如何在EgretWing中实现观看广告后发放奖励的功能。具体来说,就是当玩家观看完广告后,游戏需要发放奖励(如金币、道具等)。 在Egret引擎中,广告功能通常是通过平台提供的SDK来实现的。不同的平台(如微信小游戏QQ小游戏、百度小游戏等)有不同的广告API。因此,实现广告奖励功能需要以下步骤: 1. 集成广告SDK:根据目标平台,集成相应的广告SDK。Egret引擎已经为一些主流平台提供了支持,例如在微信小游戏中,可以使用微信的广告API。 2. 创建广告组件:在游戏中创建一个广告组件,用于加载和显示广告。 3. 监听广告事件:特别是广告播放完成的事件,当广告播放完成时,触发发放奖励的逻辑。 4. 发放奖励:在广告播放完成的回调函数中,执行发放奖励的代码。 由于EgretWing是一个可视化编辑工具,我们可以通过编写代码来实现上述逻辑。以下是一个基于微信小游戏平台的示例代码,因为微信小游戏是目前比较常见的平台。 注意:在实际开发中,需要确保广告SDK已经正确集成到Egret项目中。Egret官方提供了微信小游戏的集成方案,可以参考Egret官方文档。 步骤详解: 步骤1:在微信小游戏项目中,首先需要创建激励视频广告。微信小游戏提供了`wx.createRewardedVideoAd`方法。 步骤2:在合适的时机(比如玩家点击了一个“看广告得奖励”的按钮)调用广告组件的`show`方法。 步骤3:监听广告的关闭事件(`onClose`),在事件回调中判断广告是否正常播放完成(通过回调参数中的`isEnded`),如果播放完成则发放奖励。 示例代码: 首先,在游戏代码中,我们声明一个广告实例,并在初始化时创建它。注意:广告单元ID(adUnitId)需要从微信小游戏后台获取。 在Egret项目的某个类中(比如游戏主类)添加以下代码: ```typescript class Main extends egret.DisplayObjectContainer { // 激励视频广告实例 private rewardedVideoAd: any; public constructor() { super(); this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this); } private onAddToStage(event: egret.Event) { // 初始化广告 this.initAd(); // 其他初始化代码... } // 初始化激励视频广告 private initAd(): void { // 判断是否在微信小游戏环境中 if (typeof wx !== 'undefined') { // 创建激励视频广告 this.rewardedVideoAd = wx.createRewardedVideoAd({ adUnitId: '你的广告单元ID' // 这里需要替换成实际的广告单元ID }); // 监听激励视频广告加载错误 this.rewardedVideoAd.onError(err => { console.error('激励视频广告加载错误', err); }); // 监听广告关闭事件 this.rewardedVideoAd.onClose(res => { // 用户点击了【关闭广告】按钮 if (res && res.isEnded) { // 正常播放结束,可以发放奖励 this.giveReward(); } else { // 播放中途退出,不发放奖励 console.log('广告未播放完成'); } }); } } // 显示广告的方法,可以在按钮点击事件中调用 public showRewardedAd(): void { if (this.rewardedVideoAd) { this.rewardedVideoAd.show().catch(err => { // 失败重试 this.rewardedVideoAd.load() .then(() => this.rewardedVideoAd.show()) .catch(err => { console.error('广告展示失败', err); }); }); } } // 发放奖励 private giveReward(): void { // 这里写发放奖励的代码,比如增加金币、道具等 console.log('发放奖励'); // 例如:增加金币 // player.gold += 100; } } ``` 注意: - 上述代码需要在微信小游戏环境下运行,因此使用`wx`对象前需要判断是否存在。 - 广告单元ID需要替换为实际申请到的ID。 - 广告的加载和显示可能会失败,因此需要错误处理。 在EgretWing中,我们可以将上述代码添加到游戏主类中。同时,我们需要在界面上放置一个按钮,当点击按钮时调用`showRewardedAd`方法。 另外,关于广告的测试,微信小游戏提供了测试广告单元ID,可以在开发阶段使用。 其他平台(如QQ小游戏、百度小游戏等)的实现方式类似,只是API可能略有不同,需要参考对应平台的文档。 总结:实现观看广告后发放奖励的功能,关键在于广告组件创建和事件监听,在广告播放完成的回调中执行奖励逻辑。 相关问题: 1. 在Egret中如何集成微信小游戏SDK? 2. 如何为不同的平台(如QQ小游戏、百度小游戏)实现广告功能? 3. 如何设计奖励机制以避免玩家滥用广告功能?</think>在EgretWing中实现观看广告后发放奖励的功能,需要结合广告SDK和游戏逻辑处理。以下是实现步骤和代码示例: ### 实现步骤 1. **初始化广告模块** - 集成广告SDK(如腾讯广点通、穿山甲等) - 创建激励视频广告实例 2. **监听广告事件** - 广告加载完成 - 广告播放完成 - 广告播放中断 3. **奖励发放逻辑** - 验证广告是否完整播放 - 执行奖励发放逻辑 - 更新游戏状态 ### 代码实现示例 ```typescript // 1. 声明广告实例 private rewardAd: any; // 实际类型根据SDK文档确定 // 2. 初始化广告 private initAd() { if (typeof wx !== 'undefined') { // 微信小游戏环境 this.rewardAd = wx.createRewardedVideoAd({ adUnitId: '你的广告单元ID' }); // 监听广告关闭事件(关键!) this.rewardAd.onClose(res => { if (res && res.isEnded) { // 完整播放发放奖励 this.giveReward(); } else { // 中途关闭不发放 console.log("广告未完整播放"); } }); // 错误处理 this.rewardAd.onError(err => { console.error("广告加载失败", err); }); } } // 3. 触发广告播放 public showRewardAd() { if (this.rewardAd) { this.rewardAd.show().catch(err => { // 失败时重新加载 this.rewardAd.load().then(() => this.rewardAd.show()); }); } } // 4. 发放奖励(核心逻辑) private giveReward() { // 示例:增加金币 const currentGold = this.playerData.gold; this.playerData.gold = currentGold + 100; // 更新UI this.goldText.text = this.playerData.gold.toString(); // 保存游戏状态 this.saveGameData(); // 提示用户 const tip = new egret.TextField(); tip.text = "获得100金币奖励!"; this.addChild(tip); egret.Tween.get(tip).to({y: tip.y - 100}, 1000).call(() => { this.removeChild(tip); }); } // 5. 按钮绑定(在EUl中) private bindButton() { let btn = new eui.Button(); btn.label = "观看广告领奖励"; btn.addEventListener(egret.TouchEvent.TOUCH_TAP, () => { this.showRewardAd(); }); this.addChild(btn); } ``` ### 关键注意事项 1. **广告单元ID配置** - 需在广告平台创建激励视频广告位 - 不同平台(微信/QQ/百度小游戏)使用不同ID 2. **广告状态验证** ```typescript // 必须验证isEnded参数 if (res.isEnded) { // 用户完整观看 } else { // 用户提前关闭 } ``` 3. **多平台适配** ```typescript // 平台检测示例 if (window['qq']) { // QQ小游戏逻辑 } else if (window['swan']) { // 百度小游戏逻辑 } ``` 4. **错误处理** - 广告加载失败时自动重试 - 网络异常时提供备用方案(如直接发放测试奖励) ### 调试技巧 1. 开发阶段使用测试广告ID 2. 在`egretProperties.json`中添加广告SDK: ```json "modules": [ { "name": "egret" }, { "name": "game" }, { "name": "wxgame", // 微信小游戏支持 "path": "./wxgame" } ] ``` 3. 使用Egret Inspector调试广告事件[^4] ### 常见问题解决 - **广告无法加载**:检查网络连接和广告单元ID - **回调不触发**:确保使用`onClose`而非`onEnd` - **真机调试问题**:需打包为小游戏包测试[^3] - **移动端适配**:在`index.html`中添加viewport配置 > 提示:实际发布前需在各平台后台配置广告位,测试环境可使用官方提供的测试ID避免频繁触发广告限制[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值