主题
激励视频 —— NovvyRewardedAd
一次性全屏广告:load() → show()。用户看完(广告变为可关闭)时回调 onUserEarnedReward 发放激励。
对接流程
setContentContext(...) // 短剧场景必需
↓
NovvyRewardedAd(adUnitId)
↓
load() → onAdLoaded // 就绪(或 onAdFailedToLoad)
↓
show(activity) → onAdShown
↓
onUserEarnedReward // 发放激励
↓
onAdClosed // 自动释放创建
kotlin
val rewardedAd = NovvyRewardedAd(adUnitId = "your_ad_unit_id")加载
提前 load(),就绪后回调 onAdLoaded(也可查 rewardedAd.isReady):
kotlin
rewardedAd.load(object : NovvyRewardedAdListener {
override fun onAdLoaded(ad: NovvyRewardedAd) { /* 就绪,可展示 */ }
override fun onAdFailedToLoad(ad: NovvyRewardedAd, error: NovvyError) { /* 加载失败 */ }
})error 的取值见错误类型。
展示
就绪后传入当前 Activity:
kotlin
rewardedAd.show(activity)展示阶段回调(同一 listener):
kotlin
override fun onAdShown(ad: NovvyRewardedAd) { }
override fun onUserEarnedReward(ad: NovvyRewardedAd) { grantReward() }
override fun onAdClosed(ad: NovvyRewardedAd) { }关闭后自动释放;未展示即放弃时调用 rewardedAd.destroy()。
事件回调
NovvyRewardedAdListener 方法均有空实现默认值,按需重写;回调统一在主线程触发。
| 回调 | 触发时机 |
|---|---|
onAdLoaded(ad) | 广告及素材已就绪,可展示 |
onAdFailedToLoad(ad, error) | 加载失败,error 为 NovvyError |
onAdShown(ad) | 广告展示、曝光上报完成 |
onUserEarnedReward(ad) | 广告变为「可关闭」时触发一次,宿主在此发放激励 |
onAdClosed(ad) | 广告关闭,已加载状态自动释放 |
完整示例
kotlin
class RewardedAdManager(private val activity: Activity) : NovvyRewardedAdListener {
private var ad: NovvyRewardedAd? = null
fun preload() {
ad = NovvyRewardedAd(adUnitId = "your_ad_unit_id").also { it.load(this) }
}
fun showIfReady() {
ad?.takeIf { it.isReady }?.show(activity)
}
override fun onAdLoaded(ad: NovvyRewardedAd) { /* 就绪 */ }
override fun onAdFailedToLoad(ad: NovvyRewardedAd, error: NovvyError) {
when (error) {
is NovvyError.NoFill -> { /* 无填充,正常情况 */ }
is NovvyError.InternalError -> log("内部错误: ${error.details}")
else -> log("加载失败: ${error.message}")
}
}
override fun onAdShown(ad: NovvyRewardedAd) { /* 已展示 */ }
override fun onUserEarnedReward(ad: NovvyRewardedAd) { grantReward() }
override fun onAdClosed(ad: NovvyRewardedAd) { ad.destroy(); this.ad = null }
}