# Prebid Integration on Android

This guide adds the Chartboost Prebid adapter to an Android app that already runs Prebid Mobile. If you are new
to the adapter, read the [Prebid Integration Overview](/en/monetization/integrate/prebid/overview/) first.

## Minimum Requirements

| Component | Version |
| --------- | ------- |
| Prebid Mobile SDK | 3.4.0+ |
| Chartboost Monetization SDK | 9.14.0+ |
| Android | API 21+ |
| `kotlinx-coroutines-android` | present at runtime, ships transitively with the Monetization SDK |

The adapter is compiled against the Monetization SDK rather than bundling it. Adapter
`309.14.0` is certified against Monetization SDK
9.14.0, which is the pairing the samples below install.

Declare `kotlinx-coroutines-android` yourself only if your build excludes the transitive copy.

## 1. Add the repositories and dependencies

The adapter compiles against the Chartboost Monetization SDK and Prebid Mobile but does not bundle them, so your
app declares all three dependencies explicitly.

Declare the repositories in your settings file (`settings.gradle.kts` or `settings.gradle`), not in the module build
file. Current Android project templates set `RepositoriesMode.FAIL_ON_PROJECT_REPOS`, which turns a module-level
`repositories` block into a build failure. If your project already has a `dependencyResolutionManagement` block, add
only the Chartboost `maven` line to it rather than pasting a second block, which would drop your `repositoriesMode`
setting. Each sample below shows two files, marked by comments.

<ul class="tab" data-tab="8564d9ba-8504-4bde-a331-f3d2048f07c2" data-name="prebidGradle">
  
      <li class="active">
          <a href="#">Kotlin DSL </a>
      </li>
  
      <li>
          <a href="#">Groovy </a>
      </li>
  
