自适应内联横幅

自适应内联横幅是一种灵活的横幅广告格式,通过优化每个设备上的广告尺寸,实现最大效率。

这种广告类型允许开发者设置广告的最大允许宽度和高度,但最佳广告尺寸仍然是自动确定的。为了选择最佳广告尺寸,内置自适应横幅使用最大高度而不是固定高度。这为提高广告效果提供了空间。

通常,此格式用于基于内容流的场景,或适合将用户注意力主要放在广告上的场景。

展示效果

本指南介绍如何在 Compose Multiplatform 应用中集成自适应内联横幅。除示例外,还包含格式相关建议与更多资源链接。

前提条件

  1. 请按快速入门完成 Yandex Mobile Ads Compose Multiplatform 插件集成。
  2. 请使用最新的 Yandex Mobile Ads Compose Multiplatform 插件版本。若使用聚合,请同时使用最新的统一构建版本。

实现

集成自适应内联横幅的关键步骤:

  • Banner Composable 加入界面,并传入容器宽度与最大高度的 BannerAdSize.Inline
  • 通过 BannerEvents 设置广告生命周期回调。

自适应内联横幅集成注意事项

  1. 若在 onAdFailedToLoad 中收到错误,请勿立即重新加载。如确有必要,请限制重试次数。

  2. 为使自适应内联横幅正常工作,请将应用布局设为自适应,否则广告可能显示异常。

  3. 尽量使用可用全宽,通常为设备屏幕宽度,并考虑内边距与安全区域。

  4. 自适应内联横幅适合放在可滚动内容中;高度可与屏幕相同或由 API 限制最大高度。

  5. 使用 BannerAdSize.Inline(width, maxHeight) 描述尺寸,参数为容器可用宽度与允许的最大高度。

  6. BannerAdSize 承载后端选择最优尺寸的技术数据;每次加载渲染高度可能变化。若需像素级对齐,可在加载后测量容器。

将横幅加入布局

在需要内联横幅的位置(例如信息流的可滚动列内)使用 Banner Composable。

示例:

@Composable
fun BannerSlot(adRequest: AdRequest, containerWidth: Int, maxHeight: Int) {
    Banner(
        adRequest = adRequest,
        adSize = BannerAdSize.Inline(width = containerWidth, maxHeight = maxHeight),
        modifier = Modifier.fillMaxWidth(),
        events = BannerEvents(
            onAdLoaded = { /* ad loaded */ },
            onAdFailedToLoad = { error -> /* handle error */ },
            onAdClicked = { /* ad clicked */ },
            onImpression = { data -> /* impression tracked */ },
        ),
    )
}

加载与展示

Banner 进入组合后会自动为给定 AdRequest 加载并刷新广告。

BannerAdSize.Inline 传入父级或屏幕宽度及允许的最大高度,并考虑内边距与安全区域。可用 BoxWithConstraints 读取宽度:

BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
    val widthDp = maxWidth.value.toInt()
    Banner(
        adRequest = adRequest,
        adSize = BannerAdSize.Inline(width = widthDp, maxHeight = bannerMaxHeightDp),
        modifier = Modifier.fillMaxWidth(),
        events = BannerEvents(/* ... */),
    )
}

需要 Yandex Advertising Network 界面中的 adUnitId

使用 BannerEvents 跟踪加载结果与生命周期。可通过 AdRequest 扩展请求,详见 广告定向

加载示例(成功后自动展示):

@Composable
fun InlineBanner(adUnitId: String) {
    Banner(
        adRequest = AdRequest(adUnitId = adUnitId),
        adSize = BannerAdSize.Inline(width = 320, maxHeight = 50),
        modifier = Modifier.fillMaxWidth(),
        events = BannerEvents(
            onAdLoaded = {
                // The ad was loaded successfully and will be shown.
            },
            onAdFailedToLoad = { error ->
                // Ad failed to load with AdRequestError.
                // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
            },
            onAdClicked = {
                // Called when a click is recorded for an ad.
            },
            onImpression = { impressionData ->
                // Called when an impression is recorded for an ad.
            },
        ),
    )
}

集成时可将 adUnitId 设为 'demo-banner-yandex',发布前替换为真实 ID。

释放资源

离开页面时从组合中移除 Banner。不要仅为复用而保留隐藏实例;再次展示时请新建 BannerAdRequest

测试自适应内联横幅集成

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

我们建议使用测试广告来测试您的自适应内联横幅集成和应用本身。

为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 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

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

使用演示广告单元测试

我们建议使用测试广告来测试您的广告集成和应用本身。

为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。

演示广告单元 ID:demo-banner-yandex.

重要

在商店中发布您的应用程序之前,确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。

您可以在 用于测试的演示广告单元 部分找到可用的演示广告版位 ID 列表。

验证广告集成

您可以使用本机控制台工具测试广告集成。

要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。

YMAMobileAds.enableLogging()

要查看 SDK 日志,请前往控制台工具并设置 Subsystem = com.mobile.ads.ads.sdk。您还可以按类别和错误级别过滤日志。

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