Skip to content

信息流滑动位 —— NovvyScrollAd ​

内联信息流广告:load() 预加载 → attach(to:) 挂载 → setPlaying(true/false) 驱动播放。

可选 episode 覆盖该广告归属的集号(如第 1 集播放时预载第 2 集的广告)。

对接流程 ​

Episode starts(本集开始播放)
        ↓
setContentContext(...)                        // series/episode
        ↓
NovvyScrollAd(adUnitId: episode:) + load()
        ↓
scrollAdDidLoad                               // 就绪(或 didFailToLoadWithError)
        ↓
用户划到广告位  →  attach(to: container)
        ↓
划入 setPlaying(true) → scrollAdDidShow / 划走 setPlaying(false)
        ↓
detach() / destroy()

接入代码 ​

swift
let scrollAd = NovvyScrollAd(
    adUnitId: "your_ad_unit_id",
    episode:  2                              // 可选:该广告归属的集号
)
scrollAd.delegate = self

// 1. 预加载
scrollAd.load()

// MARK: - NovvyScrollAdDelegate
func scrollAdDidLoad(_ ad: NovvyScrollAd) { /* 就绪 */ }
func scrollAd(_ ad: NovvyScrollAd, didFailToLoadWithError error: NovvyError) { /* ... */ }
func scrollAdDidShow(_ ad: NovvyScrollAd) { /* 已展示 */ }
func scrollAdDidClose(_ ad: NovvyScrollAd) { /* 已隐藏 */ }

// 2. 挂载到容器(用户划到广告位时)
scrollAd.attach(
    to: containerView,
    onAdPlaybackTick: { remainingSeconds in
        // remainingSeconds > 0:锁定中,禁止划走;== 0:可划走
    }
)

// 3. 划入广告页 → 开始曝光/倒计时;划走 → 停止
scrollAd.setPlaying(true)
scrollAd.setPlaying(false)

// 4. 释放
scrollAd.detach()   // 从容器移除(触发 scrollAdDidClose)
scrollAd.destroy()  // 完全释放

事件回调 ​

NovvyScrollAdDelegate 中 scrollAdDidLoad / didFailToLoadWithError 需实现,其余有默认空实现;回调统一在主线程触发。

回调触发时机
scrollAdDidLoad(ad)就绪
scrollAd(ad, didFailToLoadWithError:)加载失败,error 取值见错误类型
scrollAdDidShow(ad)广告已挂载展示(不代表曝光已上报,见回调与曝光)
scrollAdDidClose(ad)广告从容器移除 / 隐藏

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