广告信息流

广告信息流是由一系列广告组成的单元。信息流可以作为应用的主要内容添加,或者添加到现有内容之后。信息流可能包含数十条广告,而这些广告会按顺序加载(一次加载多个广告)。

本指南介绍了将广告信息流集成到 Android 应用的过程。除了代码示例和说明之外,它还包含特定格式的建议以及指向其他资源的链接。

外观

前提条件

  1. 按照 快速入门 中描述的 SDK 集成步骤进行操作。
  2. 首先,您需要 初始化 广告 SDK。
  3. 确保您使用的是 最新版本的 Yandex Mobile Ads SDK

实施

集成广告信息流的关键步骤:

  • 使用 FeedAdAppearance 对象配置广告信息流的外观。
  • 使用 FeedAdRequestConfiguration 对象创建并设置请求配置。
  • 创建名为 FeedAd 的广告信息流对象,并为广告加载回调方法注册一个 FeedAdLoadListener
  • 通过调用 feedAd.preloadAd() 尽快预加载您的广告。
  • 创建名为 FeedAdAdapter 的适配器,并为事件回调方法注册一个 FeedAdEventListener
  • RecyclerView.adapter 设置 FeedAdAdapter

关键步骤

  1. 创建名为 FeedAdAppearance 的广告信息流的外观配置对象。

    可用的参数如下:

    • cardWidth(必需):以 dp(密度无关像素)为单位设置所投放广告的宽度。根据屏幕宽度减去所需的侧边距来计算参数值。
    • cardCornerRadius:以 dp(密度无关像素)为单位设置所投放广告的圆角半径。
    val feedMarginDp = 24
    val screenWidthDp = (screenWidth / resources.displayMetrics.density).roundToInt()
    val cardWidthDp = screenWidthDp - 2 * feedMarginDp
    val cardCornerRadiusDp = 16.0
    
    val feedAdAppearance = FeedAdAppearance.Builder(cardWidthDp)
              .setCardCornerRadius(cardCornerRadiusDp)
              .build()
    
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    
    int feedMarginDp = 24;
    int screenWidthDp = Math.round(displayMetrics.widthPixels / displayMetrics.density);
    val cardWidthDp = screenWidthDp - 2 * feedMarginDp;
    double cardCornerRadius = 16.0;
    
    FeedAdAppearance feedAdAppearance = new FeedAdAppearance.Builder(cardWidth)
        .setCardCornerRadius(cardCornerRadius)
        .build();
    
  2. 创建并配置 FeedAdRequestConfiguration 对象。

    您将需要在合作伙伴界面 (AD_UNIT_ID) 中获得的广告版位 ID。

    您可以通过在广告请求的 Builder 方法中提供有关用户兴趣、页面上下文、位置和其他附加数据的信息来扩展广告请求参数。在广告请求中添加额外的上下文信息可以极大地提高广告质量。请参阅广告定位版块了解更多信息。

    val AD_UNIT_ID = "R-M-XXXXXX-Y" // 为了进行调试,您可以使用 "demo-feed-yandex"
    val feedAdRequestConfiguration = FeedAdRequestConfiguration.Builder(AD_UNIT_ID).build()
    
    String AD_UNIT_ID = "R-M-XXXXXX-Y"; // 为了进行调试,您可以使用 "demo-feed-yandex"
    FeedAdRequestConfiguration feedAdRequestConfiguration = new FeedAdRequestConfiguration.Builder(AD_UNIT_ID).build();
    
  3. 创建名为 FeedAd 的广告信息流对象,并为广告加载回调方法注册一个 FeedAdLoadListener

    val feedAdLoadListener = object : FeedAdLoadListener {
    
        override fun onAdLoaded() {
    	       // 当收到额外的广告以供展示时调用
        }
    
        override fun onAdFailedToLoad(error: AdRequestError) {
    	       // 当额外的广告请求失败时调用
        }
    }
    
    val feedAd = FeedAd.Builder(context, feedAdRequestConfiguration, feedAdAppearance).build()
    feedAd.loadListener = feedAdLoadListener
    
    FeedAdLoadListener feedAdLoadListener = new FeedAdLoadListener() {
        @Override
        public void onAdLoaded() {
            // 当收到额外的广告以供展示时调用
        }
    
        @Override
        public void onAdFailedToLoad(AdRequestError error) {
            // 当额外的广告请求失败时调用
        }
    };
    
    FeedAd feedAd = new FeedAd.Builder(context, feedAdRequestConfiguration, feedAdAppearance).build();
    feedAd.setLoadListener(feedAdLoadListener);
    
  4. 使用 FeedAd 对象的 preloadAd() 方法尽快预加载您的广告。广告信息流预加载完成后,就会调用其中一个 FeedAdLoadListener 方法。

    feedAd.preloadAd()
    
    feedAd.preloadAd();
    
  5. 创建名为 FeedAdAdapter 的适配器,并为事件回调方法注册一个 FeedAdEventListener

    val feedAdEventListener = object : FeedAdEventListener {
    
        override fun onAdClicked() {
    	       // 当用户点击广告时调用
        }
    
        override fun onAdImpression(impressionData: ImpressionData?) {
    	       // 计为广告展示时调用
        }
    }
    
    val feedAdAdapter = FeedAdAdapter(feedAd)
    feedAdAdapter.eventListener = feedAdEventListener
    
    FeedAdEventListener feedAdEventListener = new FeedAdEventListener() {
        @Override
        public void onAdClicked() {
            // 当用户点击广告时调用
        }
    
        @Override
        public void onAdImpression(ImpressionData impressionData) {
            // 计为广告展示时调用
        }
    };
    
    FeedAdAdapter feedAdAdapter = new FeedAdAdapter(feedAd);
    feedAdAdapter.setEventListener(feedAdEventListener);
    
  6. 展示广告信息流。

    RecyclerView.adapter 中设置已创建的 FeedAdAdapter

    • Kotlin

      binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
      binding.feedRecyclerView.adapter = feedAdAdapter
      
    • Java

      binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
      binding.feedRecyclerView.setAdapter(feedAdAdapter);
      

    要将广告信息流添加到现有的 RecyclerView 列表,请使用 ConcatAdapter

    ConcatAdapter 允许您将现有列表的 RecyclerView 适配器与广告信息流适配器进行合并。向 ConcatAdapter 构建器传递参数的顺序决定了显示各个适配器列表的顺序。

    • Kotlin

      val screenContentDataAdapter = ScreenContentDataAdapter() // 您自己实施的 RecyclerView.Adapter
      val concatAdapter = ConcatAdapter(listOf(screenContentDataAdapter, feedAdAdapter))
      
      binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
      binding.feedRecyclerView.adapter = concatAdapter
      
    • Java

      ScreenContentDataAdapter screenContentDataAdapter = new ScreenContentDataAdapter(); // 您自己实施的 RecyclerView.Adapter
      ConcatAdapter concatAdapter = new ConcatAdapter(Arrays.asList(screenContentDataAdapter, feedAdAdapter));
      
      binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
      binding.feedRecyclerView.setAdapter(concatAdapter);
      

广告信息流集成的具体细节

  1. 所有调用 Yandex Mobile Ads SDK 方法的操作必须在主线程中完成。

测试广告信息流集成

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

使用测试广告来检查您的广告信息流集成和应用本身。

为了确保每个广告请求都返回测试广告,我们创建了一个特殊的演示广告版位 ID,旨在帮助您测试广告的集成情况。

演示 adUnitId:demo-feed-yandex

重要

在商店中发布您的应用之前,请确保将演示广告版位 ID 替换为在 Partner Interface 中获取的真实 ID。

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

测试广告集成

您可以使用 SDK 的内置分析器检查广告信息流是否正确集成。

该工具检查广告是否已正确启用,并向日志输出详细报告。 要查看报告,请在 Logcat 中使用“YandexAds”关键字进行搜索,Logcat 是一款用于调试 Android 应用的工具。

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 feed was integrated successfully

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

上一篇
下一篇