Это руководство предназначено для издателей, интегрирующих рекламу в приложениях с помощью Google Mobile Ads SDK.
Реклама при запуске приложения — это специальный формат рекламы, предназначенный для издателей, желающих монетизировать загрузочные экраны своих приложений. Реклама при запуске приложения может быть закрыта в любой момент и предназначена для показа, когда пользователи выводят приложение на передний план.
Реклама при запуске приложения автоматически отображает небольшую область с фирменным стилем, чтобы пользователи знали, что они находятся в вашем приложении. Вот пример того, как выглядит реклама при запуске приложения:

Предпосылки
- Заполните руководство по началу работы .
Всегда проверяйте с помощью тестовых объявлений
При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для рекламы при открытии приложения:
/21775744923/example/app-open
Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.
Дополнительную информацию о работе тестовых объявлений Google Mobile Ads SDK см. в разделе Включение тестовых объявлений .
Расширить класс Application
 Создайте новый класс, расширяющий класс Application . Это обеспечивает управление рекламой с учётом жизненного цикла, привязанной к состоянию приложения, а не к отдельной Activity : 
Ява
public class MyApplication extends Application
    implements ActivityLifecycleCallbacks, DefaultLifecycleObserver {
  private AppOpenAdManager appOpenAdManager;
  private Activity currentActivity;
  @Override
  public void onCreate() {
    super.onCreate();
    this.registerActivityLifecycleCallbacks(this);
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    appOpenAdManager = new AppOpenAdManager();
  }
Котлин
class MyApplication :
  MultiDexApplication(), Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver {
  private lateinit var appOpenAdManager: AppOpenAdManager
  private var currentActivity: Activity? = null
  override fun onCreate() {
    super<MultiDexApplication>.onCreate()
    registerActivityLifecycleCallbacks(this)
    ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    appOpenAdManager = AppOpenAdManager()
  }
 Затем добавьте следующий код в AndroidManifest.xml :
<!-- TODO: Update to reference your actual package name. -->
<application
    android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>
Реализуйте свой компонент полезности
Ваша реклама должна отображаться быстро, поэтому лучше всего загрузить её до того, как она появится на экране. Таким образом, реклама будет готова к показу сразу после того, как пользователь зайдёт в приложение.
 Реализуйте вспомогательный компонент AppOpenAdManager для инкапсуляции работы, связанной с загрузкой и показом объявлений App Open: 
Ява
private class AppOpenAdManager {
  private static final String LOG_TAG = "AppOpenAdManager";
  private static final String AD_UNIT_ID = "/21775744923/example/app-open";
  private AppOpenAd appOpenAd = null;
  private boolean isLoadingAd = false;
  private boolean isShowingAd = false;
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private long loadTime = 0;
  /** Constructor. */
  public AppOpenAdManager() {}
Котлин
private inner class AppOpenAdManager {
  private val googleMobileAdsConsentManager =
  private var appOpenAd: AppOpenAd? = null
  private var isLoadingAd = false
  var isShowingAd = false
  /** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
  private var loadTime: Long = 0
 Чтобы использовать AppOpenAdManager , вызовите публичные методы-обёртки для экземпляра-одиночки MyApplication . Класс Application взаимодействует с остальной частью кода, делегируя работу по загрузке и показу рекламы менеджеру.
Загрузить объявление
 Следующим шагом является заполнение метода loadAd() и обработка обратных вызовов загрузки рекламы. 
Ява
Котлин
Замените AD_UNIT_ID на идентификатор вашего рекламного блока.
Показывать рекламу
Наиболее распространённая реализация запуска приложения — это попытка показать рекламу при запуске приложения непосредственно перед его запуском, запустить контент приложения, если реклама ещё не готова, и предварительно загрузить другую рекламу для следующего запуска приложения. Примеры реализации см. в руководстве по рекламе при запуске приложения .
Следующий код показывает и впоследствии перезагружает рекламу:
Ява
public void showAdIfAvailable(
    @NonNull final Activity activity,
    @NonNull OnShowAdCompleteListener onShowAdCompleteListener) {
  // If the app open ad is already showing, do not show the ad again.
  if (isShowingAd) {
    Log.d(TAG, "The app open ad is already showing.");
    return;
  }
  // If the app open ad is not available yet, invoke the callback then load the ad.
  if (appOpenAd == null) {
    Log.d(TAG, "The app open ad is not ready yet.");
    onShowAdCompleteListener.onShowAdComplete();
    // Load an ad.
    return;
  }
  isShowingAd = true;
  appOpenAd.show(activity);
}
Котлин
fun showAdIfAvailable(activity: Activity, onShowAdCompleteListener: OnShowAdCompleteListener) {
  // If the app open ad is already showing, do not show the ad again.
  if (isShowingAd) {
    Log.d(TAG, "The app open ad is already showing.")
    return
  }
  // If the app open ad is not available yet, invoke the callback then load the ad.
  if (appOpenAd == null) {
    Log.d(TAG, "The app open ad is not ready yet.")
    onShowAdCompleteListener.onShowAdComplete()
    // Load an ad.
    return
  }
  isShowingAd = true
  appOpenAd?.show(activity)
}
Установите FullScreenContentCallback
 Функция FullScreenContentCallback обрабатывает события, связанные с отображением AppOpenAd . Перед показом AppOpenAd обязательно установите функцию обратного вызова: 
Ява
appOpenAd.setFullScreenContentCallback(
    new FullScreenContentCallback() {
      @Override
      public void onAdDismissedFullScreenContent() {
        // Called when full screen content is dismissed.
        Log.d(TAG, "Ad dismissed fullscreen content.");
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        appOpenAd = null;
        isShowingAd = false;
        onShowAdCompleteListener.onShowAdComplete();
        // Load an ad.
      }
      @Override
      public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
        // Called when full screen content failed to show.
        Log.d(TAG, adError.getMessage());
        appOpenAd = null;
        // Don't forget to set the ad reference to null so you
        // don't show the ad a second time.
        isShowingAd = false;
        onShowAdCompleteListener.onShowAdComplete();
        // Load an ad.
      }
      @Override
      public void onAdShowedFullScreenContent() {
        Log.d(TAG, "Ad showed fullscreen content.");
      }
      @Override
      public void onAdImpression() {
        // Called when an impression is recorded for an ad.
        Log.d(TAG, "The ad recorded an impression.");
      }
      @Override
      public void onAdClicked() {
        // Called when ad is clicked.
        Log.d(TAG, "The ad was clicked.");
      }
    });
Котлин
appOpenAd?.fullScreenContentCallback =
  object : FullScreenContentCallback() {
    override fun onAdDismissedFullScreenContent() {
      // Called when full screen content is dismissed.
      Log.d(TAG, "Ad dismissed fullscreen content.")
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      appOpenAd = null
      isShowingAd = false
      onShowAdCompleteListener.onShowAdComplete()
      // Load an ad.
    }
    override fun onAdFailedToShowFullScreenContent(adError: AdError) {
      // Called when full screen content failed to show.
      Log.d(TAG, adError.message)
      // Don't forget to set the ad reference to null so you
      // don't show the ad a second time.
      appOpenAd = null
      isShowingAd = false
      onShowAdCompleteListener.onShowAdComplete()
      // Load an ad.
    }
    override fun onAdShowedFullScreenContent() {
      Log.d(TAG, "Ad showed fullscreen content.")
    }
    override fun onAdImpression() {
      // Called when an impression is recorded for an ad.
      Log.d(TAG, "The ad recorded an impression.")
    }
    override fun onAdClicked() {
      // Called when ad is clicked.
      Log.d(TAG, "The ad was clicked.")
    }
  }
Учитывайте срок действия объявления
 Чтобы убедиться, что объявление не будет показываться с истёкшим сроком действия, добавьте в AppOpenAdManager метод, который проверяет, сколько времени прошло с момента загрузки ссылки на ваше объявление. Затем используйте этот метод, чтобы проверить, актуально ли объявление. 
Ява
/** Check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
  long dateDifference = (new Date()).getTime() - loadTime;
  long numMilliSecondsPerHour = 3600000;
  return (dateDifference < (numMilliSecondsPerHour * numHours));
}
/** Check if ad exists and can be shown. */
private boolean isAdAvailable() {
  // For time interval details, see: https://support.google.com/admob/answer/9341964
  return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}
Котлин
/** Check if ad was loaded more than n hours ago. */
private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
  val dateDifference: Long = Date().time - loadTime
  val numMilliSecondsPerHour: Long = 3600000
  return dateDifference < numMilliSecondsPerHour * numHours
}
/** Check if ad exists and can be shown. */
private fun isAdAvailable(): Boolean {
  // For time interval details, see: https://support.google.com/admob/answer/9341964
  return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
}
Отслеживайте текущую активность
 Для показа рекламы вам понадобится контекст Activity . Чтобы отслеживать последние используемые активности, зарегистрируйтесь и реализуйте Application.ActivityLifecycleCallbacks . 
Ява
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {}
@Override
public void onActivityStarted(@NonNull Activity activity) {
  // An ad activity is started when an ad is showing, which could be AdActivity class from Google
  // SDK or another activity class implemented by a third party mediation partner. Updating the
  // currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
  // one that shows the ad.
  if (!appOpenAdManager.isShowingAd) {
    currentActivity = activity;
  }
}
@Override
public void onActivityResumed(@NonNull Activity activity) {}
@Override
public void onActivityPaused(@NonNull Activity activity) {}
@Override
public void onActivityStopped(@NonNull Activity activity) {}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {}
Котлин
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
  // An ad activity is started when an ad is showing, which could be AdActivity class from Google
  // SDK or another activity class implemented by a third party mediation partner. Updating the
  // currentActivity only when an ad is not showing will ensure it is not an ad activity, but the
  // one that shows the ad.
  if (!appOpenAdManager.isShowingAd) {
    currentActivity = activity
  }
}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
 registerActivityLifecycleCallbacks позволяет прослушивать все события Activity . Отслеживая запуск и завершение Activity, вы можете отслеживать ссылку на текущую Activity , которую затем будете использовать при отображении объявления об открытии приложения.
Прослушивание событий перехода приложения на передний план
Чтобы прослушивать события переднего плана приложения, выполните следующие действия:
Добавьте библиотеки в ваш файл Gradle
 Чтобы получать уведомления о событиях перехода приложения на передний план, необходимо зарегистрировать DefaultLifecycleObserver . Добавьте его зависимость в файл сборки уровня приложения: 
Котлин
dependencies { implementation("com.google.android.gms:play-services-ads:24.7.0") implementation("androidx.lifecycle:lifecycle-process:2.8.3") }
Круто
dependencies { implementation 'com.google.android.gms:play-services-ads:24.7.0' implementation 'androidx.lifecycle:lifecycle-process:2.8.3' }
Реализовать интерфейс наблюдателя жизненного цикла
 Вы можете прослушивать события переднего плана, реализовав интерфейс DefaultLifecycleObserver .
 Реализуйте метод onStart() для показа рекламы при открытии приложения. 
Ява
@Override
public void onStart(@NonNull LifecycleOwner owner) {
  DefaultLifecycleObserver.super.onStart(owner);
  appOpenAdManager.showAdIfAvailable(currentActivity);
}
Котлин
override fun onStart(owner: LifecycleOwner) {
  super.onStart(owner)
  currentActivity?.let {
    // Show the ad (if available) when the app moves to foreground.
    appOpenAdManager.showAdIfAvailable(it)
  }
}
Холодные старты и загрузочные экраны
До сих пор в документации предполагалось, что вы показываете рекламу при запуске приложения только тогда, когда пользователи выводят приложение на передний план, когда оно приостановлено в памяти. «Холодные запуски» происходят, когда приложение запускается, но ранее не было приостановлено в памяти.
Примером холодного запуска является первый запуск приложения пользователем. При холодном запуске у вас не будет ранее загруженной рекламы, готовой к немедленному показу. Задержка между запросом рекламы и её получением может привести к тому, что пользователи смогут немного попользоваться приложением, прежде чем столкнутся с внеконтекстной рекламой. Этого следует избегать, поскольку это негативно сказывается на пользовательском опыте.
Предпочтительный способ использования рекламы при запуске приложения при холодном запуске — использовать загрузочный экран для загрузки ресурсов игры или приложения и показывать рекламу только на загрузочном экране. Если приложение уже загрузилось и перенаправило пользователя на основной контент, не показывайте рекламу.
Лучшие практики
Реклама при запуске приложения помогает монетизировать загрузочный экран, при первом запуске приложения и при переключении между приложениями. Однако важно помнить о передовых практиках, чтобы пользователи получали удовольствие от использования приложения. Рекомендуется:
- Покажите первую рекламу при открытии приложения после того, как пользователи воспользуются им несколько раз.
- Показывайте рекламу при открытии приложения в то время, когда пользователям пришлось бы ждать загрузки приложения.
-  Если под рекламой при открытии приложения отображается загрузочный экран, и загрузка экрана завершается до закрытия рекламы, вы можете закрыть загрузочный экран в методе onAdDismissedFullScreenContent().
Примеры на GitHub
Следующие шаги
Изучите следующие темы: