主题
激励视频 —— NovvyRewardedAd
一次性全屏广告:load() → show(from:)。用户看完(广告变为可关闭)时回调 didEarnReward 发放激励。
对接流程
setContentContext(...) // 短剧场景必需
↓
NovvyRewardedAd(adUnitId:)
↓
load() → rewardedAdDidLoad // 就绪(或 didFailToLoadWithError)
↓
show(from: vc) → rewardedAdDidShow
↓
didEarnReward // 发放激励
↓
rewardedAdDidClose // 自动释放创建
swift
let rewardedAd = NovvyRewardedAd(adUnitId: "your_ad_unit_id")
rewardedAd.delegate = self加载
提前 load(),就绪后回调 rewardedAdDidLoad(也可查 rewardedAd.isReady):
swift
rewardedAd.load()
// MARK: - NovvyRewardedAdDelegate
func rewardedAdDidLoad(_ ad: NovvyRewardedAd) { /* 就绪,可展示 */ }
func rewardedAd(_ ad: NovvyRewardedAd, didFailToLoadWithError error: NovvyError) { /* 加载失败 */ }展示
就绪后传入承载的 UIViewController:
swift
rewardedAd.show(from: viewController)展示阶段回调(同一 delegate):
swift
func rewardedAdDidShow(_ ad: NovvyRewardedAd) { }
func rewardedAd(_ ad: NovvyRewardedAd, didEarnReward reward: NovvyReward) { grantReward() }
func rewardedAdDidClose(_ ad: NovvyRewardedAd) { }关闭后自动释放;未展示即放弃时调用 rewardedAd.destroy()。
事件回调
NovvyRewardedAdDelegate 中 rewardedAdDidLoad / didFailToLoadWithError / didEarnReward 需实现,其余有默认空实现;回调统一在主线程触发。
| 回调 | 触发时机 |
|---|---|
rewardedAdDidLoad(ad) | 广告及素材已就绪,可展示 |
rewardedAd(ad, didFailToLoadWithError:) | 加载失败,error 取值见错误类型 |
rewardedAdDidShow(ad) | 广告已展示(不代表曝光已上报,见回调与曝光) |
rewardedAd(ad, didEarnReward:) | 广告变为「可关闭」且用户真正关闭时触发一次,宿主在此发放激励 |
rewardedAdDidClose(ad) | 广告关闭,已加载状态自动释放 |
完整示例
swift
final class RewardedAdManager: NovvyRewardedAdDelegate {
private weak var presentingVC: UIViewController?
private var ad: NovvyRewardedAd?
init(presentingVC: UIViewController) { self.presentingVC = presentingVC }
func preload() {
let ad = NovvyRewardedAd(adUnitId: "your_ad_unit_id")
ad.delegate = self
ad.load()
self.ad = ad
}
func showIfReady() {
guard let ad, ad.isReady, let vc = presentingVC else { return }
ad.show(from: vc)
}
func rewardedAdDidLoad(_ ad: NovvyRewardedAd) { /* 就绪 */ }
func rewardedAd(_ ad: NovvyRewardedAd, didFailToLoadWithError error: NovvyError) {
switch error {
case .noFill: break // 无填充,正常情况
case .internalError(let details): log("内部错误: \(details)")
default: log("加载失败: \(error.localizedDescription)")
}
}
func rewardedAdDidShow(_ ad: NovvyRewardedAd) { /* 已展示 */ }
func rewardedAd(_ ad: NovvyRewardedAd, didEarnReward reward: NovvyReward) { grantReward() }
func rewardedAdDidClose(_ ad: NovvyRewardedAd) { self.ad = nil }
}