# Migration from 4.X to 5.X

<style>
  tr, td, th {
    text-align: left; 
    vertical-align: top;
    width: 50%;
  }
</style>

All code samples are provided in C# unless otherwise noted. The 5.X documentation is effective for v5.0.0. Refer to the main documentation for the most up-to-date information with the latest 5.X version.

## New Features for the 5.X Series

### Chartboost Core SDK Required

The Chartboost Mediation 5.X series of SDKs introduces a new architecture centered around the Chartboost Core SDK. By moving the Mediation SDK's consent duties to the Core SDK, the Mediation SDK is able to more rapidly keep pace with the evolving privacy and consent landscape.

Review the [Core SDK integration guide](/en/mediation/integrate/core/unity/get-started/) for more information.

### Chartboost Mediation API

The public APIs have been audited so that there is better parity between all of the platforms.

- The fixed and adapter banner APIs have been merged into a singular API.
- The fullscreen ads API architecture has been updated to match that of the banner ads API.
- The `ChartboostMediation` prefixing has been dropped in most APIs for brevity.

### Classes

| Mediation 4.X                          | Mediation 5.X                          |
| -------------------------------------- | -------------------------------------- |
| `ChartboostMediation`                  | `ChartboostMediation`                  |
| `ChartboostMediationInterstitialAd`    | <span style="color:red">Removed</span> |
| `ChartboostMediationRewardedAd`        | <span style="color:red">Removed</span> |
| `ChartboostMediationBannerAd`          | <span style="color:red">Removed</span> |
| `IChartboostMediationBannerView`       | `IBannerAd`                            |
| `ChartboostMediationUnityBannerAd`     | `UnityBannerAd`                        |
| `IChartboostMediationFullscreenAd`     | `IFullscreenAd`                        |
| `ChartboostMediationFullscreenAdQueue` | `IFullscreenAdQueue`                   |
| `ChartboostMediationAdapterInfo`       | `AdapterInfo`                          |
| `ChartboostMediationSettings`          | <span style="color:red">Removed</span> |
| `IPartnerConsent`                      | <span style="color:red">Removed</span> |

### Delegates

| Mediation 4.X                                              | Mediation 5.X                                          |
| ---------------------------------------------------------- | ------------------------------------------------------ |
| `ChartboostMediationILRDEvent`                             | `ChartboostMediationImpressionLevelRevenueDataEvent`   |
| `ChartboostMediationPartnerInitializationEvent`            | `ChartboostMediationPartnerAdapterInitializationEvent` |
| `ChartboostMediationEvent`                                 | <span style="color:red">Removed</span>                 |
| `ChartboostMediationPlacementEvent`                        | <span style="color:red">Removed</span>                 |
| `ChartboostMediationPlacementLoadEvent`                    | <span style="color:red">Removed</span>                 |
| `ChartboostMediationFullscreenAdEvent`                     | `FullscreenAdEvent`                                    |
| `ChartboostMediationFullscreenAdEventWithError`            | `FullscreenAdEventWithError`                           |
| `ChartboostMediationFullscreenAdQueueEvent`                | `FullscreenAdQueueUpdateEvent`                         |
| `ChartboostMediationFullscreenAdQueueRemoveExpiredAdEvent` | `FullscreenAdQueueRemoveExpiredAdEvent`                |
| `ChartboostMediationBannerEvent`                           | `BannerAdEvent`                                        |
| `ChartboostMediationBannerDragEvent`                       | `BannerAdDragEvent`                                    |
| `ChartboostMediationUnityBannerAdEvent`                    | `UnityBannerAdEvent`                                   |
| `ChartboostMediationUnityBannerAdDragEvent`                | `UnityBannerAdDragEvent`                               |

> **Note** The tables above covers most relevant developer facing APIs. As mentioned before, the `ChartboostMediation` prefixing has been dropped for brevity, APIs not mentioned above have been renamed accordingly.

## Integration

### Initialization

Starting with Mediation SDK 5.0.0, the Mediation SDK can only be initialized by Chartboost Core SDK. This architectural change was made so that Core can manage the initialization sequences of the current Mediation SDK and future SDKs on the horizon.

Review the [Core SDK integration guide](/en/mediation/integrate/core/unity/integration/) for more information.

<ul class="tab" data-tab="88bc82d6-a8f9-4b56-9e30-9d714e6a96a9" data-name="UnityMigration4x5xInitialization">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="88bc82d6-a8f9-4b56-9e30-9d714e6a96a9" data-name="UnityMigration4x5xInitialization">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// New Manual Initialization after 4.1.0</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">StartWithOptions</span><span class="p">(</span><span class="n">ChartboostMediationSettings</span><span class="p">.</span><span class="n">AppId</span><span class="p">,</span> <span class="n">ChartboostMediationSettings</span><span class="p">.</span><span class="n">AppSignature</span><span class="p">);</span>

<span class="c1">// Old Style of Manual Initialization Not Using ChartboostMediationSettings Scritable Object</span>
<span class="kt">var</span> <span class="n">appId</span> <span class="p">=</span> <span class="s">""</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">appSignature</span> <span class="p">=</span> <span class="s">""</span><span class="p">;</span>

<span class="cp">#if UNITY_ANDROID
</span><span class="n">appId</span> <span class="p">=</span> <span class="s">"ANDROID_SAMPLE_APP_ID"</span><span class="p">;</span>
<span class="n">appSignature</span> <span class="p">=</span> <span class="s">"ANDROID_SAMPLE_APP_SIGNATURE"</span><span class="p">;</span>
<span class="cp">#elif UNITY_IOS
</span><span class="n">appId</span> <span class="p">=</span> <span class="s">"IOS_SAMPLE_APP_ID"</span><span class="p">;</span>
<span class="n">appSignature</span> <span class="p">=</span> <span class="s">"IOS_SAMPLE_APP_SIGNATURE"</span><span class="p">;</span>
<span class="cp">#endif
</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">StartWithOptions</span><span class="p">(</span><span class="n">appID</span><span class="p">,</span> <span class="n">appSignature</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ChartboostCore</span><span class="p">.</span><span class="n">ModuleInitializationCompleted</span> <span class="p">+=</span> <span class="n">result</span> <span class="p">=&gt;</span>
<span class="p">{</span>
    <span class="c1">// If not Chartboost' Mediation, then ignore since we only care about CBMediation in this case.</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span> <span class="p">!=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">CoreModuleId</span><span class="p">)</span>
            <span class="k">return</span><span class="p">;</span>

    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"Received initialization result for: </span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span><span class="p">}</span><span class="s"> start:</span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">Start</span><span class="p">}</span><span class="s">, end:</span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">End</span><span class="p">}</span><span class="s"> with duration: </span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">Duration</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

    <span class="c1">// Module failed to initialize module</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="n">HasValue</span><span class="p">)</span> 
        <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"Module: </span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span><span class="p">}</span><span class="s"> failed to initialize with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</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="n">Value</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="c1">// Modue succeeded to initialize, add to list of modules to skip to pass on the next ChartboostCore.Initialize call.</span>
    <span class="k">else</span>
        <span class="n">modulesToSkip</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span><span class="p">);</span>
