Interstitial

A full-screen ad format, interstitial ads are embedded in the app content at natural breaks, such as when a user advances to the next game level or completes a conversion action.

Note

Examples showing how all the format types work are available in the demo project.

Entity

Description

onAdFailedToLoad

If onAdFailedToLoad() returns an error, don't attempt to load a new ad again using the same method.

InterstitialAdEventListener

Don't save links to previously displayed ads. Call set AddEventListener(null) for previously displayed ads. Call setAdLoadListener(null) for the loader if you're no longer using it. This frees up resources and prevents memory leaks.

adUnitId

Use:

  • Development mode to work with demo ad units.

  • Production mode to work with R-M-XXXXXX-Y (for the actual ID, check the Yandex Advertising Network interface). R-M-XXXXXX-Y is a template for your actual ad unit ID that will be used to receive various creatives.

Example of creating an interstitial ad using a ready-to-use XML file

class InterstitialAdActivity : AppCompatActivity(), InterstitialAdEventListener {

    private var interstitialAd: InterstitialAd? = null
    private lateinit var interstitialAdLoader: InterstitialAdLoader
    private lateinit var binding: ActivityInterstitialAdBinding
    private val adUnitId = "demo-interstitial-yandex" // Use R-M-XXXXXX-Y or demo-block (look for the description below)
    private val config = AdRequestConfiguration.Builder(adUnitId).build()

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

        interstitialAdLoader = InterstitialAdLoader(this)
        binding.showBanner.isEnabled = false

        binding.loadBanner.setOnClickListener { loadAd() }
        binding.showBanner.setOnClickListener { showAd() }

        interstitialAdLoader.setAdLoadListener(object : InterstitialAdLoadListener {
            override fun onAdLoaded(ad: InterstitialAd) {
                interstitialAd = ad
                binding.showBanner.isEnabled = true
            }

            override fun onAdFailedToLoad(error: AdRequestError) {
                binding.showBanner.isEnabled = false
            }
        })
    }

    private fun loadAd() {
        binding.showBanner.isEnabled = false
        interstitialAdLoader.loadAd(config)
    }

    private fun showAd() {
        interstitialAd?.apply {
            setAdEventListener(this@InterstitialAdActivity)
            show(this@InterstitialAdActivity)
        } ?: run {
        }
    }

    override fun onDestroy() {
        interstitialAd?.setAdEventListener(null)
        interstitialAd = null
        interstitialAdLoader.setAdLoadListener(null)
        super.onDestroy()
    }

    override fun onAdClicked() {}
    override fun onAdDismissed() {
        interstitialAdLoader.loadAd(config)
    }
    override fun onAdFailedToShow(adError: AdError) {}
    override fun onAdImpression(impressionData: ImpressionData?) {}
    override fun onAdShown() {}
}
public class InterstitialAdActivity extends AppCompatActivity implements InterstitialAdEventListener {

    private InterstitialAd interstitialAd = null;
    private InterstitialAdLoader interstitialAdLoader;
    private ActivityInterstitialAdBinding binding;

    private final String adUnitId = "demo-interstitial-yandex"; // Use R-M-XXXXXX-Y or demo-block (look for the description below)
    private final AdRequestConfiguration config = new AdRequestConfiguration.Builder(adUnitId).build();

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

        interstitialAdLoader = new InterstitialAdLoader(this);
        binding.showBanner.setEnabled(false);

        binding.loadBanner.setOnClickListener(v -> loadAd());
        binding.showBanner.setOnClickListener(v -> showAd());

        interstitialAdLoader.setAdLoadListener(new InterstitialAdLoadListener() {
            @Override
            public void onAdLoaded(@Nullable InterstitialAd ad) {
                interstitialAd = ad;
                binding.showBanner.setEnabled(true);
            }

            @Override
            public void onAdFailedToLoad(@Nullable AdRequestError error) {
                binding.showBanner.setEnabled(false);
            }
        });
    }

    private void loadAd() {
        binding.showBanner.setEnabled(false);
        interstitialAdLoader.loadAd(config);
    }

    private void showAd() {
        if (interstitialAd != null) {
            interstitialAd.setAdEventListener(this);
            interstitialAd.show(this);
        }
    }

    @Override
    protected void onDestroy() {
        if (interstitialAd != null) {
            interstitialAd.setAdEventListener(null);
            interstitialAd = null;
        }
        if (interstitialAdLoader != null) {
            interstitialAdLoader.setAdLoadListener(null);
        }
        super.onDestroy();
    }
    @Override
    public void onAdClicked() {}
    @Override
    public void onAdDismissed() {
        interstitialAdLoader.loadAd(config);
    }
    @Override
    public void onAdFailedToShow(@Nullable AdError adError) {}
    @Override
    public void onAdImpression(@Nullable ImpressionData impressionData) {}
    @Override
    public void onAdShown() {}
}
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".InterstitialAdActivity">

    <Button
        android:id="@+id/loadBanner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load Banner"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

    <Button
        android:id="@+id/showBanner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Banner"
        app:layout_constraintTop_toBottomOf="@id/loadBanner"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginTop="16dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

Example of creating an interstitial ad using a programmatically generated Activity

class InterstitialAdActivity : AppCompatActivity(), InterstitialAdEventListener, InterstitialAdLoadListener {

    private lateinit var interstitialAdLoader: InterstitialAdLoader
    private var interstitialAd: InterstitialAd? = null

    private lateinit var loadButton: Button
    private lateinit var showButton: Button

