Как настроить межстраничные объявления

Межстраничные объявления – это полноэкранный формат, который закрывает все элементы интерфейса приложения. Такие объявления показываются при естественных переходах между разделами приложения или уровнями игры.

Когда в приложении показывается межстраничное объявление, пользователь может нажать на него и перейти на сайт рекламодателя или закрыть объявление и вернуться в приложение. Ознакомьтесь с этим исследованием.

В этом руководстве рассказывается, как интегрировать межстраничные объявления в приложение для Android.

Подготовка

Прежде чем продолжить, выполните следующие действия:

  • Настройте GMA Next-Gen SDK.
  • Используйте идентификатор тестового рекламного блока для межстраничных объявлений ca-app-pub-3940256099942544/1033173712.
    • При создании и тестировании приложения используйте тестовые объявления, а не реальные. Если вы не будете использовать тестовый идентификатор рекламного блока, Google может заблокировать ваш аккаунт.
    • Перед публикацией приложения замените этот идентификатор на идентификатор рекламного блока.
    • Подробнее GMA Next-Gen SDK о включении тестовых объявлений…

Предварительная загрузка объявлений (бета)

Предварительная загрузка объявлений в GMA Next-Gen SDK автоматизирует загрузку и кеширование объявлений.

Предварительная загрузка объявлений дает следующие преимущества:

  • Управление ссылками. Ссылки сохраняются до показа объявлений.
  • Автоматическая перезагрузка. Новое объявление загружается, когда одно из них извлекается из кеша.
  • Управляемые повторные попытки. Если не удается загрузить объявление, выполняется повторная попытка.
  • Обработка истечения срока действия. Объявления обновляются до истечения срока действия.
  • Оптимизация кеша. Порядок кеширования оптимизируется так, чтобы показывать объявления с наивысшим приоритетом.
Примечание. Чтобы загрузить объявления вручную, ознакомьтесь с разделом Как загрузить одно межстраничное объявление.

Как начать предварительную загрузку объявлений

Чтобы начать предварительную загрузку объявлений, вызовите метод start один раз при запуске приложения. После вызова метода start GMA Next-Gen SDK автоматически выполняется предварительная загрузка объявлений и повторные попытки выполнить неудачные запросы для предварительно загруженных конфигураций.

В примере ниже показано, как начать предварительную загрузку объявлений:

Kotlin

private fun startPreloading(adUnitId: String) {
  // Call start() once after SDK initialization.
  // Preload only one ad unit per format to optimize performance.
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void startPreloading(String adUnitId) {
  // Call start() once after SDK initialization.
  // Preload only one ad unit per format to optimize performance.
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

Замените AD_UNIT_ID идентификатором рекламного блока.

В предыдущем примере показано, как использовать идентификатор рекламного блока в качестве идентификатора предварительной загрузки. Идентификатор предварительной загрузки – это строка, которую вы создаете, чтобы идентифицировать конфигурацию предварительной загрузки объявлений. Если для одного и того же идентификатора рекламного блока в вашем приложении требуется несколько конфигураций таргетинга, передайте специальный строковый идентификатор.

Как получить и показать предзагруженное объявление

Чтобы показать объявление, вызовите метод pollAd. GMA Next-Gen SDK получает доступное объявление и автоматически предварительно загружает следующее объявление в фоновом режиме. Если объявление недоступно, GMA Next-Gen SDK не возвращает никаких объявлений.

Когда объект объявления будет доступен, вызовите метод show, чтобы показать объявление. В примере ниже показано, как получить и показать предварительно загруженное объявление:

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = InterstitialAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "Interstitial ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "Interstitial ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : InterstitialAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "Interstitial ad recorded an impression.")
      }
    }
  ad.show(activity)
}

Java

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final InterstitialAd ad = InterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad == null) {
    Log.e(TAG, "Interstitial ad is not available.");
    return;
  }

  Log.d(TAG, "Interstitial ad response info: " + ad.getResponseInfo());
  ad.setAdEventCallback(
      new InterstitialAdEventCallback() {
        @Override
        public void onAdImpression() {
          Log.d(TAG, "Interstitial ad recorded an impression.");
        }
      });

  // Show the ad.
  ad.show(activity);
}

Пока вы не будете готовы показывать объявление, не вызывайте метод pollAd. Чтобы прочитать информацию об ответе на объявление, не показывая его, ознакомьтесь с разделом Как прочитать информацию об ответе.

Как отслеживать события объявлений

Перед показом объявления прослушайте события объявления. В примере ниже показано, как зарегистрировать обратные вызовы для событий объявлений:

Kotlin

// Listen for ad events.
val ad = interstitialAd
if (ad == null) {
  Log.e(TAG, "Interstitial ad is not ready yet.")
  return
}

ad.adEventCallback =
  object : InterstitialAdEventCallback {
    override fun onAdShowedFullScreenContent() {
      // Interstitial ad did show.
    }

    override fun onAdDismissedFullScreenContent() {
      // Interstitial ad did dismiss.
      interstitialAd = null
    }

    override fun onAdFailedToShowFullScreenContent(
      fullScreenContentError: FullScreenContentError
    ) {
      // Interstitial ad failed to show.
      Log.e(TAG, "Interstitial ad failed to show: ${fullScreenContentError.message}")
    }

    override fun onAdImpression() {
      // Interstitial ad did record an impression.
    }

    override fun onAdClicked() {
      // Interstitial ad did record a click.
    }
  }

