开屏广告

开屏广告是一种特殊的广告形式,通过应用程序的初始屏幕盈利。用户可随时关闭这些广告,其设计是用户在前台开启应用程序时展示广告,而无论是在启动时还是从后台返回时。

本指南将展示如何在打开 Android 应用时集成投放的广告。除了代码示例和说明之外,它还包含特定格式的建议和其他资源的链接。

限制

开屏广告只能投放在垂直方向的应用程序中。对于水平方向,不会选择这种广告。

布局

开屏广告包含 登录应用程序 按钮,以便用户知道他们正在使用您的应用并可以关闭广告。以下是广告的示例:

前提条件

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

术语和定义

  • 冷启动 是指启动一个不在 RAM 中的应用,创建一个新的应用会话。
  • 热启动 是指当应用在 RAM 中暂停时,将应用从后台模式切换到前台模式。

实施

  1. 在应用启动时初始化 SDK。
  2. 创建并设置 AppOpenAdLoader 广告加载器对象。
  3. 设置 AppOpenAdLoadListener 回调方法监听器,以在广告加载成功或失败时发出通知。
  4. 使用 loadAd(AdRequestConfiguration) 方法加载广告。
  5. 使用 LifecycleEventObserver 处理应用状态更改并显示开屏广告。
  6. 在呈现广告之前,设置 AppOpenAdEventListener 广告回调方法监听器。
  7. 使用 show(Activity) 方法呈现广告。
  8. 释放资源。

主要步骤

  1. 在应用启动时初始化 SDK。

    MobileAds.initialize(this) {
        // 现在您可以使用广告了
    }
    
    MobileAds.initialize(this, () -> {
        // 现在您可以使用广告了
    });
    
  2. 创建并设置 AppOpenAdLoader 广告加载器对象。

    您将需要来自 Partner Interface (AD_UNIT_ID) 的广告单元 ID 。

    您可以通过 AdRequestConfiguration.Builder() 传递用户兴趣、上下文应用数据、位置详细信息或其他数据来扩展广告请求参数。在请求中提供额外的上下文数据可以显著提高您的广告质量。请参阅广告定位版块了解更多信息。

    val appOpenAdLoader: AppOpenAdLoader = AppOpenAdLoader(application)
    val AD_UNIT_ID = "R-M-XXXXXX-Y" // 为了进行调试,您可以使用 "demo-appopenad-yandex"
    val adRequestConfiguration = AdRequestConfiguration.Builder(AD_UNIT_ID).build()
    
    final AppOpenAdLoader appOpenAdLoader = AppOpenAdLoader(application);
    final String AD_UNIT_ID = "R-M-XXXXXX-Y"; // 为了进行调试,您可以使用 "demo-appopenad-yandex"
    final AdRequestConfiguration adRequestConfiguration = new AdRequestConfiguration.Builder(AD_UNIT_ID).build();
    
  3. 设置 AppOpenAdLoadListener 回调方法监听器,以在广告加载成功或失败时发出通知。

    val appOpenAdLoadListener = object : AppOpenAdLoadListener {
       override fun onAdLoaded(appOpenAd: AppOpenAd) {
           // 广告加载成功。您现在可以展示广告。
           this@Activity.appOpenAd = appOpenAd
       }
    
       override fun onAdFailedToLoad(adRequestError: AdRequestError) {
           // 广告加载失败,出现 AdRequestError。
           // 强烈建议不要尝试通过 onAdFailedToLoad() 方法加载新广告。
       }
    }
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener)
    
    AppOpenAdLoadListener appOpenAdLoadListener = new AppOpenAdLoadListener() {
        @Override
        public void onAdLoaded(@NonNull final AppOpenAd appOpenAd) {
            // 广告加载成功。您现在可以展示广告。
            mAppOpenAd = appOpenAd;
        }
    
        @Override
        public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
            // 广告加载失败,出现 AdRequestError。
            // 强烈建议不要尝试通过 onAdFailedToLoad() 方法加载新广告。
        }
    };
    
    appOpenAdLoader.setAdLoadListener(appOpenAdLoadListener);
    
  4. 使用 loadAd(AdRequestConfiguration) 方法加载广告。

    appOpenAdLoader.loadAd(adRequestConfiguration)
    
    appOpenAdLoader.loadAd(adRequestConfiguration);
    
  5. 使用 LifecycleEventObserver 处理应用状态更改并显示开屏广告。

    val processLifecycleObserver = DefaultProcessLifecycleObserver(
        onProcessCameForeground = ::showAppOpenAd
    )
    ProcessLifecycleOwner.get().lifecycle.addObserver(processLifecycleObserver)
    
    final DefaultProcessLifecycleObserver processLifecycleObserver = new DefaultProcessLifecycleObserver() {
        @Override
        public void onProcessCameForeground() {
            showAppOpenAd();
        }
    }
    
    ProcessLifecycleOwner.get().getLifecycle().addObserver(processLifecycleObserver);
    
  6. 在呈现广告之前,设置 AppOpenAdEventListener 广告回调方法监听器。

    private inner class AdEventListener : AppOpenAdEventListener {
        override fun onAdShown() {
            // 广告展示时调用。
        }
    
        override fun onAdFailedToShow(adError: AdError) {
            // 广告展示失败时调用。
        }
    
        override fun onAdDismissed() {
            // 广告关闭时调用。
            // 关闭后清理资源并预加载新广告。
            clearAppOpenAd()
            loadAppOpenAd()
        }
    
        override fun onAdClicked() {
            // 记录广告点击时调用。
        }
    
        override fun onAdImpression(impressionData: ImpressionData?) {
            // 记录广告展示次数时调用。
            // 在参数中获取展示层级收入数据。
        }
    }
    
    private val appOpenAdEventListener = AdEventListener()
    appOpenAd?.setAdEventListener(appOpenAdEventListener)
    
    AppOpenAdEventListener appOpenAdEventListener = new AppOpenAdEventListener() {
       @Override
       public void onAdShown() {
           // 广告展示时调用。
       }
    
       @Override
       public void onAdFailedToShow(@NonNull final AdError adError) {
           // 广告展示失败时调用。
       }
    
       @Override
       public void onAdDismissed() {
           // 广告关闭时调用。
           // 关闭后清理资源并预加载新广告。
           clearAppOpenAd();
           loadAppOpenAd();
       }
    
       @Override
       public void onAdClicked() {
           // 记录广告点击时调用。
       }
    
       @Override
       public void onAdImpression(@Nullable final ImpressionData impressionData) {
           // 记录广告展示次数时调用。
       }
    };
    
    if (mAppOpenAd != null) {
       mAppOpenAd.setAdEventListener(appOpenAdEventListener);
    }
    
  7. 使用 show 方法呈现广告。

    private fun showAppOpenAd() {
        appOpenAd?.show(activity)
    }
    
    private void showAppOpenAd() {
        if (mAppOpenAd != null) {
           mAppOpenAd.show(activity);
        }
    }
    
  8. 释放资源。

    这可以防止内存泄漏。

    private fun clearAppOpenAd() {
        appOpenAd?.setAdEventListener(null)
        appOpenAd = null
    }
    
    private void clearAppOpenAd() {
        if (mAppOpenAd != null) {
            mAppOpenAd.setAdEventListener(null);
            mAppOpenAd = null;
        }
    }
    