<span class="p">};</span>
</code></pre></div></div>
</li>
  
</ul>


### Network Killswitch

Since Mediation SDK initialization is now handled by the Core SDK, the network killswitch feature has been moved to the static method `ChartboostMediation.SetPreInitializationConfiguration` that must be called before Core SDK initialization is initiated.

<ul class="tab" data-tab="85331ff1-f411-45c2-baf8-cd5d8cb8f001" data-name="UnityMigration4x5xNetworkKillswitch">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="85331ff1-f411-45c2-baf8-cd5d8cb8f001" data-name="UnityMigration4x5xNetworkKillswitch">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">var</span> <span class="n">options</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]{</span><span class="s">"network_identifier"</span><span class="p">,</span> <span class="s">"network_identifier2"</span><span class="p">};</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">StartWithOptions</span><span class="p">(</span><span class="n">ChartboostMediationSettings</span><span class="p">.</span><span class="n">AppId</span><span class="p">,</span> <span class="n">ChartboostMediationSettings</span><span class="p">.</span><span class="n">AppSignature</span><span class="p">,</span> <span class="n">options</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// List of partners ids to skip initialization</span>
<span class="n">HashSet</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">skippablePartnerIds</span> <span class="p">=</span> <span class="k">new</span> <span class="n">HashSet</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="n">ChartboostAdapter</span><span class="p">.</span><span class="n">PartnerIdentifier</span><span class="p">,</span>
    <span class="n">MetaAudienceNetworkAdapter</span><span class="p">.</span><span class="n">PartnerIdentifier</span>
<span class="p">};</span>

<span class="c1">// Create ChartboostMediationPreInitializationConfiguration object</span>
<span class="n">ChartboostMediationPreInitializationConfiguration</span> <span class="n">preinitializatioOptions</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">ChartboostMediationPreInitializationConfiguration</span><span class="p">(</span><span class="n">skippablePartnerIds</span><span class="p">);</span>

<span class="c1">// Set ChartboostMediationPreInitializationConfiguration object</span>
<span class="n">ChartboostMediationError</span><span class="p">?</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetPreInitializationConfiguration</span><span class="p">(</span><span class="n">preinitializatioOptions</span><span class="p">);</span>

<span class="c1">// Report if failed to set ChartboostMediationPreInitializationConfiguration object</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span> 
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"Failed to set PreInitializationConfiguration: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">Value</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
</ul>


### Consent

All privacy and consent related APIs have been removed from the Mediation 5.X SDK and will be handled by the Core SDK.

The Mediation SDK will continue to utilize the TCFv2 string as part of auction requests, and will forward consent changes to the partner adapters. For partners that utilize complex non-IAB compliant privacy and consent signals that cannot be extrapolated from Core SDK consent signals, last resort APIs will be exposed via that partner adapter's `AdapterConfiguration` class and must be directly set on the adapter configuration.

For more information on supported Consent Mediation Platforms and their integration, review the [Core SDK integration guide](/en/mediation/integrate/core/unity/integration/#integrating-consent-management-platform).

#### HyprMX

```csharp
// Given
HyprMXAdapter.SetConsentStatusOverride(HyprMXConsentStatus.ConsentGiven);

// Declined
HyprMXAdapter.SetConsentStatusOverride(HyprMXConsentStatus.ConsentDeclined);

// Unknown
HyprMXAdapter.SetConsentStatusOverride(HyprMXConsentStatus.ConsentDeclined);
```

#### Pangle

```csharp
// Consent
PangleAdapter.SetGDPRConsentOverride(PangleGDPRConsentType.PangleGDPRConsentConsent);

// No Consent
PangleAdapter.SetGDPRConsentOverride(PangleGDPRConsentType.PangleGDPRConsentNoConsent);

// Default
PangleAdapter.SetGDPRConsentOverride(PangleGDPRConsentType.PangleGDPRConsentTypeDefault);

// Sell
PangleAdapter.SetDoNotSellOverride(PangleDoNotSellType.PangleGDoNotSellTypeSell);

// Not Sell
PangleAdapter.SetDoNotSellOverride(PangleDoNotSellType.PangleDoNotSellTypeNotSell);

// Default
PangleAdapter.SetDoNotSellOverride(PangleDoNotSellType.PangleDoNotSellTypeDefault);
```

#### UnityAds

```csharp
// Consent
UnityAdsAdapter.SetGDPRConsentOverride(true);


// No Consent
UnityAdsAdapter.SetGDPRConsentOverride(false);

// Consent
UnityAdsAdapter.SetPrivacyConsentOverride(true);

// No Consent
UnityAdsAdapter.SetPrivacyConsentOverride(false);
```

#### Vungle

```csharp
// Consent
VungleAdapter.SetGDPRStatusOverride(true);


// No Consent
VungleAdapter.SetGDPRStatusOverride(false);

// Consent
VungleAdapter.SetCCPAStatusOverride(true);

// No Consent
VungleAdapter.SetCCPAStatusOverride(false);
```

### Publisher Metadata

Publisher-specified data used to improve auction requests have been moved to the Core SDK, and will still be available to the Mediation 5.X auction requests.

| Mediation 4.X                                | Mediation 5.X                                                                      |
| -------------------------------------------- | ---------------------------------------------------------------------------------- |
| `ChartboostMediation.SetUserIdentifier`      | `ChartboostCore.PublisherMetadata.SetPlayerIdentifier(frameworkname:)`             |
| <span style="color:red">No Equivalent</span> | `ChartboostCore.PublisherMetadata.SetFramework(frameworkName:, frameworkVersion:)` |
| `ChartboostMediation.SetSubjectToCoppa`      | `ChartboostCore.PublisherMetadata.SetIsUserUnderage(isUserUnderage:)`              |

### Adaptive and Fixed Banners
The changes to adaptive banner ads APIs revolved around naming convention parity and architectural alignment with the banner ads APIs.

<ul class="tab" data-tab="0e3a43cf-5514-467a-b743-536b9d6ca5d0" data-name="UnityMigration4x5xAdaptiveBanners">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="0e3a43cf-5514-467a-b743-536b9d6ca5d0" data-name="UnityMigration4x5xAdaptiveBanners">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Using ChartboostMediationBannerView API </span>
<span class="c1">// Get a bannerView</span>
<span class="n">IChartboostMediationBannerView</span> <span class="n">bannerView</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetBannerView</span><span class="p">();</span>

<span class="c1">// Determine the maximum size to load using width and height</span>
<span class="kt">var</span> <span class="n">size</span> <span class="p">=</span> <span class="n">ChartboostMediationBannerSize</span><span class="p">.</span><span class="nf">Adaptive</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">);</span>

<span class="c1">// create a load request with size and your placementName</span>
<span class="kt">var</span> <span class="n">loadRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">ChartboostMediationBannerAdLoadRequest</span><span class="p">(</span><span class="n">placementName</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>

<span class="c1">// Determine where on the screen you want to place this bannerView</span>
<span class="kt">var</span> <span class="n">screenLocation</span> <span class="p">=</span> <span class="n">ChartboostMediationBannerAdScreenLocation</span><span class="p">.</span><span class="n">TopRight</span><span class="p">;</span>

<span class="c1">// Load the banner ad</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">bannerView</span><span class="p">.</span><span class="nf">Load</span><span class="p">(</span><span class="n">loadRequest</span><span class="p">,</span> <span class="n">screenLocation</span><span class="p">);</span>
<span class="k">if</span><span class="p">(!</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// loaded successfully</span>
<span class="p">}</span>

<span class="c1">// Using ChartboostMediationUnityBannerAd API</span>
<span class="c1">// Get reference to ChartboostMediationUnityBannerAd created in Editor</span>
<span class="k">public</span> <span class="n">ChartboostMediationUnityBannerAd</span> <span class="n">unityBannerAd</span><span class="p">;</span>

<span class="c1">// Load the banner ad inside this gameobject</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">unityBannerAd</span><span class="p">.</span><span class="nf">Load</span><span class="p">();</span>

<span class="k">if</span><span class="p">(!</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// loaded successfully</span>
<span class="p">}</span>

<span class="c1">// For Unity gameobject</span>
<span class="c1">// Get new unityBannerAd created as a child of provided canvas</span>
<span class="kt">var</span> <span class="n">canvas</span> <span class="p">=</span> <span class="n">FindObjectOfType</span><span class="p">&lt;</span><span class="n">Canvas</span><span class="p">&gt;();</span> 
<span class="n">ChartboostMediationUnityBannerAd</span> <span class="n">unityBannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetUnityBannerAd</span><span class="p">(</span><span class="n">placementName</span><span class="p">,</span> <span class="n">canvas</span><span class="p">.</span><span class="n">transform</span><span class="p">);</span>

<span class="c1">// Load the banner ad inside this gameobject</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">unityBannerAd</span><span class="p">.</span><span class="nf">Load</span><span class="p">();</span>

<span class="k">if</span><span class="p">(!</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// loaded successfully</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Get a bannerAd</span>
<span class="n">IBannerAd</span> <span class="n">bannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetBannerAd</span><span class="p">();</span>

<span class="c1">// Place it at the center of screen</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">Position</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">Vector2</span><span class="p">(</span>
    <span class="n">DensityConverters</span><span class="p">.</span><span class="nf">PixelsToNative</span><span class="p">(</span><span class="n">Screen</span><span class="p">.</span><span class="n">width</span><span class="p">/</span><span class="m">2f</span><span class="p">),</span>
    <span class="n">DensityConverters</span><span class="p">.</span><span class="nf">PixelsToNative</span><span class="p">(</span><span class="n">Screen</span><span class="p">.</span><span class="n">height</span><span class="p">/</span><span class="m">2f</span><span class="p">)</span>
<span class="p">);</span>

<span class="c1">// Set pivot</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">Pivot</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">Vector2</span><span class="p">(</span><span class="m">0.5f</span><span class="p">,</span> <span class="m">0.5f</span><span class="p">);</span>

<span class="c1">// Set banner ad callbacks</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">WillAppear</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"BannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> will appear."</span><span class="p">);</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">DidClick</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"BannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was clicked."</span><span class="p">);</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">DidDrag</span> <span class="p">+=</span> <span class="p">(</span><span class="n">ad</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"BannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was dragged x:</span><span class="p">{</span><span class="n">x</span><span class="p">}</span><span class="s">/y:</span><span class="p">{</span><span class="n">y</span><span class="p">}</span><span class="s">."</span><span class="p">);</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">DidRecordImpression</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"BannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was clicked."</span><span class="p">);</span>


<span class="c1">// create a load request with size and your placementName</span>
<span class="kt">var</span> <span class="n">loadRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">BannerAdLoadRequest</span><span class="p">(</span>
    <span class="s">"BANNER_PLACEMENT_NAME"</span><span class="p">,</span>
    <span class="n">BannerSize</span><span class="p">.</span><span class="nf">Adaptive6X1</span><span class="p">(</span><span class="n">width</span><span class="p">)</span>    <span class="c1">// This can be any other size or the old non-adaptive size like `BannerSize.Standard`</span>
<span class="p">);</span>

<span class="c1">// Check if IBannerAd failed to load</span>
<span class="kt">var</span> <span class="n">error</span> <span class="p">=</span> <span class="n">adShowResult</span><span class="p">.</span><span class="n">Error</span><span class="p">;</span>

<span class="c1">// Failed to load</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// Report load failure</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"`IBannerAd` Load failed with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="c1">// Load succeeded</span>

<span class="c1">// Report metrics and show success</span>
<span class="kt">var</span> <span class="n">loadId</span> <span class="p">=</span> <span class="n">loadResult</span><span class="p">.</span><span class="n">LoadId</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">metricsJson</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="kt">var</span> <span class="n">winningBidInfo</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">loadResult</span><span class="p">.</span><span class="n">WinningBidInfo</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"`IBannerAd` loaded successfully with:\n"</span> <span class="p">+</span>
          <span class="s">$"LoadId: </span><span class="p">{</span><span class="n">loadId</span><span class="p">}</span><span class="s">\n"</span> <span class="p">+</span>
          <span class="s">$"Metrics: </span><span class="p">{</span><span class="n">metricsJson</span><span class="p">}</span><span class="s">\n"</span> <span class="p">+</span>
          <span class="s">$"Winning Bid Info: </span><span class="p">{</span><span class="n">winningBidInfo</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
</ul>


### Banner Ads for Unity GameObject

<ul class="tab" data-tab="ad687ba5-aa0c-449e-8533-39cd50e24c5d" data-name="UnityMigration4x5xAdaptiveBannersGameObject">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="ad687ba5-aa0c-449e-8533-39cd50e24c5d" data-name="UnityMigration4x5xAdaptiveBannersGameObject">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Get new unityBannerAd created as a child of provided canvas</span>
<span class="kt">var</span> <span class="n">canvas</span> <span class="p">=</span> <span class="n">FindObjectOfType</span><span class="p">&lt;</span><span class="n">Canvas</span><span class="p">&gt;();</span> 
<span class="n">ChartboostMediationUnityBannerAd</span> <span class="n">unityBannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetUnityBannerAd</span><span class="p">(</span><span class="n">placementName</span><span class="p">,</span> <span class="n">canvas</span><span class="p">.</span><span class="n">transform</span><span class="p">);</span>

<span class="c1">// Load the banner ad inside this gameobject</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">unityBannerAd</span><span class="p">.</span><span class="nf">Load</span><span class="p">();</span>

<span class="k">if</span><span class="p">(!</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// loaded successfully</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Determine the maximum size to load using width and height</span>
<span class="n">BannerSize</span> <span class="n">size</span> <span class="p">=</span> <span class="n">BannerSize</span><span class="p">.</span><span class="nf">Adaptive</span><span class="p">(</span><span class="m">100</span><span class="p">,</span> <span class="m">100</span><span class="p">);</span>
<span class="n">BannerAdLoadRequest</span> <span class="n">loadRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">BannerAdLoadRequest</span><span class="p">(</span><span class="s">"BANNER_PLACEMENT_NAME"</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span>

<span class="c1">// Get reference to `UnityBannerAd` from scene</span>
<span class="k">public</span> <span class="n">UnityBannerAd</span> <span class="n">unityBannerAd</span><span class="p">;</span>

<span class="c1">// Or create one at runtime</span>
<span class="kt">var</span> <span class="n">unityBannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetUnityBannerAd</span><span class="p">(</span><span class="s">"PLACEMENT_NAME"</span><span class="p">,</span> <span class="n">FindObjectOfType</span><span class="p">&lt;</span><span class="n">Canvas</span><span class="p">&gt;().</span><span class="n">transform</span><span class="p">);</span>

<span class="c1">// Place this at the top-right corner of screen</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">Vector2</span><span class="p">(</span><span class="n">Screen</span><span class="p">.</span><span class="n">width</span><span class="p">,</span> <span class="n">Screen</span><span class="p">.</span><span class="n">height</span><span class="p">);</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">GetComponent</span><span class="p">&lt;</span><span class="n">RectTransform</span><span class="p">&gt;().</span><span class="n">pivot</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">Vector2</span><span class="p">(</span><span class="m">1</span><span class="p">,</span> <span class="m">1</span><span class="p">);</span>

<span class="c1">// Set callbacks</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">WillAppear</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"UnityBannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> will appear."</span><span class="p">);</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">DidClick</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"UnityBannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was clicked."</span><span class="p">);</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">DidDrag</span> <span class="p">+=</span> <span class="p">(</span><span class="n">ad</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"UnityBannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was dragged x:</span><span class="p">{</span><span class="n">x</span><span class="p">}</span><span class="s">/y:</span><span class="p">{</span><span class="n">y</span><span class="p">}</span><span class="s">."</span><span class="p">);</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">DidRecordImpression</span> <span class="p">+=</span> <span class="n">ad</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"UnityBannerAd: </span><span class="p">{</span><span class="n">ad</span><span class="p">.</span><span class="n">LoadId</span><span class="p">}</span><span class="s"> was clicked."</span><span class="p">);</span>

<span class="c1">// Load with this gameobject's rect size as request size for banner</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">unityBannerAd</span><span class="p">.</span><span class="nf">Load</span><span class="p">();</span>

<span class="c1">// Or use a custom load request</span>

<span class="c1">// Create load request</span>
<span class="kt">var</span> <span class="n">loadRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">BannerAdLoadRequest</span><span class="p">(</span>
    <span class="s">"PLACEMENT_NAME"</span><span class="p">,</span>
    <span class="n">BannerSize</span><span class="p">.</span><span class="nf">Adaptive6X1</span><span class="p">(</span><span class="m">100</span><span class="p">)</span>    <span class="c1">// This can be any other size or the old non-adaptive size like `BannerSize.Standard`</span>
<span class="p">);</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">unityBannerAd</span><span class="p">.</span><span class="nf">Load</span><span class="p">(</span><span class="n">loadRequest</span><span class="p">);</span>
<span class="k">if</span><span class="p">(!</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// loaded successfully</span>
<span class="p">}</span>

<span class="c1">// Check if UnityBannerAd failed to load</span>
<span class="kt">var</span> <span class="n">error</span> <span class="p">=</span> <span class="n">adShowResult</span><span class="p">.</span><span class="n">Error</span><span class="p">;</span>

<span class="c1">// Failed to load</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// Report load failure</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"`UnityBannerAd` Load failed with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="c1">// Load succeeded</span>

<span class="c1">// Report metrics and show success</span>
<span class="kt">var</span> <span class="n">loadId</span> <span class="p">=</span> <span class="n">loadResult</span><span class="p">.</span><span class="n">LoadId</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">metricsJson</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="kt">var</span> <span class="n">winningBidInfo</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">loadResult</span><span class="p">.</span><span class="n">WinningBidInfo</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"`UnityBannerAd` loaded successfully with:\n"</span> <span class="p">+</span>
          <span class="s">$"LoadId: </span><span class="p">{</span><span class="n">loadId</span><span class="p">}</span><span class="s">\n"</span> <span class="p">+</span>
          <span class="s">$"Metrics: </span><span class="p">{</span><span class="n">metricsJson</span><span class="p">}</span><span class="s">\n"</span> <span class="p">+</span>
          <span class="s">$"Winning Bid Info: </span><span class="p">{</span><span class="n">winningBidInfo</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
</ul>



### Resizing Adaptive Banners
Resizing adaptive banners have been removed and replaced with `bannerAd.ContainerSize = ContainerSize.WrapContent();`.

<ul class="tab" data-tab="9700ad0a-c8d6-4e76-ab8f-25693701be70" data-name="UnityMigration4x5xResizingAdaptiveBanners">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="9700ad0a-c8d6-4e76-ab8f-25693701be70" data-name="UnityMigration4x5xResizingAdaptiveBanners">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Using ChartboostMediationBannerView API</span>
<span class="n">bannerView</span><span class="p">.</span><span class="n">DidLoad</span> <span class="p">+=</span> <span class="p">(</span><span class="n">banner</span><span class="p">)</span> <span class="p">=&gt;</span> 
<span class="p">{</span>
    <span class="c1">// Determine the axis on which you want the bannerView to resize</span>
    <span class="kt">var</span> <span class="n">resizeAxis</span> <span class="p">=</span> <span class="n">ChartboostMediationBannerResizeAxis</span><span class="p">.</span><span class="n">Vertical</span><span class="p">;</span> 

    <span class="c1">// Make the resize call</span>
    <span class="n">bannerView</span><span class="p">.</span><span class="nf">ResizeToFit</span><span class="p">(</span><span class="n">resizeAxis</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// Using ChartboostMediationUnityBannerAd API </span>
<span class="c1">// Determine the resizeOption you want to set on this gameobject</span>
<span class="n">ResizeOption</span> <span class="n">resizeOption</span> <span class="p">=</span> <span class="n">ResizeOption</span><span class="p">.</span><span class="n">FitVertical</span><span class="p">;</span>

<span class="c1">// Update the resizeOption </span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">ResizeOption</span> <span class="p">=</span> <span class="n">resizeOption</span>
</code></pre></div></div>
</li>
  
</ul>



### Fullscreen Ads

The changes to the fullscreen ads APIs revolved around naming convention parity and architectural alignment with the banner ads APIs.

Review the [Fullscreen Ads integration guide](../integration/fullscreen.md) for more details. <!-- update this link-->

<ul class="tab" data-tab="5d06fbb5-60be-4d84-840b-f6cb1015dcb9" data-name="UnityMigration4x5xFullscreenAds">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="5d06fbb5-60be-4d84-840b-f6cb1015dcb9" data-name="UnityMigration4x5xFullscreenAds">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Strong reference to cached ad.</span>
<span class="k">private</span> <span class="n">IChartboostMediationFullscreenAd</span> <span class="n">_fullscreenPlacement</span><span class="p">;</span>

<span class="p">...</span>
<span class="c1">// keywords are optional</span>
<span class="kt">var</span> <span class="n">keywords</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span> <span class="p">{</span> <span class="p">{</span> <span class="s">"i12_keyword1"</span><span class="p">,</span> <span class="s">"i12_value1"</span> <span class="p">}</span> <span class="p">};</span>

<span class="c1">// Create a Fullscreen Ad Load Request</span>
<span class="kt">var</span> <span class="n">loadRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">ChartboostMediationFullscreenAdLoadRequest</span><span class="p">(</span><span class="n">FULLSCREEN_PLACEMENT</span><span class="p">,</span> <span class="n">keywords</span><span class="p">);</span>

<span class="c1">// Await on FullscreenAd Load</span>
<span class="kt">var</span> <span class="n">loadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">LoadFullscreenAd</span><span class="p">(</span><span class="n">loadRequest</span><span class="p">);</span>

<span class="c1">// Failed to Load</span>
<span class="k">if</span> <span class="p">(</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"Fullscreen Failed to Load: </span><span class="p">{</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">?.</span><span class="n">Code</span><span class="p">}</span><span class="s">, message: </span><span class="p">{</span><span class="n">loadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">?.</span><span class="n">Message</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
    <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="c1">// Successful Load!</span>

<span class="c1">// Set strong reference to cached ad</span>
<span class="n">_fullscreenAd</span> <span class="p">=</span> <span class="n">loadResult</span><span class="p">.</span><span class="n">AD</span><span class="p">;</span>

<span class="c1">// Subscribing Instance Delegates</span>
<span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="n">DidClick</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidClick Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="n">DidClose</span> <span class="p">+=</span> <span class="p">(</span><span class="n">fullscreenAd</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span> <span class="p">=&gt;</span> 
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(!</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span> <span class="p">?</span> <span class="s">$"DidClose Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span>
<span class="p">:</span> <span class="s">$"DidClose with Error. Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">, Code: </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">Code</span><span class="p">}</span><span class="s">, Message: </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">Message</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="n">DidReward</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidReward Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="n">DidRecordImpression</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidImpressionRecorded Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="n">DidExpire</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidExpire Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="c1">// Set custom data before show</span>
<span class="n">_fullscreenAd</span><span class="p">.</span><span class="n">CustomData</span> <span class="p">=</span> <span class="s">"CUSTOM DATA HERE!"</span><span class="p">;</span>

<span class="c1">// DidLoad</span>
<span class="kt">var</span> <span class="n">customData</span> <span class="p">=</span> <span class="n">_fullscreenAd</span><span class="p">.</span><span class="n">CustomData</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">adLoadId</span> <span class="p">=</span> <span class="n">_fullscreenAd</span><span class="p">.</span><span class="n">LoadId</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">bidInfo</span> <span class="p">=</span> <span class="n">_fullscreenAd</span><span class="p">.</span><span class="n">WinningBidInfo</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">placementName</span> <span class="p">=</span> <span class="n">_fullscreenAd</span><span class="p">?.</span><span class="n">Request</span><span class="p">?.</span><span class="n">PlacementName</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">loadId</span> <span class="p">=</span> <span class="n">loadResult</span><span class="p">.</span><span class="n">LoadId</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">metrics</span> <span class="p">=</span> <span class="n">loadResult</span><span class="p">.</span><span class="n">Metrics</span><span class="p">;</span>
<span class="nf">Log</span><span class="p">(</span><span class="s">$"Fullscreen: </span><span class="p">{</span><span class="n">placementName</span><span class="p">}</span><span class="s"> Loaded with: \nAdRequestId </span><span class="p">{</span><span class="n">adLoadId</span><span class="p">}</span><span class="s"> \nRequestID </span><span class="p">{</span><span class="n">loadId</span><span class="p">}</span><span class="s"> \nBidInfo: </span><span class="p">{</span><span class="n">JsonConvert</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">bidInfo</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s"> \n Metrics:</span><span class="p">{</span><span class="n">JsonConvert</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s"> \n Custom Data: </span><span class="p">{</span><span class="n">customData</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="c1">// Check for existing Ad </span>
<span class="k">if</span> <span class="p">(</span><span class="n">_fullscreenAd</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span>
   <span class="k">return</span><span class="p">;</span>


<span class="c1">// Make a load request</span>
<span class="kt">var</span> <span class="n">adShowResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">_fullscreenAd</span><span class="p">.</span><span class="nf">Show</span><span class="p">();</span>
<span class="kt">var</span> <span class="n">error</span> <span class="p">=</span> <span class="n">adShowResult</span><span class="p">.</span><span class="n">error</span><span class="p">;</span>


<span class="c1">// Failed to Show</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
   <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"Fullscreen Failed to Show with Value: </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">code</span><span class="p">}</span><span class="s">, </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">message</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
   <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>


<span class="c1">// Successful Fullscreen Show. This will only finish after the ad show is completed.</span>
<span class="kt">var</span> <span class="n">metrics</span> <span class="p">=</span> <span class="n">adShowResult</span><span class="p">.</span><span class="n">metrics</span><span class="p">;</span>
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"Fullscreen Ad Did Show: </span><span class="p">{</span><span class="n">JsonConvert</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Keywords to pass for fullscreen ad</span>
<span class="kt">var</span> <span class="n">keywords</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="p">{</span> <span class="s">"key"</span><span class="p">,</span> <span class="s">"value"</span> <span class="p">},</span>
    <span class="p">{</span> <span class="s">"key_2"</span><span class="p">,</span> <span class="s">"value_2"</span> <span class="p">}</span>
<span class="p">};</span>

<span class="c1">// Create FullscreenAdLoadRequest with keywords</span>
<span class="n">FullscreenAdLoadRequest</span> <span class="n">fullscreenAdRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">FullscreenAdLoadRequest</span><span class="p">(</span><span class="s">"FULLSCREEN_PLACEMENT_ID"</span><span class="p">,</span> <span class="n">keywords</span><span class="p">);</span>

<span class="c1">// Load `IFullscreenAd` using async approach and our previously built FullscreenAdLoadRequest</span>
<span class="n">FullscreenAdLoadResult</span> <span class="n">fullscreenAdLoadResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">LoadFullscreenAd</span><span class="p">(</span><span class="n">fullscreenAdRequest</span><span class="p">);</span>

<span class="c1">// Check if an error occurred</span>
<span class="n">ChartboostMediationError</span><span class="p">?</span> <span class="n">error</span> <span class="p">=</span> <span class="n">fullscreenAdLoadResult</span><span class="p">.</span><span class="n">Error</span><span class="p">;</span>

<span class="c1">// Load failed</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// Report load failure</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"`IFullscreenAd` Load failed with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="c1">// Load succeeded </span>

<span class="c1">// Parse load result data</span>
<span class="kt">var</span> <span class="n">loadId</span> <span class="p">=</span> <span class="n">fullscreenAdLoadResult</span><span class="p">.</span><span class="n">LoadId</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">winningBidInfoJson</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">fullscreenAdLoadResult</span><span class="p">.</span><span class="n">WinningBidInfo</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="kt">var</span> <span class="n">metricsJson</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">fullscreenAdLoadResult</span><span class="p">.</span><span class="n">Metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>

<span class="c1">// Report fullscreen ad load result information</span>
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"`IFullscreenAd` load completed with: LoadId</span><span class="p">{</span><span class="n">loadId</span><span class="p">}</span><span class="s"> WinningBidInfo: </span><span class="p">{</span><span class="n">winningBidInfoJson</span><span class="p">}</span><span class="s">, Metrics: </span><span class="p">{</span><span class="n">metricsJson</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="c1">// Obtain IFullscreenAd</span>
<span class="n">IFullscreenAd</span> <span class="n">ad</span> <span class="p">=</span> <span class="n">fullscreenAdLoadResult</span><span class="p">.</span><span class="n">Ad</span><span class="p">;</span>

<span class="c1">// Subscribing IFullscreenAd Instance Delegates</span>
<span class="n">ad</span><span class="p">.</span><span class="n">DidClick</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidClick Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">ad</span><span class="p">.</span><span class="n">DidClose</span> <span class="p">+=</span> <span class="p">(</span><span class="n">fullscreenAd</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(!</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span> <span class="p">?</span> <span class="s">$"DidClose Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span> <span class="p">:</span> <span class="s">$"DidClose with Error. Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">, Code: </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">Code</span><span class="p">}</span><span class="s">, Message: </span><span class="p">{</span><span class="n">error</span><span class="p">?.</span><span class="n">Message</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">ad</span><span class="p">.</span><span class="n">DidReward</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidReward Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">ad</span><span class="p">.</span><span class="n">DidRecordImpression</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidImpressionRecorded Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="n">ad</span><span class="p">.</span><span class="n">DidExpire</span> <span class="p">+=</span> <span class="n">fullscreenAd</span> <span class="p">=&gt;</span> <span class="nf">Log</span><span class="p">(</span><span class="s">$"DidExpire Name: </span><span class="p">{</span><span class="n">fullscreenAd</span><span class="p">.</span><span class="n">Request</span><span class="p">.</span><span class="n">PlacementName</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

<span class="c1">// Show `IFullscreenAd` using async approach</span>
<span class="n">AdShowResult</span> <span class="n">adShowResult</span> <span class="p">=</span> <span class="k">await</span> <span class="n">ad</span><span class="p">.</span><span class="nf">Show</span><span class="p">();</span>

<span class="c1">// Check if IFullscreenAd failed to show</span>
<span class="kt">var</span> <span class="n">error</span> <span class="p">=</span> <span class="n">adShowResult</span><span class="p">.</span><span class="n">Error</span><span class="p">;</span>

<span class="c1">// Failed to show</span>
<span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">HasValue</span><span class="p">)</span>
<span class="p">{</span>
    <span class="c1">// Report show failure</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"`IFullscreenAd` Show failed with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">error</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="k">return</span><span class="p">;</span>
<span class="p">}</span>

<span class="c1">// Show succeeded</span>

<span class="c1">// Report metrics and show sucess</span>
<span class="kt">var</span> <span class="n">metricsJson</span> <span class="p">=</span> <span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</span><span class="p">(</span><span class="n">adShowResult</span><span class="p">.</span><span class="n">Metrics</span><span class="p">,</span> <span class="n">Formatting</span><span class="p">.</span><span class="n">Indented</span><span class="p">);</span>
<span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"`IFullscreenAd` show completed with: Metrics: </span><span class="p">{</span><span class="n">metricsJson</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
</ul>


### Discarding Oversized Ads

The changes to the discarding oversized ads revolved around naming convention parity.

<ul class="tab" data-tab="656a4bcc-1b82-439f-9d5b-48ddc9362a8c" data-name="UnityMigration4x5xDiscardingOversizedAds">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="656a4bcc-1b82-439f-9d5b-48ddc9362a8c" data-name="UnityMigration4x5xDiscardingOversizedAds">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// To drop oversized ads</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">DiscardOversizedAds</span><span class="p">(</span><span class="k">true</span><span class="p">)</span>

<span class="c1">// To allow oversized ads</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">DiscardOversizedAds</span><span class="p">(</span><span class="k">false</span><span class="p">)</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">DiscardOverSizedAds</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">DiscardOverSizedAds</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span>
</code></pre></div></div>
</li>
  
</ul>


### Disposing Loaded Ads

The changes to disposing loaded ads revolved around naming convention parity and architectural alignment. Starting Mediation 5.X the Ad objects implement the [IDisposable](https://learn.microsoft.com/en-us/dotnet/api/system.idisposable?view=net-8.0){:target="_blank"} interface to properly dispose of managed and unmanaged resources.

<ul class="tab" data-tab="a169d381-c24f-4097-88b5-d7eec4c4cf6e" data-name="UnityMigration4x5xDisposingOversizedAds">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="a169d381-c24f-4097-88b5-d7eec4c4cf6e" data-name="UnityMigration4x5xDisposingOversizedAds">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">private</span> <span class="k">void</span> <span class="nf">OnDestroy</span><span class="p">()</span>
<span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">_fullscreenPlacement</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="n">_fullscreenPlacement</span><span class="p">.</span><span class="nf">Invalidate</span><span class="p">();</span>
        <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">"Invalidated an existing fullscreen"</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">_bannerAd</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span>
    <span class="k">if</span> <span class="p">(</span><span class="n">_bannerView</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span>
    <span class="p">{</span>
        <span class="n">_bannerAd</span><span class="p">.</span><span class="nf">ClearLoaded</span><span class="p">();</span>
        <span class="n">_bannerAd</span><span class="p">.</span><span class="nf">Destroy</span><span class="p">();</span>
        <span class="n">_bannerView</span><span class="p">.</span><span class="nf">Reset</span><span class="p">();</span>
        <span class="n">_bannerView</span><span class="p">.</span><span class="nf">Destroy</span><span class="p">();</span>
        <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">"Destroyed an existing banner"</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="k">if</span><span class="p">(</span><span class="n">_unityBannerAd</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span>
    <span class="p">{</span>       
        <span class="n">_unityBannerAd</span><span class="p">.</span><span class="nf">Reset</span><span class="p">();</span>
        <span class="nf">Destroy</span><span class="p">(</span><span class="n">_unityBannerAd</span><span class="p">.</span><span class="n">gameobject</span><span class="p">);</span>
        <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">"Destroyed an existing banner"</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">fullscreenAd</span><span class="p">.</span><span class="nf">Dispose</span><span class="p">();</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="nf">Dispose</span><span class="p">();</span>
</code></pre></div></div>
</li>
  
</ul>


## Configuring Mediation

### Test Mode

The changes to the test mode revolved around naming convention parity.

<ul class="tab" data-tab="2ead35d1-380e-4525-acf9-6bf36425bbc3" data-name="UnityMigration4x5xTestMode">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="2ead35d1-380e-4525-acf9-6bf36425bbc3" data-name="UnityMigration4x5xTestMode">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetTestMode</span><span class="p">(</span><span class="k">true</span><span class="p">);</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetTestMode</span><span class="p">(</span><span class="k">false</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">TestMode</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">TestMode</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span>
</code></pre></div></div>
</li>
  
</ul>


### Privacy Methods

All privacy methods have been removed from 5.X and migrated to Chartboost Core SDK.

<ul class="tab" data-tab="2359a9a5-a393-4ace-8cb0-3f4481105baa" data-name="UnityMigration4x5xPrivacyMethods">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="2359a9a5-a393-4ace-8cb0-3f4481105baa" data-name="UnityMigration4x5xPrivacyMethods">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// COPPA</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetSubjectToCoppa</span><span class="p">(</span><span class="k">true</span><span class="p">);</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetSubjectToCoppa</span><span class="p">(</span><span class="k">false</span><span class="p">);</span>

<span class="c1">//- By sending `SetSubjectToCoppa(true)`, you indicate that you want your content treated as child-directed for purposes of COPPA. We will take steps to disable interest-based advertising for such ad requests.</span>
<span class="c1">//- By sending `SetSubjectToCoppa(false)`, you indicate that you don't want your content treated as child-directed for purposes of COPPA. You represent and warrant that your applications and services are not directed towards children and that you will not provide any information to Mediation from a user under the age of 13.</span>

<span class="c1">// GDPR</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetSubjectToGDPR</span><span class="p">(</span><span class="k">true</span><span class="p">);</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetSubjectToGDPR</span><span class="p">(</span><span class="k">false</span><span class="p">);</span>

<span class="c1">//- By sending `setSubjectToGDPR(true)`, you indicate that GDPR is applied to this user from your application.</span>
<span class="c1">//- By sending `setSubjectToGDPR(false)`, you indicate that GDPR is not applied to this user from your application.</span>

<span class="c1">// User Given Consent</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetUserHasGivenConsent</span><span class="p">(</span><span class="k">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetUserHasGivenConsent</span><span class="p">(</span><span class="k">false</span><span class="p">)</span>

<span class="c1">//- By sending `SetUserHasGivenConsent(true)`, you indicate that this user from your application has given consent to share personal data for behavior-targeted advertising.</span>
<span class="c1">//- By sending `SetUserHasGivenConsent(false)`, you indicate that this user from your application has not given consent to use its personal data for behavior-targeted advertising, so only contextual advertising is allowed.</span>

<span class="c1">// CCPA</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetCCPAConsent</span><span class="p">(</span><span class="k">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">SetCCPAConsent</span><span class="p">(</span><span class="k">false</span><span class="p">)</span>

<span class="c1">//- By sending `SetCCPAConsent(true)`, you indicate that this user from your application has given consent to share personal data for behavior-targeted advertising under CCPA regulation.</span>
<span class="c1">//- By sending `SetCCPAConsent(false)`, you indicate that this user from your application has not given consent to allow sharing personal data for behavior-targeted advertising under CCPA regulation.</span>
</code></pre></div></div>
</li>
  
</ul>


## Mediation Start / Module Observer

Initialization of the Mediation SDK is now done by the [Chartboost Core SDK](/en/mediation/integrate/core/unity/integration/#initializing-core-with-modules). To receive initialization callbacks, utilize the module observer.

<ul class="tab" data-tab="cf8cb01e-f52e-45dc-b4bc-ead293659c30" data-name="UnityMigration4x5xModuleObserver">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="cf8cb01e-f52e-45dc-b4bc-ead293659c30" data-name="UnityMigration4x5xModuleObserver">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ChartboostCore</span><span class="p">.</span><span class="n">ModuleInitializationCompleted</span> <span class="p">+=</span> <span class="n">result</span> <span class="p">=&gt;</span>
<span class="p">{</span>
    <span class="kt">var</span> <span class="n">moduleName</span> <span class="p">=</span> <span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span> <span class="p">==</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">CoreModuleId</span> <span class="p">?</span> <span class="s">"Chartboost Mediation"</span> <span class="p">:</span> <span class="s">$"Chartboost Core module </span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span><span class="p">}</span><span class="s">"</span><span class="p">;</span>

    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"Received initialization result for: </span><span class="p">{</span><span class="n">moduleName</span><span class="p">}</span><span class="s"> start:</span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">Start</span><span class="p">}</span><span class="s">, end:</span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">End</span><span class="p">}</span><span class="s"> with duration: </span><span class="p">{</span><span class="n">result</span><span class="p">.</span><span class="n">Duration</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>

    <span class="c1">// Module failed to initialize module</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="n">HasValue</span><span class="p">)</span> 
        <span class="n">Debug</span><span class="p">.</span><span class="nf">LogError</span><span class="p">(</span><span class="s">$"Module: </span><span class="p">{</span><span class="n">moduleName</span><span class="p">}</span><span class="s"> failed to initialize with error: </span><span class="p">{</span><span class="n">JsonTools</span><span class="p">.</span><span class="nf">SerializeObject</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="n">Value</span><span class="p">)}</span><span class="s">"</span><span class="p">);</span>
    <span class="c1">// Modue succeeded to initialize, add to list of modules to skip to pass on the next ChartboostCore.Initialize call.</span>
    <span class="k">else</span>
        <span class="n">modulesToSkip</span><span class="p">.</span><span class="nf">Add</span><span class="p">(</span><span class="n">result</span><span class="p">.</span><span class="n">ModuleId</span><span class="p">);</span>
<span class="p">};</span>
</code></pre></div></div>
</li>
  
</ul>


## Keywords

The changes to the fullscreen ads APIs revolved around naming convention parity and architectural alignment with the banner ads APIs.

Keywords are now set after obtaining the banner or fullscreen ad objects. To remove keywords, pass a new set without those keywords. The list will be overridden. This is to facilitate the wrapping process between Unity and native platforms.

<ul class="tab" data-tab="fcefb9c9-c4d4-4cf5-bd17-9383fdec8fce" data-name="UnityMigration4x5xKeywords">
  
      <li class="active">
          <a href="#">Mediation 4.x </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.x </a>
      </li>
  
</ul>
<ul class="tab-content" id="fcefb9c9-c4d4-4cf5-bd17-9383fdec8fce" data-name="UnityMigration4x5xKeywords">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Create an Ad object.</span>
<span class="n">ChartboostMediationInterstitialAd</span> <span class="n">interstitialAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetInterstitialAd</span><span class="p">(</span><span class="n">PLACEMENT_INTERSTITIAL</span><span class="p">);</span>

<span class="n">ChartboostMediationRewardedAd</span> <span class="n">rewardedAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetRewardedAd</span><span class="p">(</span><span class="n">PLACEMENT_REWARDED</span><span class="p">);</span>

<span class="n">ChartboostMediationBannerAd</span> <span class="n">bannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetBannerAd</span><span class="p">(</span><span class="n">PLACEMENT_BANNER</span><span class="p">,</span> <span class="n">BANNER_SIZE</span><span class="p">);</span>

<span class="c1">// Set a Keyword</span>
<span class="k">this</span><span class="p">.</span><span class="n">interstitialAd</span><span class="p">.</span><span class="nf">SetKeyword</span><span class="p">(</span><span class="s">"i12_keyword1"</span><span class="p">,</span> <span class="s">"i12_value1"</span><span class="p">);</span>
<span class="k">this</span><span class="p">.</span><span class="n">rewardedAd</span><span class="p">.</span><span class="nf">SetKeyword</span><span class="p">(</span><span class="s">"rwd_keyword1"</span><span class="p">,</span> <span class="s">"rwd_value1"</span><span class="p">);</span>
<span class="k">this</span><span class="p">.</span><span class="n">bannerAd</span><span class="p">.</span><span class="nf">SetKeyword</span><span class="p">(</span><span class="s">"bnr_keyword1"</span><span class="p">,</span> <span class="s">"bnr_value1"</span><span class="p">);</span>

<span class="c1">// Remove Keyword.</span>
<span class="k">this</span><span class="p">.</span><span class="n">interstitialAd</span><span class="p">.</span><span class="nf">RemoveKeyword</span><span class="p">(</span><span class="s">"i12_keyword1"</span><span class="p">);</span>
<span class="k">this</span><span class="p">.</span><span class="n">rewardedAd</span><span class="p">.</span><span class="nf">RemoveKeyword</span><span class="p">(</span><span class="s">"rwd_keyword1"</span><span class="p">);</span>
<span class="k">this</span><span class="p">.</span><span class="n">bannerAd</span><span class="p">.</span><span class="nf">RemoveKeyword</span><span class="p">(</span><span class="s">"bnr_keyword1"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Keywords to pass for fullscreen ad</span>
<span class="kt">var</span> <span class="n">keywords</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="p">{</span> <span class="s">"key"</span><span class="p">,</span> <span class="s">"value"</span> <span class="p">},</span>
    <span class="p">{</span> <span class="s">"key_2"</span><span class="p">,</span> <span class="s">"value_2"</span> <span class="p">}</span>
<span class="p">};</span>

<span class="c1">// Create FullscreenAdLoadRequest with keywords</span>
<span class="n">FullscreenAdLoadRequest</span> <span class="n">fullscreenAdRequest</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">FullscreenAdLoadRequest</span><span class="p">(</span><span class="s">"FULLSCREEN_PLACEMENT_ID"</span><span class="p">,</span> <span class="n">keywords</span><span class="p">);</span>

<span class="c1">// Keywords to pass for banner ad</span>
<span class="kt">var</span> <span class="n">keywords</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="p">{</span> <span class="s">"key"</span><span class="p">,</span> <span class="s">"value"</span> <span class="p">},</span>
    <span class="p">{</span> <span class="s">"key_2"</span><span class="p">,</span> <span class="s">"value_2"</span> <span class="p">}</span>
<span class="p">};</span>

<span class="c1">// Get banner ad</span>
<span class="n">IBannerAd</span> <span class="n">bannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetBannerAd</span><span class="p">();</span>

<span class="c1">// Set keywords</span>
<span class="n">bannerAd</span><span class="p">.</span><span class="n">Keywords</span> <span class="p">=</span> <span class="n">keywords</span><span class="p">;</span>


<span class="c1">// Keywords to pass for unity banner ad</span>
<span class="kt">var</span> <span class="n">keywords</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span>
<span class="p">{</span>
    <span class="p">{</span> <span class="s">"key"</span><span class="p">,</span> <span class="s">"value"</span> <span class="p">},</span>
    <span class="p">{</span> <span class="s">"key_2"</span><span class="p">,</span> <span class="s">"value_2"</span> <span class="p">}</span>
<span class="p">};</span>

<span class="c1">// Get UnityBannerAd</span>
<span class="n">UnityBannerAd</span> <span class="n">unityBannerAd</span> <span class="p">=</span> <span class="n">ChartboostMediation</span><span class="p">.</span><span class="nf">GetUnityBannerAd</span><span class="p">(</span><span class="s">"PLACEMENT_NAME"</span><span class="p">);</span>

<span class="c1">// Set keywords</span>
<span class="n">unityBannerAd</span><span class="p">.</span><span class="n">Keywords</span> <span class="p">=</span> <span class="n">keywords</span><span class="p">;</span>
</code></pre></div></div>
</li>
  
</ul>


## Error Codes

5.X will continue to use codes from 4.X with minor changes in the descriptions. Any new error codes introduced in 5.X will follow the same naming convention.