iOS 插屏广告集成
概述
插屏广告是全屏插页广告,在应用自然过渡点(如关卡结束、视频暂停)展示。与开屏不同,插屏可在应用运行过程中的任意时机触发,具有强曝光、高转化特点。
集成步骤
1. 创建并加载插屏广告
swift
import UIKit
import UjuAdCore
final class InterstitialAdHelper {
private var interstitialAd: UjuAdObject?
func load(vc: UIViewController) {
let config = UjuAdConfig(placementId: "YOUR_INTERSTITIAL_PLACEMENT_ID")
let interstitial = UjuAdObject.getInterstitialObject(vc, config: config)
interstitial.setAdObjectListener(InterstitialListener())
self.interstitialAd = interstitial
interstitial.load()
}
func show(vc: UIViewController) {
// 展示前判断 isReady
if interstitialAd?.isReady() == true {
interstitialAd?.show(vc)
}
}
func destroy() {
interstitialAd?.destroy()
interstitialAd = nil
}
}2. 实现插屏监听器
swift
final class InterstitialListener: InterstitialAdObjectListener, @unchecked Sendable {
func onLoadSuccess() {
// 广告加载成功,可在合适时机调用 show()
}
func onLoadError(error: UjuException) {
print("插屏加载失败: \(error.description)")
}
func onAdShow() {
// 广告展示
}
func onAdClicked() {
// 广告被点击
}
func onAdPlayComplete() {
// 插屏播放完成(视频插屏时触发)
}
func onAdClosed() {
// 广告关闭,恢复 App 交互
}
func onAdError(error: UjuException) {
print("插屏展示错误: \(error.description)")
}
}UjuAdConfig 配置说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
placementId | String | 是 | 广告位 ID |
scenarioKey | String? | 否 | 广告展示场景标识,用于统计 |
userId | String? | 否 | 用户 ID |
customData | [String: String]? | 否 | 自定义数据,透传给广告服务端 |
bidFloor | Double | 否 | 底价(元,CPM),由第三方聚合平台集成时传入,普通集成方无需设置 |
展示时机
展示时机建议
插屏广告应在应用自然过渡点展示,避免打断用户核心操作:
- 关卡结束、视频暂停、页面切换等自然停顿点
- 避免在用户高频交互区域弹出
- 控制展示频次,避免过度打扰
最佳实践
- 预加载:提前
load(),展示时只需show() - 展示前检查:调用
show()前务必检查isReady() - 频次控制:自行控制插屏展示频次,避免影响用户体验
- 资源释放:广告关闭后调用
destroy()
常见问题
Q: 插屏广告为什么不显示?
A: 可能的原因:
- 广告位 ID 不正确
- 网络连接问题
- 广告库存不足(错误码 102
noFill) - 未在
onLoadSuccess后调用show(),或未检查isReady()
Q: 插屏与开屏有何区别?
A: 开屏在 App 启动时展示,由 SplashAdObjectListener 监听,含 onAdDismissed 回调;插屏在应用运行过程中展示,由 InterstitialAdObjectListener 监听,含 onAdPlayComplete 回调。
