开屏广告(SwiftUI)
开屏广告是一种特殊的广告格式,用于通过应用加载屏幕变现。这些广告可以随时关闭,并且旨在当用户将您的应用带到前台时(无论是在启动时还是从后台返回时)投放。
本指南介绍如何在 iOS 应用中使用 SwiftUI 集成开屏广告。除代码示例外,还包含格式使用建议及其他资源链接。
注意
开屏广告只能在垂直方向的应用中投放。对于水平方向的应用,广告将不会显示。
外观
开屏广告会显示 Go to the app 按钮,让用户知道当前在您的应用中并可以关闭广告。 广告展示效果示例:
前提条件
- 请按照 快速入门 中描述的 SDK 集成步骤进行操作。
- 提前 初始化 您的广告 SDK。
- 确保您运行的是最新的 Yandex Mobile Ads SDK 版本。如果您使用聚合,请同时确保您运行的是最新版本的 统一构建。
术语
- 冷启动 — 应用不在内存中时启动,开启新的会话。
- 热启动 — 应用从后台(仍驻留内存的挂起状态)回到前台。
实施
- 在应用启动时初始化 SDK。
- 在根
View上(例如在WindowGroup内)添加.appOpenAd(request:onEvent:)修饰符。 - 通过
Binding<AdRequest?>控制加载:非nil即开始加载。 - 加载成功后,当应用进入活跃(前台)状态且尚未重置
request时,广告会自动展示。 - 在
onEvent(AppOpenAdEvent)中处理生命周期事件。 - 广告关闭、展示失败或加载失败后,
request会重置为nil— 需要再次加载时请设置新的AdRequest(常在场景阶段变化回调中处理)。
主要步骤
-
在应用启动时初始化 SDK。
// 加载广告前请等待 SDK 初始化完成 YandexAds.initializeSDK(completionHandler: completionHandler) -
将修饰符挂到根视图并保存请求状态。
需要您在 Yandex Advertising Network 中获取的广告位 ID(
AD_UNIT_ID)。可通过
AdRequest传入用户兴趣、页面上下文、位置等数据扩展请求参数。请求中的额外上下文可显著提升广告质量。详见广告定向。iOS 14+ 配合
ScenePhase的示例(在request被置为nil后重新加载):import SwiftUI import YandexMobileAds @main struct MyApp: App { @State private var adRequest: AdRequest? @Environment(\.scenePhase) private var scenePhase var body: some Scene { WindowGroup { ContentView() .appOpenAd(request: $adRequest) { event in if case .didFailToLoad = event { // 如需延迟重试,见下文建议 } } } .onChange(of: scenePhase) { if scenePhase == .active, adRequest == nil { adRequest = AdRequest(adUnitID: "demo-appopenad-yandex") } } } }在 iOS 13 上请使用
UIApplication.didBecomeActiveNotification或等效生命周期逻辑,在nil之后设置新的AdRequest。 -
加载与展示事件在
onEvent中接收:.appOpenAd(request: $adRequest) { event in switch event { case .didLoad: // 广告已就绪;下次进入前台时展示 break case .didShow: break case .didDismiss: // request 已由修饰符重置 break case .didFailToShow: break case .didFailToLoad: // request 已重置;不建议在循环中立即重试 break case .didClick: break case .didTrackImpression(_): break } }备注
如果广告已经投放,调用
show(from:)方法将在AppOpenAdDelegate.appOpenAd(_:didFailToShowError:)中返回显示错误。
开屏广告集成说明
- 加载可能耗时较长,若广告未加载完成,请勿因此拖慢冷启动。
- 请提前预加载,以便热启动时展示。绑定为
nil时不会加载 — 需要在后台准备展示时再设置AdRequest。 - 不建议在应用启动时同时加载开屏广告与其他广告格式,此时应用可能在下载数据,容易加重设备与网络负担,使广告加载变慢。
- 若在
.didFailToLoad中收到错误,请勿在循环中立即反复加载。若必须重试,请限制次数,以免在受限网络下连续失败。
测试开屏广告集成
使用演示广告单元进行广告测试
我们建议使用测试广告来测试开屏广告集成和应用本身。
为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。
演示广告单元 ID:demo-appopenad-yandex。
重要
在商店中发布您的应用程序之前,确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。
您可以在 用于测试的演示广告单元 版块找到可用的演示广告版位 ID 列表。
验证广告集成是否正确
您可以使用本机控制台工具测试广告集成。
要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。
YMAMobileAds.enableLogging()
要查看 SDK 日志,请前往控制台工具并设置 Subsystem = com.mobile.ads.ads.sdk。您还可以按类别和错误级别过滤日志。
如果您在集成广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。
建议
-
不要在启动画面(Splash)之前展示开屏广告。
启动画面让体验更清晰,用户能确认打开的是您的应用。可在该画面用加载指示或文案提示广告结束后将继续应用内容。
-
若请求与展示之间存在延迟,用户可能短暂进入应用后看到与当前内容无关的广告,影响体验。可考虑在展示主内容前使用启动画面,并从该画面开始展示广告;若启动画面后立刻进入某段内容,则不宜此时展示广告。
-
新用户安装后不要立刻展示开屏广告。可等用户多次打开并使用应用后,再向满足条件(例如完成某关卡、打开次数达标、未参与激励任务等)的用户展示。
-
根据应用内行为调节展示频次,不要在每次冷/热启动都展示。
-
仅当应用在后台停留一定时间后再展示(例如 30 秒、2 分钟、15 分钟)。
-
请充分测试:每款应用不同,需在收入与留存、使用时长之间取舍;用户行为会变化,建议定期评估开屏策略。
其他资源
-
GitHub 链接。