Java

// Listen for ad events.
if (interstitialAd == null) {
  Log.e(TAG, "Interstitial ad is not ready yet.");
  return;
}

interstitialAd.setAdEventCallback(
    new InterstitialAdEventCallback() {
      @Override
      public void onAdShowedFullScreenContent() {
        // Interstitial ad did show.
      }

      @Override
      public void onAdDismissedFullScreenContent() {
        // Interstitial ad did dismiss.
        interstitialAd = null;
      }

      @Override
      public void onAdFailedToShowFullScreenContent(
          @NonNull FullScreenContentError fullScreenContentError) {
        // Interstitial ad failed to show.
        Log.e(TAG, "Interstitial ad failed to show: " + fullScreenContentError.getMessage());
      }

      @Override
      public void onAdImpression() {
        // Interstitial ad did record an impression.
      }

      @Override
      public void onAdClicked() {
        // Interstitial ad did record a click.
      }
    });

Как отслеживать события предварительной загрузки (необязательно)

Когда вы начнете предварительную загрузку объявлений, зарегистрируйтесь для получения уведомлений о том, что объявления успешно загружены, не загружены или кеш объявлений исчерпан.

В примере ниже показано, как зарегистрироваться для получения событий предзагрузки объявлений:

Kotlin

val preloadCallback =
  // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(
        TAG,
        ("Interstitial preload ad $preloadId failed to load with error: ${adError.message}"),
      )
    }

    override fun onAdsExhausted(preloadId: String) {
      Log.i(TAG, "Interstitial preload ad $preloadId is not available")
      // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
    }

    override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
      Log.i(TAG, "Interstitial preload ad $preloadId is available")
    }
  }
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)

Java

PreloadCallback preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "Interstitial preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
        // [Optional] Get the error response info for additional details.
        // ResponseInfo responseInfo = adError.getResponseInfo();
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        Log.i(TAG, "Interstitial preload ad " + preloadId + " is not available");
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      @Override
      public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        Log.i(TAG, "Interstitial preload ad " + preloadId + " is available");
      }
    };

AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

Если объявление не загружается, GMA Next-Gen SDK автоматически предзагружает объявления и повторяет неудачные запросы для предзагруженных конфигураций.

Как проверить доступность объявления (необязательно)

Если вам нужно узнать, доступно ли объявление, проверьте его доступность. В следующем примере проверяется, доступно ли предварительно загруженное объявление:

Kotlin

private fun isAdAvailable(adUnitId: String): Boolean {
  return InterstitialAdPreloader.isAdAvailable(adUnitId)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return InterstitialAdPreloader.isAdAvailable(adUnitId);
}

Как задать размер буфера (необязательно)

Размер буфера определяет количество предварительно загруженных объявлений, хранящихся в памяти. По умолчанию Google оптимизирует размер буфера, чтобы сбалансировать потребление памяти и задержку показа рекламы. Вы можете задать собственный размер буфера, чтобы увеличить количество объявлений, хранящихся в памяти. Мы рекомендуем использовать буфер, в котором будет два предварительно загруженных объявления.

В следующем примере показано, как задать размер буфера:

Kotlin

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

Лимиты предварительной загрузки кеша

GMA Next-Gen SDK устанавливает ограничение на общее количество предварительно загруженных объявлений в приложении для всех рекламных блоков и идентификаторов предварительной загрузки:

  • Ограничение по умолчанию: Google хранит в памяти не более шести предварительно загруженных объявлений. Это ограничение распространяется на все форматы и идентификаторы предварительной загрузки.
  • Мы рекомендуем задать для каждого идентификатора предзагрузки размер буфера, равный двум.

Как отключить предварительную загрузку рекламы (необязательно)

Если вам не нужно показывать объявления с определенным идентификатором предварительной загрузки в течение сеанса, вы можете остановить предварительную загрузку. Чтобы прекратить загрузку объявлений для определенного идентификатора предварительной загрузки, вызовите метод destroy с этим идентификатором. При вызове метода destroy из кеша удаляются все предварительно загруженные объявления, связанные с идентификатором предварительной загрузки.

В следующем примере показано, как отключить предварительную загрузку объявлений:

Kotlin

private fun stopPreloading(adUnitId: String) {
  // Stops the preloading and destroy preloaded ads.
  InterstitialAdPreloader.destroy(adUnitId)
}

Java

private void stopPreloading(String adUnitId) {
  // Stops the preloading and destroy preloaded ads.
  InterstitialAdPreloader.destroy(adUnitId);
}

Как посмотреть информацию об ответе (необязательно)

Прочитать информацию об ответе следующего предварительно загруженного объявления, не удаляя объявление из кеша.

В примере ниже показано, как получить информацию о следующем предварительно загруженном объявлении:

Kotlin

val responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId)
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.")
  return
}

Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")

Java

ResponseInfo responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());