开屏广告集成的特点

  1. 所有调用 Yandex Mobile Ads SDK 方法的操作必须在主线程中完成。
  2. 加载可能需要一段时间,因此如果广告尚未加载,请勿增加冷启动时间。
  3. 预加载广告以便后续在热启动期间显示。
  4. 我们不建议您在应用启动期间同时加载开屏广告和其他广告格式,因为此时应用可能正在下载运营数据。这可能会使设备和互联网连接超载,从而导致广告加载时间变长。
  5. 如果您在 onAdFailedToLoad() 回调中收到错误,请不要尝试再次加载新广告。如果必须这样做,请限制广告重新加载尝试的次数。这将有助于避免出现限制时持续出现不成功的请求和连接问题。

在发布时测试广告集成

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

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

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

演示广告单元 ID:demo-appopenad-yandex

重要

在商店中发布您的应用之前,请确保将演示广告版位 ID 替换为从 Partner Interface 获取的真实广告版位 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 App Open Ad was integrated successfully

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

建议

  1. 不要在启动屏幕之前呈现开屏广告。

    通过显示启动屏幕,您可以增强用户的应用体验,使其更加流畅,令用户愉悦。这将避免用户感到惊讶或困惑,并确保他们打开了正确的应用。在同一屏幕上,您可以提醒用户即将展示的广告。使用加载指示器或简单的文本信息告知用户他们将在广告结束后继续查看应用内容。

  2. 如果请求和呈现广告之间存在延迟,用户可能会短暂打开您的应用,然后意外地看到与内容无关的广告。这会对用户体验产生负面影响,因此需要避免。一种解决方案是在显示主应用内容之前使用启动屏幕,并从该屏幕开始广告呈现。如果应用在启动屏幕后打开一些内容,则最好不要呈现广告。

  3. 等到新用户打开应用并使用几次后,再呈现开屏广告。仅向应用中满足特定条件的用户呈现广告(例如,通过了特定级别、打开了特定次数的应用或未参与奖励优惠)。不要在用户安装应用后立即呈现广告。

  4. 根据应用用户行为调节广告呈现频率。不要在每次冷/热应用启动时呈现广告。

  5. 仅当应用在后台运行一段时间(例如 30 秒、2 分钟、15 分钟)时才呈现广告。

  6. 确保运行了彻底的测试,因为每款应用都是独特的,并且需要特殊的方法来最大限度地提高收入,而不降低用户留存率或减少花费在应用上的时间。用户行为和参与度可能会随着时间的推移而发生变化,因此我们建议定期测试您用于开屏广告的策略。

其他资源