    private val adUnitId = "demo-interstitial-yandex" // Use R-M-XXXXXX-Y or demo-block (look for the description below)
    val config = AdRequestConfiguration.Builder(adUnitId).build()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val rootLayout = ConstraintLayout(this).apply {
            layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
        }

        loadButton = Button(this).apply {
            text = "Load Interstitial"
            id = View.generateViewId()
        }

        showButton = Button(this).apply {
            text = "Show Interstitial"
            id = View.generateViewId()
            isEnabled = false
        }

        rootLayout.addView(loadButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
            topToTop = LayoutParams.PARENT_ID
            bottomToBottom = LayoutParams.PARENT_ID
            startToStart = LayoutParams.PARENT_ID
            endToEnd = LayoutParams.PARENT_ID
        })

        rootLayout.addView(showButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
            topToBottom = loadButton.id
            startToStart = LayoutParams.PARENT_ID
            endToEnd = LayoutParams.PARENT_ID
            topMargin = 24
        })

        setContentView(rootLayout)
        interstitialAdLoader = InterstitialAdLoader(this)
        loadButton.setOnClickListener { loadAd() }
        showButton.setOnClickListener { showAd() }
        interstitialAdLoader.setAdLoadListener(this@InterstitialAdActivity)
    }

    private fun loadAd() {
        interstitialAd = null
        showButton.isEnabled = false
        interstitialAdLoader.loadAd(config)
    }

    private fun showAd() {
        interstitialAd?.apply {
            setAdEventListener(this@InterstitialAdActivity)
            show(this@InterstitialAdActivity)
        }
    }

    override fun onDestroy() {
        interstitialAd?.setAdEventListener(null)
        interstitialAd = null
        interstitialAdLoader.setAdLoadListener(null)
        super.onDestroy()
    }

    override fun onAdClicked() {}
    override fun onAdDismissed() {
        interstitialAdLoader.loadAd(config)
    }
    override fun onAdFailedToShow(adError: AdError) {}
    override fun onAdImpression(impressionData: ImpressionData?) {}
    override fun onAdShown() {}
    override fun onAdFailedToLoad(error: AdRequestError) {}
    override fun onAdLoaded(interstitialAd: InterstitialAd) {
        this.interstitialAd = interstitialAd
        showButton.isEnabled = true
    }
}
public class InterstitialAdActivity extends AppCompatActivity
        implements InterstitialAdEventListener, InterstitialAdLoadListener {

    private InterstitialAdLoader interstitialAdLoader;
    private InterstitialAd interstitialAd;

    private Button loadButton;
    private Button showButton;

    private final String adUnitId = "demo-interstitial-yandex"; // Use R-M-XXXXXX-Y or demo-block (look for the description below)
    private final AdRequestConfiguration config =
            new AdRequestConfiguration.Builder(adUnitId).build();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ConstraintLayout rootLayout = new ConstraintLayout(this);
        rootLayout.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        loadButton = new Button(this);
        loadButton.setText("Load Interstitial");
        loadButton.setId(View.generateViewId());

        showButton = new Button(this);
        showButton.setText("Show Interstitial");
        showButton.setId(View.generateViewId());
        showButton.setEnabled(false);

        LayoutParams loadBtnParams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        loadBtnParams.topToTop = LayoutParams.PARENT_ID;
        loadBtnParams.bottomToBottom = LayoutParams.PARENT_ID;
        loadBtnParams.startToStart = LayoutParams.PARENT_ID;
        loadBtnParams.endToEnd = LayoutParams.PARENT_ID;
        rootLayout.addView(loadButton, loadBtnParams);

        LayoutParams showBtnParams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        showBtnParams.topToBottom = loadButton.getId();
        showBtnParams.startToStart = LayoutParams.PARENT_ID;
        showBtnParams.endToEnd = LayoutParams.PARENT_ID;
        showBtnParams.topMargin = 24;
        rootLayout.addView(showButton, showBtnParams);

        setContentView(rootLayout);

        interstitialAdLoader = new InterstitialAdLoader(this);
        interstitialAdLoader.setAdLoadListener(this);

        loadButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadAd();
            }
        });

        showButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showAd();
            }
        });
    }

    private void loadAd() {
        interstitialAd = null;
        showButton.setEnabled(false);
        interstitialAdLoader.loadAd(config);
    }

    private void showAd() {
        if (interstitialAd != null) {
            interstitialAd.setAdEventListener(this);
            interstitialAd.show(this);
        }
    }

    @Override
    protected void onDestroy() {
        if (interstitialAd != null) {
            interstitialAd.setAdEventListener(null);
            interstitialAd = null;
        }
        if (interstitialAdLoader != null) {
            interstitialAdLoader.setAdLoadListener(null);
        }
        super.onDestroy();
    }
    @Override
    public void onAdClicked() {}
    @Override
    public void onAdDismissed() {
        // Optionally reload
        interstitialAdLoader.loadAd(config);
    }
    @Override
    public void onAdFailedToShow(@Nullable AdError adError) {}
    @Override
    public void onAdImpression(@Nullable ImpressionData impressionData) {}
    @Override
    public void onAdShown() {}
    @Override
    public void onAdFailedToLoad(@Nullable AdRequestError error) {}
    @Override
    public void onAdLoaded(InterstitialAd interstitialAd) {
        this.interstitialAd = interstitialAd;
        showButton.setEnabled(true);
    }
}

Checking integration

Build and run your project. You can check if the integration is successful by searching the YandexAds keyword in Logcat:

[Integration] Ad type interstitial was integrated successfully