</ul>
<ul class="tab-content" id="8564d9ba-8504-4bde-a331-f3d2048f07c2" data-name="prebidGradle">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// settings.gradle.kts</span>
<span class="nf">dependencyResolutionManagement</span> <span class="p">{</span>
    <span class="nf">repositories</span> <span class="p">{</span>
        <span class="nf">google</span><span class="p">()</span>
        <span class="nf">mavenCentral</span><span class="p">()</span>
        <span class="nf">maven</span><span class="p">(</span><span class="s">"https://cboost.jfrog.io/artifactory/chartboost-ads/"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="c1">// app/build.gradle.kts</span>
<span class="nf">dependencies</span> <span class="p">{</span>
    <span class="nf">implementation</span><span class="p">(</span><span class="s">"org.prebid:prebid-mobile-sdk:3.4.0"</span><span class="p">)</span>
    <span class="nf">implementation</span><span class="p">(</span><span class="s">"com.chartboost:chartboost-sdk:9.14.0"</span><span class="p">)</span>
    <span class="nf">implementation</span><span class="p">(</span><span class="s">"com.chartboost:chartboost-prebid-adapter:309.14.0"</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// settings.gradle</span>
<span class="n">dependencyResolutionManagement</span> <span class="o">{</span>
    <span class="n">repositories</span> <span class="o">{</span>
        <span class="n">google</span><span class="o">()</span>
        <span class="n">mavenCentral</span><span class="o">()</span>
        <span class="n">maven</span> <span class="o">{</span> <span class="n">url</span> <span class="s1">'https://cboost.jfrog.io/artifactory/chartboost-ads/'</span> <span class="o">}</span>
    <span class="o">}</span>
<span class="o">}</span>

<span class="c1">// app/build.gradle</span>
<span class="n">dependencies</span> <span class="o">{</span>
    <span class="n">implementation</span> <span class="s1">'org.prebid:prebid-mobile-sdk:3.4.0'</span>
    <span class="n">implementation</span> <span class="s1">'com.chartboost:chartboost-sdk:9.14.0'</span>
    <span class="n">implementation</span> <span class="s1">'com.chartboost:chartboost-prebid-adapter:309.14.0'</span>
<span class="o">}</span>
</code></pre></div></div>
</li>
  
</ul>


The adapter version (`309.14.0`) encodes the Prebid Mobile major plus the
Monetization SDK version it is certified against, so
`309.14.0` pairs with Monetization SDK
9.14.0 and any later patch of that minor.

## 2. Register the adapter and initialize

Register the Chartboost plugin adapter **before the first ad load**. Registering before or right after
`PrebidMobile.initializeSdk` both work. The Chartboost Monetization SDK is started separately, the same way as a
standalone Chartboost integration (see
[Monetization SDK Get Started](/en/monetization/integrate/android/get-started/)).

<ul class="tab" data-tab="52a35e62-4005-40b3-b83a-5a18964049f3" data-name="prebidRegister">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="52a35e62-4005-40b3-b83a-5a18964049f3" data-name="prebidRegister">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span>
<span class="k">import</span> <span class="nn">org.prebid.mobile.PrebidMobile</span>

<span class="c1">// Attaches the Chartboost adapter name and version to every auction request.</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="p">.</span><span class="nf">register</span><span class="p">()</span>

<span class="nc">PrebidMobile</span><span class="p">.</span><span class="nf">initializeSdk</span><span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="s">"https://&lt;your-pbs-host&gt;/openrtb2/auction"</span><span class="p">)</span> <span class="p">{</span> <span class="n">status</span> <span class="p">-&gt;</span>
    <span class="nc">Log</span><span class="p">.</span><span class="nf">d</span><span class="p">(</span><span class="s">"prebid"</span><span class="p">,</span> <span class="s">"init: $status"</span><span class="p">)</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidConfig</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.prebid.mobile.PrebidMobile</span><span class="o">;</span>

<span class="c1">// register() takes a config. From Java, build one with the Builder (Kotlin default</span>
<span class="c1">// arguments are not visible to Java callers).</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">register</span><span class="o">(</span><span class="k">new</span> <span class="nc">ChartboostPrebidConfig</span><span class="o">.</span><span class="na">Builder</span><span class="o">().</span><span class="na">build</span><span class="o">());</span>

<span class="nc">PrebidMobile</span><span class="o">.</span><span class="na">initializeSdk</span><span class="o">(</span><span class="n">context</span><span class="o">,</span> <span class="s">"https://&lt;your-pbs-host&gt;/openrtb2/auction"</span><span class="o">,</span> <span class="n">status</span> <span class="o">-&gt;</span>
    <span class="nc">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"prebid"</span><span class="o">,</span> <span class="s">"init: "</span> <span class="o">+</span> <span class="n">status</span><span class="o">));</span>
</code></pre></div></div>
</li>
  
</ul>


## 3. Load ads as usual

Load a Prebid Mobile rendering ad unit (`BannerView`, `InterstitialAdUnit`, or `RewardedAdUnit`) exactly as you
would without the adapter. A Chartboost-flagged winning bid routes to the Chartboost adapter automatically;
everything else uses Prebid's default renderer. No per-ad-unit Chartboost code is required.

## 4. Configure the adapter (optional)

Pass a `ChartboostPrebidConfig` to `register()` to change logging, the Chartboost reporting location, or to attach
lifecycle callbacks. Every field has a default that preserves the no-argument behavior.

| Field | Default | What it does |
| ----- | ------- | ------------ |
| `location` | `"Prebid"` | Chartboost ad location applied to every plugin-rendered ad. A blank value coerces back to the default. Set it to separate placements in Chartboost reporting. |
| `logLevel` | `WARN` | Plugin log verbosity: `NONE`, `WARN`, or `DEBUG`. |
| `eventListener` | `null` | Lifecycle callbacks for ads the adapter renders (see below). |

<ul class="tab" data-tab="d28daf18-92e4-4b4e-9edb-cfdaf63aa9f5" data-name="prebidConfig">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="d28daf18-92e4-4b4e-9edb-cfdaf63aa9f5" data-name="prebidConfig">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span>
<span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidConfig</span>
<span class="k">import</span> <span class="nn">com.chartboost.prebid.LogLevel</span>

<span class="kd">val</span> <span class="py">config</span> <span class="p">=</span> <span class="nc">ChartboostPrebidConfig</span><span class="p">(</span>
    <span class="n">location</span> <span class="p">=</span> <span class="s">"prebid_rewarded"</span><span class="p">,</span>
    <span class="n">logLevel</span> <span class="p">=</span> <span class="nc">LogLevel</span><span class="p">.</span><span class="nc">DEBUG</span><span class="p">,</span>
<span class="p">)</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="p">.</span><span class="nf">register</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidConfig</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.LogLevel</span><span class="o">;</span>

<span class="nc">ChartboostPrebidConfig</span> <span class="n">config</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ChartboostPrebidConfig</span><span class="o">.</span><span class="na">Builder</span><span class="o">()</span>
    <span class="o">.</span><span class="na">setLocation</span><span class="o">(</span><span class="s">"prebid_rewarded"</span><span class="o">)</span>
    <span class="o">.</span><span class="na">setLogLevel</span><span class="o">(</span><span class="nc">LogLevel</span><span class="o">.</span><span class="na">DEBUG</span><span class="o">)</span>
    <span class="o">.</span><span class="na">build</span><span class="o">();</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">register</span><span class="o">(</span><span class="n">config</span><span class="o">);</span>
</code></pre></div></div>
</li>
  
</ul>


### Lifecycle callbacks

Attach a `ChartboostPrebidEventListener` to observe what the Chartboost adapter specifically did, independently of
Prebid's own per-ad-unit listeners. All callbacks run on the main thread. `onAdDismissed` and `onUserEarnedReward`
are fullscreen-only and never fire for banners.

Every callback takes a `ChartboostAdFormat`, one of `BANNER`, `INTERSTITIAL`, or `REWARDED`. In Kotlin each callback
has a default empty body, so override only the ones you need. Kotlin default bodies are invisible to Java, so a Java
listener has to override all six.

<ul class="tab" data-tab="3a7cb891-bf85-4ab3-bd1e-ff4554f34737" data-name="prebidListener">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="3a7cb891-bf85-4ab3-bd1e-ff4554f34737" data-name="prebidListener">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostAdFormat</span>
<span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidConfig</span>
<span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidEventListener</span>
<span class="k">import</span> <span class="nn">org.prebid.mobile.api.exceptions.AdException</span>

<span class="kd">val</span> <span class="py">config</span> <span class="p">=</span> <span class="nc">ChartboostPrebidConfig</span><span class="p">(</span>
    <span class="n">eventListener</span> <span class="p">=</span> <span class="kd">object</span> <span class="err">: </span><span class="nc">ChartboostPrebidEventListener</span> <span class="p">{</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onAdLoaded</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">)</span> <span class="p">{}</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onAdDisplayed</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">)</span> <span class="p">{}</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onAdClicked</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">)</span> <span class="p">{}</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onAdFailed</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">,</span> <span class="n">error</span><span class="p">:</span> <span class="nc">AdException</span><span class="p">)</span> <span class="p">{}</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onAdDismissed</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">)</span> <span class="p">{}</span>
        <span class="k">override</span> <span class="k">fun</span> <span class="nf">onUserEarnedReward</span><span class="p">(</span><span class="n">format</span><span class="p">:</span> <span class="nc">ChartboostAdFormat</span><span class="p">)</span> <span class="p">{}</span>
    <span class="p">},</span>
<span class="p">)</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostAdFormat</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidConfig</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidEventListener</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.prebid.mobile.api.exceptions.AdException</span><span class="o">;</span>

<span class="nc">ChartboostPrebidConfig</span> <span class="n">config</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ChartboostPrebidConfig</span><span class="o">.</span><span class="na">Builder</span><span class="o">()</span>
    <span class="o">.</span><span class="na">setEventListener</span><span class="o">(</span><span class="k">new</span> <span class="nc">ChartboostPrebidEventListener</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">onAdLoaded</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</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">onAdDisplayed</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</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">onAdClicked</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</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">onAdFailed</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</span><span class="o">,</span> <span class="nc">AdException</span> <span class="n">error</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">onAdDismissed</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</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">onUserEarnedReward</span><span class="o">(</span><span class="nc">ChartboostAdFormat</span> <span class="n">format</span><span class="o">)</span> <span class="o">{}</span>
    <span class="o">})</span>
    <span class="o">.</span><span class="na">build</span><span class="o">();</span>
</code></pre></div></div>
</li>
  
</ul>


### Unregistering the adapter

Call `unregister()` to remove the Chartboost adapter from Prebid Mobile's registry. This matters when your
`eventListener` captures an `Activity` (or any context that shouldn't outlive it): tear the registration down so the
listener is released with it. Prebid evicts by plugin name, so `unregister()` drops whatever is registered under the
Chartboost name and is a no-op when nothing is registered.

You don't need `unregister()` if you call `register(config)` once in `Application.onCreate` with a listener that
holds no `Activity`. If the listener must hold an `Activity`, call `register(config)` in that `Activity`'s `onCreate`,
before its first ad load, and pass the same `config` each time, because `register()` with no arguments resets your
settings. Keep a reference to the `Activity` that registered last, for example in your `Application`, and in
`onDestroy` call `unregister()` only while that reference still points at this `Activity`. Android can run the old
`Activity`'s `onDestroy` after the new one's `onCreate`, and an unconditional `unregister()` there removes the new
registration, so every later ad falls back to Prebid's default renderer.

<ul class="tab" data-tab="cfb26ed2-e184-461d-9723-cf6deb2d0bb8" data-name="prebidUnregister">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="cfb26ed2-e184-461d-9723-cf6deb2d0bb8" data-name="prebidUnregister">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">ChartboostPrebidAdapter</span><span class="p">.</span><span class="nf">unregister</span><span class="p">()</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">unregister</span><span class="o">();</span>
</code></pre></div></div>
</li>
  
</ul>


## 5. Verify the integration

The most common integration issue is an adapter version that doesn't match your Prebid Server's stamp, which makes
Prebid silently fall back to its default renderer. Confirm the match during integration:

<ul class="tab" data-tab="1b94a88c-0361-4b80-b570-03cdb10fcd79" data-name="prebidVerify">
  
      <li class="active">
          <a href="#">Kotlin </a>
      </li>
  
      <li>
          <a href="#">Java </a>
      </li>
  
</ul>
<ul class="tab-content" id="1b94a88c-0361-4b80-b570-03cdb10fcd79" data-name="prebidVerify">
  
      <li class="active">
<div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">android.util.Log</span>
<span class="k">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span>

<span class="c1">// The value your Prebid Server stamps as ext.prebid.meta.rendererVersion. Read it from your server</span>
<span class="c1">// config or a test bid response. Do not pass the client's own version, or the check can never fail.</span>
<span class="kd">val</span> <span class="py">serverRendererVersion</span> <span class="p">=</span> <span class="s">"&lt;the rendererVersion your Prebid Server stamps&gt;"</span>

<span class="c1">// Logs the registered adapter name and version at WARN-or-above verbosity.</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="p">.</span><span class="nf">logIntegrationInfo</span><span class="p">()</span>

<span class="c1">// Or read the registered values directly.</span>
<span class="nc">Log</span><span class="p">.</span><span class="nf">d</span><span class="p">(</span><span class="s">"prebid"</span><span class="p">,</span> <span class="s">"${ChartboostPrebidAdapter.adapterName} ${ChartboostPrebidAdapter.adapterVersion}"</span><span class="p">)</span>

<span class="nf">check</span><span class="p">(</span><span class="nc">ChartboostPrebidAdapter</span><span class="p">.</span><span class="nf">matchesServerAdapterVersion</span><span class="p">(</span><span class="n">serverRendererVersion</span><span class="p">))</span> <span class="p">{</span>
    <span class="s">"Adapter version mismatch: Chartboost bids will fall back to Prebid's default renderer"</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">android.util.Log</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">com.chartboost.prebid.ChartboostPrebidAdapter</span><span class="o">;</span>

<span class="c1">// The value your Prebid Server stamps as ext.prebid.meta.rendererVersion. Read it from your server</span>
<span class="c1">// config or a test bid response. Do not pass the client's own version, or the check can never fail.</span>
<span class="nc">String</span> <span class="n">serverRendererVersion</span> <span class="o">=</span> <span class="s">"&lt;the rendererVersion your Prebid Server stamps&gt;"</span><span class="o">;</span>

<span class="c1">// Logs the registered adapter name and version at WARN-or-above verbosity.</span>
<span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">logIntegrationInfo</span><span class="o">();</span>

<span class="c1">// Or read the registered values directly.</span>
<span class="nc">Log</span><span class="o">.</span><span class="na">d</span><span class="o">(</span><span class="s">"prebid"</span><span class="o">,</span> <span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">getAdapterName</span><span class="o">()</span> <span class="o">+</span> <span class="s">" "</span>
    <span class="o">+</span> <span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span><span class="o">.</span><span class="na">getAdapterVersion</span><span class="o">());</span>

<span class="kt">boolean</span> <span class="n">matches</span> <span class="o">=</span> <span class="nc">ChartboostPrebidAdapter</span><span class="o">.</span><span class="na">INSTANCE</span>
    <span class="o">.</span><span class="na">matchesServerAdapterVersion</span><span class="o">(</span><span class="n">serverRendererVersion</span><span class="o">);</span>
</code></pre></div></div>
</li>
  
</ul>


`logIntegrationInfo()` writes through the plugin's own log, so `LogLevel.NONE` silences it. Leave `logLevel` at its
`WARN` default, or raise it, while you verify. The line lands in logcat under the tag `ChartboostPrebid`.

## Banner sizes

The Chartboost Monetization SDK renders a banner at one of its own `Banner.BannerSize` dimensions and nothing else:

| Size | Dimensions |
| ---- | ---------- |
| `STANDARD` | 320x50 |
| `MEDIUM` | 300x250 |
| `LEADERBOARD` | 728x90 |
| `HALFPAGE` | 300x600 |

Given a winning bid's negotiated width and height, the adapter selects the size with the **largest area that fits
entirely inside** them. A full-width bid of, say, 412x50 renders `STANDARD` 320x50 within it, the same way a fixed size
is fitted into an adaptive banner slot. Largest by area, not by width: a 728x250 bid renders `MEDIUM` 300x250 rather
than `LEADERBOARD` 728x90. The adapter never renders a size larger than the space it was given, because that would
count a billable impression while overflowing your layout.

If nothing fits, the adapter declines the bid through the load callback, so the load fails instead of rendering at the
wrong size. A 320x49 bid is a no-fill, because even the shortest Chartboost banner needs 50dp of height.

The size set is read from the host SDK at runtime, so a size added in a later Monetization SDK release becomes
selectable without an adapter release. Your Prebid Server has to offer that size in the auction as well.

## Consent and privacy

This adapter does not collect, store, or forward any consent signals. GDPR, US Privacy (CCPA), COPPA, and GPP are owned
by the Chartboost Monetization SDK. The Chartboost Monetization SDK will collect these signals, if available from
consent management platforms. Configure your regulatory signals via your consent management platform before loading
ads, exactly as you would for any other Chartboost integration; see
[SDK Privacy Methods](/en/monetization/integrate/android/sdk-privacy-methods/) for how. Plugin-rendered ads render
through that same SDK instance, so its consent state applies to them as well.

## Troubleshooting

**A Chartboost-flagged bid renders through Prebid's default renderer.** Check that the adapter name
(`Chartboost-Android-SDK`) and version both match what your Prebid Server returns in `ext.prebid.meta`. A mismatch is
silent by design.

**Banners no-fill with a size message.** The bid's negotiated size is too small for any Chartboost banner size. See
[Banner sizes](#banner-sizes). Most size mismatches are filtered server-side before they reach the device, so a
client-side no-fill points at a bid whose size the auction should not have offered.
