# Load Ads

## Creating Fullscreen Ads

The fullscreen APIs combine the existing Rewarded and Interstitial ad formats into a single integration experience. 

To show a fullscreen ad, create a fullscreen ad load request using the **Placement Name** you set up on your [Chartboost platform](https://platform.chartboost.com/).


```kotlin
// Make sure you're in a coroutine
CoroutineScope(Main).launch {

    // Interstitial Ads
    val interstitialRequest =
       ChartboostMediationFullscreenAdLoadRequest(
           placement = "YOUR_INTERSTITIAL_MEDIATION_PLACEMENT",
           keywords = Keywords()
       )

    // Rewarded Ads
    val rewardedRequest =
       ChartboostMediationFullscreenAdLoadRequest(
           placement = "YOUR_REWARDED_MEDIATION_PLACEMENT",
           keywords = Keywords()
       )

    // Load the fullscreen ad
    val result =
       ChartboostMediationFullscreenAd.loadFullscreenAd(
           context,
           interstitialRequest, // or rewardedRequest
           chartboostMediationFullscreenAdListener,
       )

    // Handle the ad load result
    result.ad?.let { ad ->
        // Success. Show the ad.
        ad.show(activity)
    } ?: run {
        // Failure
    }
}
```

### Ad Queueing
Ad queueing is available in SDK 4.9.0 and later. This feature allows queueing up multiple fullscreen ads to show in succession, which can reduce and potentially eliminate latency for ad experiences that require showing fullscreen ads back to back.

Banners and adaptive banners cannot be queued.

<ul class="tab" data-tab="684121d8-2478-4862-b64d-5d5dcae3c704" data-name="androidAdQueueing">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="684121d8-2478-4862-b64d-5d5dcae3c704" data-name="androidAdQueueing">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Create a Chartboost Mediation fullscreen ad queue with the ad queue manager. The manager returns a ChartboostMediationFullscreenAdQueue.</span>
<span class="kd">val</span> <span class="py">queue</span><span class="p">:</span> <span class="nc">ChartboostMediationFullscreenAdQueue</span> <span class="p">=</span> <span class="nc">ChartboostMediationFullscreenAdQueueManager</span><span class="p">.</span><span class="nf">queue</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">placementName</span><span class="p">)</span>

<span class="c1">// To listen to ad queue events, you can use the ChartboostMediationFullscreenAdQueueListener</span>
<span class="n">queue</span><span class="p">.</span><span class="n">adQueueListener</span> <span class="p">=</span> <span class="kd">object</span> <span class="err">: </span><span class="nc">ChartboostMediationFullscreenAdQueueListener</span> <span class="p">{</span>
    <span class="k">override</span> <span class="k">fun</span> <span class="nf">onFullScreenAdQueueUpdated</span><span class="p">(</span>
        <span class="n">adQueue</span><span class="p">:</span> <span class="nc">ChartboostMediationFullscreenAdQueue</span><span class="p">,</span>
        <span class="n">result</span><span class="p">:</span> <span class="nc">AdLoadResult</span><span class="p">,</span>
        <span class="n">numberOfAdsReady</span><span class="p">:</span> <span class="nc">Int</span><span class="p">,</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="nf">println</span><span class="p">(</span>
            <span class="s">"Fullscreen ad queue updated${
</span>                <span class="k">if</span> <span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">error</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
                    <span class="s">" with error: ${result.error?.cause}"</span>
                <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
                    <span class="s">""</span>
                <span class="p">}</span>
            <span class="p">}.</span> <span class="nc">Number</span> <span class="n">of</span> <span class="n">ads</span> <span class="n">ready</span><span class="p">:</span> <span class="err">$</span><span class="n">numberOfAdsReady</span><span class="s">",
</span>        <span class="p">)</span>
    <span class="p">}</span>

    <span class="k">override</span> <span class="k">fun</span> <span class="nf">onFullscreenAdQueueExpiredAdRemoved</span><span class="p">(</span>
        <span class="n">adQueue</span><span class="p">:</span> <span class="nc">ChartboostMediationFullscreenAdQueue</span><span class="p">,</span>
        <span class="n">numberOfAdsReady</span><span class="p">:</span> <span class="nc">Int</span><span class="p">,</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="nf">println</span><span class="p">(</span><span class="s">"Fullscreen ad queue removed an expired ad. Number of ads ready: $numberOfAdsReady"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="c1">// To start queueing ads, use the `start()` method.</span>
<span class="n">queue</span><span class="p">.</span><span class="nf">start</span><span class="p">()</span>

<span class="c1">// To check if the queue is running, query the read-only `isRunning` property.</span>
<span class="n">queue</span><span class="p">.</span><span class="n">isRunning</span>

<span class="c1">// To check if there's an ad in the queue, use the `hasNextAd()` method.</span>
<span class="c1">// To get an ad from the queue, use the `getNextAd()` method.</span>
<span class="nc">CoroutineScope</span><span class="p">(</span><span class="nc">Main</span><span class="p">).</span><span class="nf">launch</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="n">queue</span><span class="p">.</span><span class="nf">hasNextAd</span><span class="p">())</span> <span class="p">{</span>
    <span class="kd">val</span> <span class="py">ad</span> <span class="p">=</span> <span class="n">queue</span><span class="p">.</span><span class="nf">getNextAd</span><span class="p">()</span>
    <span class="c1">// Showing an ad needs to be in a suspend function.</span>
    <span class="c1">// Be mindful that ads will need to be reattached to your ChartboostMediationFullscreenAdListener if you are listening to ad cycle events.</span>
    <span class="n">ad</span><span class="o">?.</span><span class="n">listener</span> <span class="p">=</span> <span class="nf">fullscreenAdListener</span><span class="p">()</span>
    <span class="n">ad</span><span class="o">?.</span><span class="nf">show</span><span class="p">(</span><span class="n">activity</span><span class="p">)</span>
  <span class="p">}</span>
<span class="p">}</span>

