Межстраничная реклама

Межстраничная реклама (Interstitial) — полноэкранный формат рекламы, встраиваемый в контент приложения во время естественных пауз, таких как переход между уровнями игры или окончание выполнения целевого действия.

Примечание

Пример работы всех типов форматов есть в демопроекте.

Сущность

Описание

onAdFailedToLoad

При получении ошибки в onAdFailedToLoad() не пытайтесь загружать новое объявление снова из этого же метода.

InterstitialAdEventListener

Не сохраняйте ссылки на ранее отображенные объявления. Вызовите set AddEventListener(null) для ранее отображенных объявлений. Вызовите setAdLoadListener(null) для загрузчика, если он больше не используется. Это освобождает ресурсы и предотвращает утечки памяти.

adUnitId

Используйте:

  • development mode — для работы с демоблоками;

  • production mode — для работы с R-M-XXXXXX-Y (уточните реальный ID в интерфейсе Рекламной сети Яндекса). R-M-XXXXXX-Y — это вид рабочего рекламного ID, по которому будут приходить разные креативы.

Имплементация

Основные шаги по интеграции межстраничных объявлений:

  • Создать и настроить загрузчик рекламы InterstitialAdLoader.
  • Зарегистрировать слушатель методов обратного вызова загрузки InterstitialAdLoadListener.
  • Загрузить рекламу.
  • Передать дополнительные настройки, если вы работаете через систему Adfox.
  • Зарегистрировать слушатель методов обратного вызова событий рекламного объявления InterstitialAdEventListener.
  • Показать объявление InterstitialAd.

Особенности подключения межстраничной рекламы

  1. Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.

  2. Если вы получили ошибку в коллбэке onAdFailedToLoad(), не пытайтесь загрузить новое объявление снова. Если все же необходимо это сделать, ограничьте число повторных попыток загрузки рекламы. Это поможет избежать постоянных неудачных запросов и проблем с подключением в случае ограничений.

  3. Рекомендуется держать сильную ссылку на загрузчик и рекламу на всем протяжении жизни экрана, в рамках которого происходит взаимодействие с рекламой, для избежания очистки сборщиком мусора.

  4. Рекомендуется использовать один инстанс InterstitialAdLoader для всех загрузок рекламных объявлений для улучшения производительности.

Загрузка рекламы

Для загрузки interstitial рекламы необходимо создать и настроить InterstitialAdLoader объект.

Для этого потребуется Activity или Application context.

Для уведомления об успешной или неудачной загрузке рекламы объекту класса InterstitialAdLoader необходимо установить слушатель методов обратного вызова InterstitialAdLoadListener

Для загрузки рекламного объявления потребуется идентификатор рекламного места, полученный вами в интерфейсе Рекламной сети Яндекса (adUnitId).

Расширить параметры запроса за рекламой можно через AdRequest.Builder(), передав в запросе данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы.

После загрузки рекламного объявления (вызов метода onAdLoaded(interstitialAd: InterstitialAd)) сохраните ссылку на загруженную рекламу InterstitialAd до окончания показа.

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

class InterstitialAdActivity : AppCompatActivity(R.layout.activity_interstitial_ad) {
    private var interstitialAd: InterstitialAd? = null
    private var interstitialAdLoader: InterstitialAdLoader? = null
    private lateinit var binding: ActivityInterstitialAdBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityInterstitialAdBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // Interstitial ads loading should occur after initialization of the SDK.
        // Initialize SDK as early as possible, for example in Application.onCreate or Activity.onCreate
        interstitialAdLoader = InterstitialAdLoader(this)
        loadInterstitialAd()
    }

    private fun loadInterstitialAd() {
        val adRequest = AdRequest.Builder("your-ad-unit-id").build()
        interstitialAdLoader?.loadAd(adRequest, object : InterstitialAdLoadListener {
            override fun onAdLoaded(ad: InterstitialAd) {
                interstitialAd = ad
                // The ad was loaded successfully. Now you can show loaded ad.
            }

            override fun onAdFailedToLoad(adRequestError: AdRequestError) {
                // Ad failed to load with AdRequestError.
                // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
            }
        })
    }
}
public class InterstitialAdActivity extends AppCompatActivity {
    @Nullable
    private InterstitialAd mInterstitialAd = null;
    @Nullable
    private InterstitialAdLoader mInterstitialAdLoader = null;
    private ActivityInterstitialAdBinding mBinding;

