自适应内联横幅 (SwiftUI)
自适应内嵌横幅广告是一种灵活的横幅广告格式,通过针对每台设备优化广告尺寸,确保投放效果达到最优。
借助这种广告类型,开发者可设置广告允许的最大宽度和高度,系统将自动确定最佳广告尺寸。为了选择最佳广告尺寸,自适应内嵌横幅广告采用最大高度而非固定高度,这有助于提升广告表现。
此格式通常用于基于信息流的应用,或可接受主要关注广告的场景。
外观
本指南展示了如何使用 SwiftUI 将自适应内联横幅集成到 iOS 应用中。 除了代码示例和说明之外,它还提供使用此广告格式的建议和其他资源的链接。
前提条件
- 请按照 快速入门 中描述的 SDK 集成步骤进行操作。
- 提前 初始化 您的广告 SDK。
- 确保您运行的是最新的 Yandex Mobile Ads SDK 版本。如果您使用聚合,请同时确保您运行的是最新版本的 统一构建。
实施
在 SwiftUI 中集成自适应内联横幅的关键步骤:
- 创建尺寸为
BannerSize.inline(width:maxHeight:)的BannerState,以及具有广告单元 ID 的AdRequest。 - 将
Banner(state:)添加到视图层次结构中,并传递BannerState。 - 通过
.onAdLoad、.onAdFailure修饰符订阅事件,并且可选择通过.onAdClick、.onAdImpression订阅事件。 - 如果您通过 Adfox 工作(通过
BannerState内的AdRequest参数),请传递其他设置。 - 展示广告:当屏幕上出现设置为
BannerState的Banner时,加载将开始;加载成功后,广告高度将更新。
自适应内联横幅集成说明
-
强烈建议在
.onAdFailure回调中收到错误时不要尝试加载新广告。 如果需要从.onAdFailure中加载广告,请限制重新加载尝试次数,以避免在网络连接受限的情况下广告请求连续失败。 -
为确保自适应内联横幅正常运行,请通过 SwiftUI 设置尺寸:使用
BannerSize.inline(width:maxHeight:)和父容器约束(宽度、内边距)。 仅固定外层frame而不考虑自适应高度可能会导致广告渲染错误。 -
自适应内联横幅在充分利用可用宽度时效果最佳。 在大多数情况下,这将是设备的屏幕全宽。 确保考虑应用自身的内边距及显示安全区域。
-
自适应内联横幅适合在可滚动内容中展示。 横幅高度可以与设备屏幕高度相当,也可以被限制为最大高度,具体取决于 API。
-
在 SwiftUI 中,将
Banner(state:)与BannerState(size: .inline(width:maxHeight:), request:)用于内联横幅。width参数是可用的容器宽度,maxHeight是允许的最大广告高度(类似于在 UIKit 中通过BannerAdSize.inline(width:maxHeight:)计算出的高度)。 -
对于相同的设备和尺寸参数,生成的广告区域是稳定的:加载后,高度将反映在内部
Banner布局中。
创建并展示横幅
要展示横幅广告,请向 SwiftUI 层次结构添加 Banner(state:),并传递尺寸为 .inline(width:maxHeight:) 的 BannerState 和具有广告 ID 的 AdRequest。
建议将 width 设置为屏幕宽度或父容器宽度,并考虑内边距和安全区域。
您还需要从 Yandex Advertising Network 界面获取广告单元 ID (adUnitId)。
示例 SwiftUI 屏幕:
import SwiftUI
import YandexMobileAds
struct InlineBannerView: View {
@State private var bannerState: BannerState?
var body: some View {
VStack {
if let bannerState {
Banner(state: bannerState)
.onAdLoad { _ in
// 广告已成功加载
}
.onAdFailure { error in
// 加载错误
}
}
Button("Load banner") {
bannerState = BannerState(
size: .inline(width: 320, maxHeight: 320),
request: AdRequest(adUnitID: "R-M-XXXXX-YY")
)
}
}
}
}
加载广告
当层次结构中出现设置了 BannerState 的 Banner ,并且分配了新的 BannerState 实例时,加载将开始:每次调用 BannerState(size:request:) 都会创建新的状态并开始加载。
要接收加载成功或失败的通知,并跟踪点击和展示数据,请使用 onAdLoad、onAdFailure、onAdClick、onAdImpression 修饰符。
您可以通过 AdRequest 传递用户兴趣数据、页面上下文数据、位置或其他附加数据来扩展广告请求参数。 请求中的附加上下文数据可以显著提高广告质量。 有关更多信息,请参阅广告定位。
示例:设置要加载的新 BannerState(.onAdLoad 在成功加载后调用):
struct InlineBannerView: View {
@State private var bannerState: BannerState?
func loadAd() {
bannerState = BannerState(
size: .inline(width: 320, maxHeight: 320),
request: AdRequest(adUnitID: "R-M-XXXXX-YY")
)
}
var body: some View {
VStack {
if let bannerState {
Banner(state: bannerState)
.onAdLoad { _ in }
.onAdFailure { _ in }
}
Button("Load", action: loadAd)
}
}
}
展示广告
成功加载后,广告会在 Banner 内展示;接收创意后,尺寸将更新。 将 Banner 放置在信息流或堆栈的所需位置,例如在 ScrollView + VStack 中,并设置适当的内边距。
struct InlineBannerView: View {
@State private var bannerState: BannerState?
var body: some View {
ScrollView {
VStack {
// 信息流内容
Text("Content")
if let bannerState {
Banner(state: bannerState)
.onAdLoad { _ in }
.onAdFailure { _ in }
}
}
.padding()
}
}
}
测试自适应内联横幅集成
使用演示版位进行广告测试
我们建议使用测试广告来测试您的广告集成和应用本身。
为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。
演示广告单元 ID:demo-banner-yandex.
重要
在商店中发布您的应用程序之前,确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。
您可以在 用于测试的演示广告单元 部分找到可用的演示广告版位 ID 列表。
验证广告集成的正确性
您可以使用本机控制台工具测试广告集成。
要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。
YMAMobileAds.enableLogging()
要查看 SDK 日志,请前往控制台工具并设置 Subsystem = com.mobile.ads.ads.sdk。您还可以按类别和错误级别过滤日志。
如果您在集成广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。
其他资源
- GitHub 链接。