广告滑块

原生广告是一种布局可以在应用级别定义的广告类型。这一功能允许您根据应用设计的具体上下文更改广告的视觉风格以及投放位置。

广告呈现通过本地平台工具执行,从而提高广告效果和质量。

原生广告可以增强广告体验。因此,您可以在不失去用户兴趣的情况下展示更多广告。从长远来看,这确保了广告收入的最大化。

前提条件

  1. 按照快速入门 中描述的 SDK 集成步骤进行操作。
  2. 首先,您需要初始化 广告 SDK。
  3. 确保您使用的是最新Yandex Mobile Ads SDK 版本。如果您使用的是广告中介服务,请更新至最新的单一构建版本

实施

集成原生广告(滑块)的关键步骤:

  • 创建并配置 SliderAdLoader 广告加载器。
  • 注册广告加载器事件监听器:SliderAdLoadListener
  • 加载广告。
  • 展示加载的广告。

原生广告集成的特点

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

  2. 如果您在 onAdFailedToLoad() 回调中收到错误,请不要尝试再次加载新广告。 如果没有其他选项,请限制广告加载重试次数。 这将有助于避免出现限制时持续出现不成功的请求和连接问题。

  3. 我们建议在托管广告交互的屏幕的整个生命周期内保持对 SliderAd 广告对象及其加载器 SliderAdLoader 的强引用。

  4. 加载滑块后,您必须渲染其所有素材。 您可以从 SliderAd 对象获取可用于广告的素材列表。

  5. 滑块包含一组广告,其中每个广告都需要展示。

  6. 滑块内的每个广告都包含一组素材。 您可以从 NativeAd 广告对象获取可用于广告的组件列表。 所有必需的广告素材均需要渲染。 您可以在原生广告素材页面找到广告素材的描述。

  7. 我们建议根据广告内容计算广告容器的大小。

  8. 滑块中的广告必须显示在同一个共享容器中:否则,广告展示次数将不予统计。

  9. 带有视频的广告通常效果更好。 要展示视频广告,广告容器和 MediaView 组件的大小应至少为 300x160 dp(密度无关像素)。

  10. 我们建议您使用包含完整的可能素材集的布局。 根据我们的经验,包含整套素材的布局转换效果更好。

加载滑块

要加载原生广告滑块,请创建 SliderAdLoader 对象。

广告请求参数使用 NativeAdRequestConfiguration.Builder 类对象进行配置。 您可以使用广告单元 ID、加载图像的方法、年龄、性别以及其他可能提高广告选择质量的数据作为请求参数。

要接收有关广告加载结果的通知,请创建 SliderAdLoadListener 实例并将其设置为广告滑块加载器的事件监听器。

要加载广告,请调用 loadAd() 方法。

以下示例展示了如何从活动加载原生广告:

class SliderNativeAdActivity : AppCompatActivity(R.layout.activity_slider_native_ad) {

    private val nativeAdView get() = binding.nativeAd.root

    private var sliderAdLoader: SliderAdLoader? = null

    private lateinit var binding: ActivityCustomNativeAdBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityCustomNativeAdBinding.inflate(layoutInflater)
        setContentView(binding.root)

        sliderAdLoader = createSliderAdLoader()
        sliderAdLoader?.loadSlider(
            // 可在此处使用 NativeAdRequestConfiguration.Builder 类中的方法指定各个选项设置。
            NativeAdRequestConfiguration.Builder("your-ad-unit-id").build()
        )
    }

    private fun createSliderAdLoader(): SliderAdLoader {
        return sliderAdLoader ?: SliderAdLoader(this).apply {
            setSliderAdLoadListener(object : SliderAdLoadListener {
                override fun onSliderAdLoaded(p0: SliderAd) {
                    // 滑块广告已成功加载。 现在您可以显示已加载的广告。
                }

                override fun onSliderAdFailedToLoad(p0: AdRequestError) {
                    // 广告因 AdRequestError 无法加载。
                    // 强烈建议不要尝试通过 onAdFailedToLoad() 方法加载新广告。
                }
            })
        }
    }
}
class CustomSliderNativeAdActivity extends AppCompatActivity {
    private NativeAdView mNativeAdView = mBinding.nativeAd.getRoot();

    @Nullable
    private SliderAdLoader mSliderAdLoader = null;