    public InterstitialAdActivity() {
        super(R.layout.activity_interstitial_ad);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = ActivityInterstitialAdBinding.inflate(getLayoutInflater());
        setContentView(mBinding.getRoot());

        // Interstitial ads loading should occur after initialization of the SDK.
        // Initialize SDK as early as possible, for example in Application.onCreate or Activity.onCreate
        mInterstitialAdLoader = new InterstitialAdLoader(this);
        loadInterstitialAd();
    }

    private void loadInterstitialAd() {
        if (mInterstitialAdLoader != null) {
            final AdRequest adRequest =
                new AdRequest.Builder("your-ad-unit-id").build();
            mInterstitialAdLoader.loadAd(adRequest, new InterstitialAdLoadListener() {
                @Override
                public void onAdLoaded(@NonNull final InterstitialAd interstitialAd) {
                    mInterstitialAd = interstitialAd;
                    // The ad was loaded successfully. Now you can show loaded ad.
                }

                @Override
                public void onAdFailedToLoad(@NonNull final AdRequestError adRequestError) {
                    // Ad failed to load with AdRequestError.
                    // Attempting to load a new ad from the onAdFailedToLoad() method is strongly discouraged.
                }
            });
        }
    }
}

Показ объявления

Межстраничная реклама должна отображаться во время естественных пауз в работе приложения. Хороший пример — между уровнями игры или после выполнения целевого действия, например, после окончания загрузки файла.

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

Для показа рекламного объявления потребуется передать Activity в метод show загруженного рекламного объявления:

private fun showAd() {
    interstitialAd?.apply {
        setAdEventListener(object : InterstitialAdEventListener {
            override fun onAdShown() {
                // Called when ad is shown.
            }
            override fun onAdFailedToShow(adError: AdError) {
       	     // Called when an InterstitialAd failed to show.
                // Clean resources after Ad dismissed
                interstitialAd?.setAdEventListener(null)
                interstitialAd = null

                // Now you can preload the next interstitial ad.
                loadInterstitialAd()
            }
            override fun onAdDismissed() {
                // Called when ad is dismissed.
                // Clean resources after Ad dismissed
                interstitialAd?.setAdEventListener(null)
                interstitialAd = null

                // Now you can preload the next interstitial ad.
                loadInterstitialAd()
           }
            override fun onAdClicked() {
                // Called when a click is recorded for an ad.
            }
            override fun onAdImpression(impressionData: ImpressionData?) {
                // Called when an impression is recorded for an ad.
            }
        })
        show(this@Activity)
    }
}
private void showAd() {
    if (mInterstitialAd != null) {
        mInterstitialAd.setAdEventListener(new InterstitialAdEventListener() {
            @Override
            public void onAdShown() {
                // Called when ad is shown.
            }

            @Override
            public void onAdFailedToShow(@NonNull final AdError adError) {
                // Called when an InterstitialAd failed to show.
            }

            @Override
            public void onAdDismissed() {
                // Called when ad is dismissed.
                // Clean resources after Ad dismissed
                if (mInterstitialAd != null) {
                    mInterstitialAd.setAdEventListener(null);
                    mInterstitialAd = null;
                }

                // Now you can preload the next interstitial ad.
                loadInterstitialAd();
            }

            @Override
            public void onAdClicked() {
                // Called when a click is recorded for an ad.
            }

            @Override
            public void onAdImpression(@Nullable final ImpressionData impressionData) {
                // Called when an impression is recorded for an ad.
            }
        });
        mInterstitialAd.show(this);
    }
}

Освобождение ресурсов

Не храните ссылки на отработанные объявления. Вызывайте setAdEventListener(null) для отработанных объявлений. Это освобождает используемые ресурсы и предотвращает утечки памяти.

override fun onDestroy() {
    super.onDestroy()
    interstitialAdLoader = null
    destroyInterstitialAd()
}

private fun destroyInterstitialAd() {
    interstitialAd?.setAdEventListener(null)
    interstitialAd = null
}
@Override
protected void onDestroy() {
    super.onDestroy();
    mInterstitialAdLoader = null;
    destroyInterstitialAd();
}

private void destroyInterstitialAd() {
    if (mInterstitialAd != null) {
        mInterstitialAd.setAdEventListener(null);
        mInterstitialAd = null;
    }
}

Проверка интеграции

Соберите и запустите проект. Успешную интеграцию SDK можно проверить в Logcat по ключевому слову YandexAds:

[Integration] Ad type interstitial was integrated successfully
Следующая