自适应粘性横幅

自适应固定横幅广告是一种小型广告,会自动更新,并显示在应用屏幕的顶部或底部。它不会遮挡主要内容,常用于游戏应用中。

自适应固定横幅广告会针对每台设备优化广告尺寸,从而实现最佳效果。借助这种广告类型,开发者可设置广告允许的最大宽度,系统将自动确定最佳广告尺寸。

外观

本指南展示了如何使用 Jetpack Compose 扩展将自适应粘性横幅集成到 Android 应用中。 除了代码示例和说明之外,它还提供使用此广告格式的建议和其他资源的链接。

前提条件

  1. 按照快速入门 中描述的 SDK 集成步骤进行操作。
  2. 首先,您需要初始化 广告 SDK。
  3. 确保您使用的是最新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"))
}

实施

集成自适应粘性横幅的关键步骤:

  1. 使用 Banner 可组合项,并指定 BannerSize.Sticky 尺寸。
  2. 可选择传递 BannerEvents 以跟踪广告事件。

自适应粘性横幅集成说明

  1. 所有 Yandex Mobile Ads SDK 方法调用都必须在主线程中进行。

  2. 如果您在 onAdFailedToLoad() 回调中收到错误,请不要尝试立即加载新广告。 如果必须重试,请限制重新加载尝试次数,以避免在条件受限的情况下请求持续失败并出现连接问题。

  3. 自适应粘性横幅在充分利用可用宽度时效果最佳。 在大多数情况下,这将是设备的屏幕全宽。 确保考虑应用自身的内边距及显示安全区域。

  4. 广告尺寸通过 BannerSize.Sticky(width) 设置,其中宽度以 Dp 为单位进行传递(如 320.dp)。 高度会自动计算。 计算所需的上下文会在可组合项内部自动解析。

  5. 如果启用了聚合,则建议先等待初始化完成,然后再计算粘性横幅尺寸。 在初始化之前,只能使用初步尺寸,在接收实际设置后可能会发生变化。

  6. 对于同一设备,粘性横幅尺寸保持不变。 在特定设备上测试应用布局后,您可以确定广告尺寸将保持不变。

  7. 自适应粘性横幅高度不会超过屏幕高度的 15%,并且至少为 50 dp。

  8. 横幅状态通过 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 对象访问 campaignIdbannerIdplaceId 数据。

测试自适应粘性横幅集成

使用演示广告单元进行广告测试

使用测试广告来检查您的自适应固定横幅广告集成和应用本身。为了确保每次广告请求都能返回测试广告,您可以使用一个特殊的演示广告版位 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

如果存在任何横幅广告集成问题,您将收到详细的问题报告和故障排除建议。

其他资源