<span class="c1">// To stop the queue, use the `stop()` method.</span>
<span class="n">queue</span><span class="p">.</span><span class="nf">stop</span><span class="p">()</span>

<span class="c1">// Keywords can be set at any time, whether the queue is stopped or running.</span>
<span class="c1">// The next ad request sent by the running queue will use the keywords set here.</span>
<span class="n">queue</span><span class="p">.</span><span class="n">keywords</span><span class="p">.</span><span class="k">set</span><span class="p">(</span><span class="s">"keyword_key"</span><span class="p">,</span> <span class="s">"keyword_value"</span><span class="p">)</span>

<span class="c1">// To set a queue capacity, use the queueCapacity property.</span>
<span class="n">queue</span><span class="p">.</span><span class="n">queueCapacity</span> <span class="p">=</span> <span class="mi">3</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Create a Chartboost Mediation fullscreen ad queue with the ad queue manager. The manager returns a ChartboostMediationFullscreenAdQueue.</span>
<span class="nc">ChartboostMediationFullscreenAdQueue</span> <span class="n">queue</span> <span class="o">=</span> <span class="nc">ChartboostMediationFullscreenAdQueueManager</span><span class="o">.</span><span class="na">queue</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="n">placementName</span><span class="o">)</span>

<span class="c1">// To listen to ad queue events, you can use the ChartboostMediationFullscreenAdQueueListener</span>
<span class="kd">final</span> <span class="nc">ChartboostMediationFullscreenAdQueueListener</span> <span class="n">fullscreenAdQueueListener</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ChartboostMediationFullscreenAdQueueListener</span><span class="o">()</span> <span class="o">{</span>
    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onFullScreenAdQueueUpdated</span><span class="o">(</span><span class="nd">@NonNull</span> <span class="nc">ChartboostMediationFullscreenAdQueue</span> <span class="n">adQueue</span><span class="o">,</span> <span class="nd">@NonNull</span> <span class="nc">AdLoadResult</span> <span class="n">result</span><span class="o">,</span> <span class="kt">int</span> <span class="n">numberOfAdsReady</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Fullscreen ad queue has been updated for placement "</span> <span class="o">+</span> <span class="n">placementName</span> <span class="o">+</span> <span class="s">". Number of ads ready to show: "</span> <span class="o">+</span> <span class="n">numberOfAdsReady</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">onFullscreenAdQueueExpiredAdRemoved</span><span class="o">(</span><span class="nd">@NonNull</span> <span class="nc">ChartboostMediationFullscreenAdQueue</span> <span class="n">adQueue</span><span class="o">,</span> <span class="kt">int</span> <span class="n">numberOfAdsReady</span><span class="o">)</span> <span class="o">{</span>
        <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Fullscreen ad queue expired ad has been removed for placement "</span> <span class="o">+</span> <span class="n">placementName</span> <span class="o">+</span> <span class="s">". Number of ads ready to show: "</span> <span class="o">+</span> <span class="n">numberOfAdsReady</span><span class="o">);</span>
    <span class="o">}</span>
<span class="o">};</span>

<span class="c1">// Attach the created ChartboostMediationFullscreenAdQueueListener with the setAdQueueListener() method.</span>
<span class="n">queue</span><span class="o">.</span><span class="na">setAdQueueListener</span><span class="o">(</span><span class="n">fullscreenAdQueueListener</span><span class="o">);</span>

<span class="c1">// To start queueing ads, use the `start()` method.</span>
<span class="n">queue</span><span class="o">.</span><span class="na">start</span><span class="o">()</span>

<span class="c1">// To check if the queue is running, query the `isRunning()` method.</span>
<span class="n">queue</span><span class="o">.</span><span class="na">isRunning</span><span class="o">()</span>

<span class="c1">// To check if there's an ad in the queue, use the `hasNextAd()` method.</span>
<span class="c1">// To get an ad from the queue, use the `getNextAd()` method.</span>
<span class="k">if</span> <span class="o">(</span><span class="n">queue</span><span class="o">.</span><span class="na">hasNextAd</span><span class="o">())</span> <span class="o">{</span>
  <span class="nc">ChartboostMediationFullscreenAd</span> <span class="n">ad</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="na">getNextAd</span><span class="o">()</span>
  <span class="k">if</span> <span class="o">(</span><span class="n">ad</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
    <span class="c1">// Be mindful that ads will need to be reattached to your ChartboostMediationFullscreenAdListener if you are listening to ad cycle events.</span>
    <span class="n">ad</span><span class="o">.</span><span class="na">setListener</span><span class="o">(</span><span class="n">fullscreenAdListener</span><span class="o">())</span>  
    <span class="n">ad</span><span class="o">.</span><span class="na">showFullscreenAdFromJava</span><span class="o">(</span><span class="n">activity</span><span class="o">,</span> <span class="n">result</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="cm">/* handle show result */</span> <span class="o">});</span>
  <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
    <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Fullscreen ad is null. Load an ad first."</span><span class="o">);</span>
  <span class="o">}</span>
<span class="o">}</span>

