Межстраничные объявления – это полноэкранные объявления, которые закрывают все элементы интерфейса приложения. Такая реклама показывается при естественных переходах между разделами приложения или уровнями игры.
Когда в приложении показывается межстраничное объявление, пользователь может нажать на него и перейти на целевую страницу или закрыть его и вернуться в приложение. Прочитайте историю успеха.
В этом руководстве рассказывается, как интегрировать межстраничные объявления в приложение для Android.
Подготовка
Прежде чем продолжить, сделайте следующее:
- Настройте GMA Next-Gen SDK.
- Используйте идентификатор тестового межстраничного рекламного блока
ca-app-pub-3940256099942544/1033173712.- При создании и тестировании приложения используйте тестовые объявления, а не реальные. Если вы не будете использовать идентификатор тестового рекламного блока, Google может заблокировать ваш аккаунт.
- Перед публикацией приложения замените этот идентификатор на идентификатор своего рекламного блока.
- Подробнее о тестовых объявлениях GMA Next-Gen SDK рассказывается в статье Как включить тестовые объявления.
Предварительная загрузка объявлений (бета)
Предварительная загрузка объявлений в GMA Next-Gen SDK автоматизирует загрузку и кеширование объявлений.
Предварительная загрузка объявлений дает следующие преимущества:
- Управление ссылками. Ссылки сохраняются до показа объявлений.
- Автоматическая перезагрузка. Новое объявление загружается, когда предыдущее извлекается из кеша.
- Управляемые повторные попытки. Если объявление не загружается, выполняется попытка загрузить другое.
- Обработка истечения срока действия. Объявления обновляются до истечения срока действия.
- Оптимизация кеша. Оптимизирует порядок кеширования, чтобы показывать объявления с наивысшим приоритетом.
Как начать предварительную загрузку объявлений
Чтобы начать предварительную загрузку объявлений, вызовите метод start один раз при инициализации GMA Next-Gen SDK. После вызова метода start GMA Next-Gen SDK автоматически выполняет предварительную загрузку объявлений и повторно отправляет неудачные запросы для предварительно загруженных конфигураций.
В примере ниже показано, как начать предварительную загрузку объявлений.
Kotlin
Java
Замените AD_UNIT_ID идентификатором своего рекламного блока.
В предыдущем примере показано, как использовать идентификатор рекламного блока в качестве идентификатора предварительной загрузки. Идентификатор предварительной загрузки – это строка, которую вы создаете, чтобы идентифицировать конфигурацию предварительной загрузки объявлений. Если для одного и того же идентификатора рекламного блока требуется несколько конфигураций таргетинга, передайте специальный строковый идентификатор.
При предварительной загрузке объявлений нельзя менять параметры таргетинга или запросы объявлений. Если вам нужно изменить параметры таргетинга между запросами, используйте одиночную загрузку.
Получите и покажите предварительно загруженное объявление
Перед показом объявления вызовите метод pollAd.
Не сохраняйте объект предварительно загруженного объявления. При вызове метода pollAd GMA Next-Gen SDK получает доступное объявление и автоматически загружает следующее в фоновом режиме. Если объявлений нет, GMA Next-Gen SDK не возвращает ничего.
show, чтобы показать объявление.
В примере ниже показано, как получить и показать предварительно загруженное объявление.
Kotlin
Java
Когда приложение дойдет до места размещения объявления и сможет вызвать метод show, вызовите метод pollAd. Не вызывайте метод pollAd в обратных вызовах предварительной загрузки или после проверки метода isAdAvailable, чтобы удержать объявление. Если вам нужно проверить метаданные объявления перед его показом, прочитайте информацию об ответе, не удаляя объявление из кеша.
Как отслеживать события объявлений
Прежде чем показывать объявление, настройте отслеживание событий. В примере ниже регистрируются обратные вызовы для событий объявлений.
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 автоматически выполняет предзагрузку объявлений и повторно отправляет запросы, которые не удалось выполнить. Не вызывайте запросы на загрузку вручную в обратных вызовах при сбое. В методах обратного вызова событий предзагрузки не вызывайте методы pollAd, destroy и start. Вызов этих методов в обратных вызовах может привести к рекурсивным циклам загрузки.
Проверка доступности объявления (необязательно)
Если вам нужно узнать, доступно ли объявление, проверьте его доступность. В примере ниже показано, как проверить, доступно ли предварительно загруженное объявление.
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 с этим идентификатором. Вызов метода 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); }
Как прочитать информацию об ответах (необязательно)
Прочитать информацию об ответе на запрос следующего предварительно загруженного объявления, не удаляя его из кеша. Если вам нужно проверить метаданные объявления перед его показом, прочитайте информацию об ответе, а не вызывайте метод pollAd.
В примере ниже показано, как получить информацию о следующем предварительно загруженном ответе на запрос объявления.
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());