    private ActivityCustomNativeAdBinding mBinding;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityCustomNativeAdBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        mSliderAdLoader = createSliderAdLoader();
        if (mSliderAdLoader != null) {
            // 可在此处使用 NativeAdRequestConfiguration.Builder 类中的方法指定各个选项设置。
            mSliderAdLoader.loadSlider(
                    new NativeAdRequestConfiguration.Builder("your-ad-unit-id").build()
            );
        }
    }

    private SliderAdLoader createSliderAdLoader() {
        if (mSliderAdLoader != null) {
            return mSliderAdLoader;
        }

        final SliderAdLoader newSliderAdLoader = new SliderAdLoader(this);

        newSliderAdLoader.setSliderAdLoadListener(new SliderAdLoadListener() {
            @Override
            public void onSliderAdLoaded(@NonNull SliderAd sliderAd) {
                // 滑动广告已成功加载。 现在您可以显示已加载的广告。
            }

            @Override
            public void onSliderAdFailedToLoad(@NonNull final AdRequestError error) {
                // 广告因 AdRequestError 无法加载。
                // 强烈建议不要尝试通过 onAdFailedToLoad() 方法加载新广告。
            }
        });
        return mSliderAdLoader;
    }
}

渲染原生广告滑块

加载滑块后,您必须渲染其所有素材。

成功加载的滑块包含一个或多个具有相同上下文的原生广告。 滑块中的广告必须显示在同一个共享容器中:否则,广告展示次数将不予统计。

手动设置原生广告滑块的布局

使用此方法,您可以通过相对定位广告组件来安排原生广告的滑块。 您的广告可能包含强制和可选的显示资产。 您可以在原生广告素材中找到完整列表。

提示

对于滑动器中的每一个广告,我们建议使用包含一整套可能素材的布局。 经验表明,包含一整套素材的布局更易被点击。

SliderAd 对象链接到根 NativeAdView 对象,并将滑块中的每个广告链接到子 NativeAdView 对象。

滑块中的每个广告均使用标准原生广告布局方法进行布局。

代码示例
private fun showAd(sliderAd: SliderAd) {
    try {
        val sliderViewBinder = NativeAdViewBinder.Builder(sliderAdView).build()
        sliderAd.bindSliderAd(sliderViewBinder)
        val nativeAds = sliderAd.nativeAds
        for (nativeAd in nativeAds) {
            val nativeAdView: NativeAdView =
                mLayoutInflater.inflate(R.layout.widget_native_ad, sliderAdView, false)
            val viewBinder = NativeAdViewBinder.Builder(nativeAdView)
                .setAgeView(age)
                .setBodyView(body)
                .setCallToActionView(callToAction)
                .setDomainView(domain)
                .setFaviconView(favicon)
                .setFeedbackView(feedback)
                .setIconView(icon)
                .setMediaView(media)
                .setPriceView(price)
                .setRatingView(rating)
                .setReviewCountView(reviewCount)
                .setSponsoredView(sponsored)
                .setTitleView(title)
                .setWarningView(warning)
                .build()
            nativeAd.bindNativeAd(viewBinder)
            sliderAdView.addView(nativeAdView)
        }
    } catch (exception: NativeAdException) {
        //日志错误
    }
}
private void showAd(@NonNull final SliderAd sliderAd) {
    try {
        final NativeAdViewBinder sliderViewBinder = new NativeAdViewBinder.Builder(mSliderAdView).build();
        sliderAd.bindSliderAd(sliderViewBinder);
        final List<NativeAd> nativeAds = sliderAd.getNativeAds();
        for (final NativeAd nativeAd : nativeAds) {
            final NativeAdView nativeAdView = mLayoutInflater.inflate(R.layout.widget_native_ad, mSliderAdView, false);
            final NativeAdViewBinder viewBinder = new NativeAdViewBinder.Builder(nativeAdView)
                    .setAgeView(age)
                    .setBodyView(body)
                    .setCallToActionView(callToAction)
                    .setDomainView(domain)
                    .setFaviconView(favicon)
                    .setFeedbackView(feedback)
                    .setIconView(icon)
                    .setMediaView(media)
                    .setPriceView(price)
                    .setRatingView(rating)
                    .setReviewCountView(reviewCount)
                    .setSponsoredView(sponsored)
                    .setTitleView(title)
                    .setWarningView(warning)
                    .build();

            nativeAd.bindNativeAd(viewBinder);
            mSliderAdView.addView(nativeAdView);
        }
    } catch (final NativeAdException exception) {
        //日志错误
    }
}

测试原生广告滑块的集成

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

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

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

原生广告滑块的的演示 adUnitIddemo-native-slider-yandex

重要

在商店中发布应用之前,请确保将演示广告单元 ID 替换为从 Yandex Advertising Network 界面获取的真实 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] Slider native ad was integrated successfully

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