iOS 开屏广告集成
概述
开屏广告在 App 启动时展示,支持倒计时。用户可等待倒计时结束或主动跳过进入主界面。开屏广告具有曝光率高、品牌记忆强的特点。
集成步骤
参考 Demo 示例的 SplashAdHelper:
1. 创建并加载开屏广告
swift
import UIKit
import UjuAdCore
final class SplashViewController: UIViewController {
private var splashObject: UjuAdObject?
override func viewDidLoad() {
super.viewDidLoad()
loadSplash()
}
private func loadSplash() {
// 创建广告配置
let config = UjuAdConfig(placementId: "YOUR_SPLASH_PLACEMENT_ID")
// 通过工厂方法创建开屏广告对象
let splash = UjuAdObject.getSplashObject(self, config: config)
// 设置监听器
splash.setAdObjectListener(SplashListener(vc: self))
self.splashObject = splash
// 开始加载
splash.load()
}
}2. 实现开屏监听器
swift
final class SplashListener: SplashAdObjectListener, @unchecked Sendable {
private weak var vc: UIViewController?
init(vc: UIViewController) { self.vc = vc }
func onLoadSuccess() {
// 加载成功,展示前判断 isReady
guard let vc = vc, let splashObject = (vc as? SplashViewController)?.splashObject else { return }
if splashObject.isReady() {
splashObject.show(vc)
}
}
func onLoadError(error: UjuException) {
print("开屏加载失败: code=\(error.code) message=\(error.message)")
// 加载失败,直接进入主界面
}
func onAdShow() {
print("开屏展示")
}
func onAdClicked() {
print("开屏被点击")
}
func onAdDismissed() {
// 开屏被关闭(用户跳过或倒计时结束),进入主界面
print("开屏倒计时结束,进入主界面")
}
func onAdError(error: UjuException) {
print("开屏展示错误: \(error.description)")
}
}UjuAdConfig 配置说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
placementId | String | 是 | 广告位 ID |
scenarioKey | String? | 否 | 广告展示场景标识,用于统计 |
userId | String? | 否 | 用户 ID |
customData | [String: String]? | 否 | 自定义数据,透传给广告服务端 |
bidFloor | Double | 否 | 底价(元,CPM),由第三方聚合平台集成时传入,普通集成方无需设置 |
倒计时与关闭
onAdDismissed 回调时机
onAdDismissed() 是开屏广告特有的回调(继承自 SplashAdObjectListener),在以下情况触发:
- 用户主动跳过开屏(点击跳过按钮)
- 开屏倒计时结束
建议在 onAdDismissed 中进入主界面,不要在 onAdClosed 中进入(后者仅表示广告视图被移除)。
最佳实践
- 尽早加载:在
AppDelegate.didFinishLaunchingWithOptions完成 SDK 初始化后,立即在根 ViewController 中加载开屏 - 超时兜底:建议设置 3-5 秒的超时机制,加载超时直接进入主界面,避免用户长时间等待
- 资源释放:开屏展示完毕后调用
destroy()释放资源 - 加载失败降级:
onLoadError时直接进入主界面,不阻塞用户
常见问题
Q: 开屏广告为什么不显示?
A: 可能的原因:
- 广告位 ID 不正确
- 网络连接问题
- 广告库存不足(错误码 102
noFill) - 未在
onLoadSuccess后调用show(),或未检查isReady()
Q: 加载失败时应如何处理?
A: 在 onLoadError 中直接进入主界面,不要阻塞用户。开屏广告加载失败属于正常业务响应,可间隔一段时间后重试。
