Skip to content

激励视频 —— 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 }
}

本文档仅供技术对接使用,请勿外传。