自适应粘性横幅
自适应固定横幅广告是一种小型广告,会自动更新,并显示在应用屏幕的顶部或底部。它不会遮挡主要内容,常用于游戏应用中。
自适应固定横幅广告会针对每台设备优化广告尺寸,从而实现最佳效果。借助这种广告类型,开发者可设置广告允许的最大宽度,系统将自动确定最佳广告尺寸。
外观
本指南展示了如何使用 Jetpack Compose 扩展将自适应粘性横幅集成到 Android 应用中。 除了代码示例和说明之外,它还提供使用此广告格式的建议和其他资源的链接。
前提条件
- 按照快速入门 中描述的 SDK 集成步骤进行操作。
- 首先,您需要初始化 广告 SDK。
- 确保您使用的是最新Yandex Mobile Ads SDK 版本。如果您使用的是广告中介服务,请更新至最新的单一构建版本。
要使用 Compose 扩展,请在 build.gradle.kts 中添加依赖:
dependencies {
implementation("com.yandex.android:mobileads:8.1.0")
implementation("com.yandex.android:mobileads-compose:8.1.0")
// Compose BOM (最低版本 2024.01.00)
implementation(platform("androidx.compose:compose-bom:2025.03.00"))
}
实施
集成自适应粘性横幅的关键步骤:
- 使用
Banner可组合项,并指定BannerSize.Sticky尺寸。 - 可选择传递
BannerEvents以跟踪广告事件。
自适应粘性横幅集成说明
-
所有 Yandex Mobile Ads SDK 方法调用都必须在主线程中进行。
-
如果您在
onAdFailedToLoad()回调中收到错误,请不要尝试立即加载新广告。 如果必须重试,请限制重新加载尝试次数,以避免在条件受限的情况下请求持续失败并出现连接问题。 -
自适应粘性横幅在充分利用可用宽度时效果最佳。 在大多数情况下,这将是设备的屏幕全宽。 确保考虑应用自身的内边距及显示安全区域。
-
广告尺寸通过
BannerSize.Sticky(width)设置,其中宽度以Dp为单位进行传递(如320.dp)。 高度会自动计算。 计算所需的上下文会在可组合项内部自动解析。 -
如果启用了聚合,则建议先等待初始化完成,然后再计算粘性横幅尺寸。 在初始化之前,只能使用初步尺寸,在接收实际设置后可能会发生变化。
-
对于同一设备,粘性横幅尺寸保持不变。 在特定设备上测试应用布局后,您可以确定广告尺寸将保持不变。
-
自适应粘性横幅高度不会超过屏幕高度的 15%,并且至少为 50 dp。
-
横幅状态通过
rememberBannerAdState()创建,加载则是通过调用loadAd()显式触发。 如果adSize发生变化,BannerAdView将自动重新创建。
加载并展示广告
要展示粘性横幅,请通过 rememberBannerAdState() 创建状态,并指定 BannerSize.Sticky 尺寸,然后将此状态传递到 Banner 可组合项。 通过显式调用 loadAd() 触发加载。
要加载广告,您需要从 Yandex Advertising Network 界面获取广告单元 ID。
您可以通过 AdRequest.Builder() 传递用户兴趣数据、页面上下文数据、位置或其他附加数据来扩展广告请求参数。 请求中的附加上下文数据可以显著提高广告质量。 有关更多信息,请参阅广告定位。
自适应固定横幅广告示例
加载完成后,横幅广告将自动显示:
@Composable
fun MyScreen() {
val bannerState = rememberBannerAdState(
adSize = BannerSize.Sticky(width = 320.dp),
)
LaunchedEffect(Unit) {
bannerState.loadAd(AdRequest.Builder("your-ad-unit-id").build())
}
Banner(
state = bannerState,
modifier = Modifier.fillMaxWidth(),
)
}
要跟踪广告事件,请在创建状态时传递 BannerEvents:
@Composable
fun MyScreen() {
val bannerState = rememberBannerAdState(
adSize = BannerSize.Sticky(width = 320.dp),
events = BannerEvents(
onAdLoaded = { Log.d("YandexAds", "Баннер загружен") },
onAdFailedToLoad = { error -> Log.e("YandexAds", error.description) },
onAdClicked = { Log.d("YandexAds", "Клик по баннеру") },
onImpression = { data -> Log.d("YandexAds", "Показ: ${data?.rawData}") },
),
)
LaunchedEffect(Unit) {
bannerState.loadAd(AdRequest.Builder("your-ad-unit-id").build())
}
Banner(
state = bannerState,
modifier = Modifier.fillMaxWidth(),
)
}
如果您通过 Adfox 投放广告,则在横幅广告响应后,可以使用 AdAttributes 类型的 adAttributes 属性从 BannerAdView 对象访问 campaignId、bannerId 和 placeId 数据。
测试自适应粘性横幅集成
使用演示广告单元进行广告测试
使用测试广告来检查您的自适应固定横幅广告集成和应用本身。为了确保每次广告请求都能返回测试广告,您可以使用一个特殊的演示广告版位 ID。
演示广告单元 ID:demo-banner-yandex.
重要
在应用商店发布应用前,请务必将演示广告版位 ID 替换为您在 Yandex Advertising Network 接口中获取的真实 ID。
有关所有可用演示广告版位 ID 的列表,请参阅用于测试的演示广告单元。
测试广告集成
您可以使用 SDK 的内置分析工具检查自适应固定横幅广告是否已正确集成。日志中将显示包含测试结果的详细报告。
要查看报告,请在 Android 应用调试工具 Logcat 中搜索关键词“YandexAds”。
adb logcat -v brief '*:S YandexAds'
如果集成成功,将返回以下消息:
adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type banner was integrated successfully
如果存在任何横幅广告集成问题,您将收到详细的问题报告和故障排除建议。
其他资源
- GitHub 链接。