<span class="c1">// To stop the queue, use the `stop()` method.</span>
<span class="n">queue</span><span class="o">.</span><span class="na">stop</span><span class="o">()</span>

<span class="c1">// To set a queue capacity, use the `setQueueCapacity(int value)` method.</span>
<span class="c1">// The dashboard's queue size settings can be overridden at runtime.</span>
<span class="c1">// If this placement has a Queue Size setting of 2 and Max Queue Size</span>
<span class="c1">// is 4 or 5, this line of code will increase this queue's size to</span>
<span class="c1">// 4. But if Max Queue Size is smaller than the number passed to</span>
<span class="c1">// setQueueCapacity, the queue size will only be increased up to the</span>
<span class="c1">// allowed maximum. So if Max Queue Size is 3 then an error message</span>
<span class="c1">// will be logged and this queue's size will be changed to 3.</span>
<span class="n">queue</span><span class="o">.</span><span class="na">setQueueCapacity</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span>
</code></pre></div></div>
</li>
  
</ul>



## Banner Ads
The Mediation SDK supports the [Adaptive Banner](/en/mediation/ad-types/#adaptive-banner/) ad format, capable of serving flexible and fixed sized ads in the placement. The [Adaptive Banner](/en/mediation/ad-types/#adaptive-banner/) ad format provides the following features:
- Choose whether to use Adaptive Ads or Fixed Ads in a given placement.
- Fixed Ads are supported in Adaptive Ad placements (backwards compatible).
- Know whether an ad is fixed or flexible and receive the dimensions of fixed ads.
- Align the ad horizontally and/or vertically.
- Resize the ad container to fit the ad or optionally discard oversized ads that are rendered in the container.
- Ad container can be in-line or on top of publisher content.

To use this new ad format, create a new Adaptive Banner placement in their platform and integrate with the new Adaptive Banner APIs.

<div class="alert alert-warning" role="alert">
  <b>Caution:</b> Google Bidding does not support 0 height adaptive banner sizes and will result in no fill.
</div>

### Loading Banner Ads


The API class `ChartboostMediationBannerSize` will support both fixed and adaptive banners.

The load call will provide the creative size of successfully loaded ads. If the returned size is -1, then it is a flexible width returned by the partner.


|Field|Description|
|--|--|
|`STANDARD`|Static constant that returns a fixed standard banner with a size of 320x50.|
|`MEDIUM`|Static constant that returns a fixed medium/MREC banner with a size of 300x250.|
|`LEADERBOARD`|Static constant that returns a fixed leaderboard banner with a size of 728x90.|
|{::nomarkdown}<li><code>adaptive2x1(width: Int)</code></li><li><code>adaptive4x1(width: Int)</code></li><li><code>adaptive6x1(width: Int)</code></li><li><code>adaptive8x1(width: Int)</code></li><li><code>adaptive10x1(width: Int)</code></li><li><code>adaptive1x2(width: Int)</code></li><li><code>adaptive1x3(width: Int)</code></li><li><code>adaptive1x4(width: Int)</code></li><li><code>adaptive9x16(width: Int)</code></li><li><code>adaptive1x1(width: Int)</code></li> {:/} | Additional conveniences to create sizes based on the IAB ratios (e.g. 6:1, 1:1) with a width. For example, using the 6:1 convenience with a 600 width would return a size of 600x100. Note that these are max sizes, therefore smaller sizes or other aspect ratios may be served.|


#### Loading Adaptive Banner Ads
```kotlin
// Make sure you're in a coroutine
CoroutineScope(Main).launch { ...

// Create a listener
val listener = object : ChartboostMediationBannerAdViewListener {
        override fun onAdClicked(placement: String) {
            // Fired when the banner is clicked
        }

        override fun onAdImpressionRecorded(placement: String) {
            // Fired when a banner impression has occurred
        }

        override fun onAdViewAdded(
            placement: String,
            child: View?,
        ) {
            // Fired when a view has been added to the banner
        }
    }

// Create an adaptive banner ad instance. Here is an example adaptive 6x1
val banner = ChartboostMediationBannerAdView(
        context,
        "[placement]",
        ChartboostMediationBannerAdView.ChartboostMediationBannerSize.adaptive6x1(300),
        listener
    )

// Load an adaptive banner ad. This variable has the load details.
val adaptiveBannerResult = banner.load(ChartboostMediationBannerAdLoadRequest(
    "[placement]",
    keywords,
    ChartboostMediationBannerAdView.ChartboostMediationBannerSize.adaptive6x1(300)
))
```

#### Loading Fixed Banner Ads

```kotlin
// Make sure you're in a coroutine
CoroutineScope(Main).launch {
...

// Create a listener
val listener = object : ChartboostMediationBannerAdViewListener {
        override fun onAdClicked(placement: String) {
            // Fired when the banner is clicked
        }

        override fun onAdImpressionRecorded(placement: String) {
            // Fired when a banner impression has occurred
        }

        override fun onAdViewAdded(
            placement: String,
            child: View?,
        ) {
            // Fired when a view has been added to the banner
        }
    }

// Create a standard banner ad instance
val standardBanner = ChartboostMediationBannerAdView(
        context,
        "[placement]",
        ChartboostMediationBannerAdView.ChartboostMediationBannerSize.STANDARD,
        listener
    )
// It is also possible to get it from the xml
val standardBanner = activity.findViewById(R.id.standard_banner) as ChartboostMediationBannerAdView

// Loading a standard banner. This variable has the load details.
val bannerLoadResult = standardBanner.load(ChartboostMediationBannerAdLoadRequest(
    "[placement]",
    keywords,
    ChartboostMediationBannerAdView.ChartboostMediationBannerSize.STANDARD
))

// Create a medium rectangle banner ad instance
val mediumRectagle = ChartboostMediationBannerAdView(
        context,
        "[placement]",
        ChartboostMediationBannerAdView.ChartboostMediationBannerSize.MEDIUM,
        listener
    )

// Load a medium rectangle. This variable has the load details.
val mediumRectangleLoadResult = mediumRectagle.load(ChartboostMediationBannerAdLoadRequest(
    "[placement]",
    keywords,
    ChartboostMediationBannerAdView.ChartboostMediationBannerSize.MEDIUM
))

// Create a leaderboard ad instance
val leaderboard = ChartboostMediationBannerAdView(
        context,
        "[placement]",
        ChartboostMediationBannerAdView.ChartboostMediationBannerSize.LEADERBOARD,
        listener
    )

// Load a leaderboard ad. This variable has the load details.
val leaderboardResult = leaderboard.load(ChartboostMediationBannerAdLoadRequest(
    "[placement]",
    keywords,
    ChartboostMediationBannerAdView.ChartboostMediationBannerSize.LEADERBOARD
))
```

### Resizing Adaptive Banner Container

```kotlin
val density = context.resources.displayMetrics.density
chartboostMediationBannerAdView.layoutParams = ViewGroup.LayoutParams(
                    300 * density,
                    50 * density
                )
// If you want this to be automatic, just use WRAP_CONTENT for
// both width and height.
chartboostMediationBannerAdView.layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )
// You can change this anytime. The next ad will use these sizes.

// To get the size of the currently showing creative, see:
chartboostMediationBannerAdView.getCreativeSizeDips()
```


### Discarding Oversized Ads

The `setShouldDiscardOversizedAds` will allow you the option to discard or allow ads larger than what is set for `ChartboostMediationBannerSize`.

```kotlin
// To drop oversized ads
ChartboostMediationSdk.setShouldDiscardOversizedAds(true)

// To allow oversized ads
ChartboostMediationSdk.setShouldDiscardOversizedAds(false)
```



## Clearing Loaded Ads

For any unused ads, we recommend invalidating them to free memory space.

Note: Calling `clearAd` will remove the current presented ad if any and the cached ad.

```kotlin
ChartboostMediationFullscreenAd.invalidate()
ChartboostMediationBannerAdView.clearAd()
```


