iOS Splash Ad Integration
Overview
Splash ads are displayed when the app starts and support a countdown. Users can wait for the countdown to end or actively skip to enter the main interface. Splash ads have high exposure rates and strong brand recall.
Integration Steps
Refer to the SplashAdHelper in the demo example:
1. Create and Load Splash Ad
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. Implement Splash Listener
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 Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
placementId | String | Yes | Ad placement ID |
scenarioKey | String? | No | Ad display scenario identifier, used for analytics |
userId | String? | No | User ID |
customData | [String: String]? | No | Custom data, passed through to the ad server |
bidFloor | Double | No | Bid floor (CNY, CPM), passed by aggregation platform, not needed for normal integrators |
Countdown and Close
onAdDismissed Callback Timing
onAdDismissed() is a callback specific to splash ads (inherited from SplashAdObjectListener), triggered in the following cases:
- User actively skips the splash (clicks the skip button)
- Splash countdown ends
It is recommended to enter the main interface in onAdDismissed, not in onAdClosed (the latter only indicates that the ad view was removed).
Best Practices
- Load early: After completing SDK initialization in
AppDelegate.didFinishLaunchingWithOptions, immediately load the splash in the root ViewController - Timeout fallback: It is recommended to set a 3-5 second timeout mechanism; if loading times out, enter the main interface directly to avoid making users wait too long
- Resource release: Call
destroy()to release resources after the splash finishes displaying - Load failure fallback: Enter the main interface directly on
onLoadErrorwithout blocking the user
FAQ
Q: Why doesn't the splash ad show?
A: Possible causes:
- Incorrect ad placement ID
- Network connection issues
- Insufficient ad inventory (error code 102
noFill) - Did not call
show()afteronLoadSuccess, or did not checkisReady()
Q: How should I handle load failures?
A: Enter the main interface directly in onLoadError without blocking the user. Splash ad load failure is a normal business response; you can retry after an interval.
