自适应固定横幅

这是一个自动更新的小广告,放置在应用屏幕的顶部或底部。它与主要应用内容不重叠,常用于游戏应用中。

自适应粘性横幅通过优化每个设备上的广告尺寸,实现最大效率。这种广告类型允许开发者设置广告的最大允许宽度,但最佳广告尺寸仍然是自动确定的。自适应粘性横幅的高度不应超过屏幕高度的 15%。

外观

本指南说明如何借助 Jetpack Compose 扩展在 Android 应用中集成自适应固定横幅。 除代码示例与操作步骤外,还包含该广告格式的使用建议及相关资源链接。

前置条件

  1. 按照 快速入门 中描述的 SDK 集成步骤进行操作。
  2. 提前 初始化 您的广告 SDK。
  3. 确保您运行的是最新的 Yandex Mobile Ads SDK 版本。如果您使用聚合,请同时确保您运行的是最新版本的 统一构建

要使用 Compose 扩展,请在 build.gradle.kts 中添加依赖:

dependencies {
    implementation("com.yandex.android:mobileads:8.0.0")
    implementation("com.yandex.android:mobileads-compose:8.0.0")

    // Compose BOM(最低 2024.01.00)
    implementation(platform("androidx.compose:compose-bom:2025.03.00"))
}

实现

集成自适应固定横幅的关键步骤:

  • 使用 BannerSize.Sticky 尺寸的 Banner Composable。
  • 可选传入 BannerEvents 以跟踪广告事件。

自适应固定横幅集成注意事项

  1. 所有对 Yandex Mobile Ads SDK 的方法调用均须在主线程执行。

  2. 若在 onAdFailedToLoad() 回调中收到错误,请勿立即尝试加载新广告。若必须重试,请限制重试次数,以免在受限网络环境下出现连续失败请求与连接问题。

  3. 自适应固定横幅在占满可用宽度时效果最佳;多数情况下应使用设备整屏宽度。请计入应用内边距与安全显示区域。

  4. 广告尺寸通过 BannerSize.Sticky(width) 设置,宽度以 Dp 传入(例如 320.dp)。高度由系统自动计算。Composable 内部会自动解析用于计算的 Context。

  5. 若已启用聚合(mediation),建议在初始化完成后再计算固定横幅尺寸。初始化完成前仅能得到预估尺寸,收到实际配置后可能发生变化。

  6. 在同一设备上,固定横幅尺寸保持不变。在特定设备上完成版式验证后,可认为该设备上的广告尺寸稳定。

  7. 自适应固定横幅高度不超过屏幕高度的 15%,且不低于 50 dp。

  8. 横幅状态通过 rememberBannerAdState() 创建,需显式调用 loadAd() 触发加载。若 adSize 发生变化,BannerAdView 会自动重建。

加载与展示广告

要展示固定横幅,请使用 BannerSize.Sticky 调用 rememberBannerAdState() 创建状态,再将其传入 Banner Composable,并通过显式调用 loadAd() 触发加载。

您需要来自 Yandex Advertising Network 界面的广告单元 ID。

可通过 AdRequest.Builder() 扩展广告请求参数,传入用户兴趣、页面上下文、地理位置等附加数据。请求中的额外上下文数据有助于显著提升广告质量。详见广告定向

以下示例展示如何展示自适应固定横幅。加载成功后横幅会自动显示:

import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.compose.Banner
import com.yandex.mobile.ads.compose.BannerSize
import com.yandex.mobile.ads.compose.rememberBannerAdState

@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

import com.yandex.mobile.ads.common.AdRequest
import com.yandex.mobile.ads.compose.Banner
import com.yandex.mobile.ads.compose.BannerEvents
import com.yandex.mobile.ads.compose.BannerSize
import com.yandex.mobile.ads.compose.rememberBannerAdState

@Composable
fun MyScreen() {
    val bannerState = rememberBannerAdState(
        adSize = BannerSize.Sticky(width = 320.dp),
        events = BannerEvents(
            onAdLoaded = { Log.d("YandexAds", "Banner loaded") },
            onAdFailedToLoad = { error -> Log.e("YandexAds", error.description) },
            onAdClicked = { Log.d("YandexAds", "Banner clicked") },
            onImpression = { data -> Log.d("YandexAds", "Impression: ${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

如果您在集成横幅广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。

其他资源