# 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 swift 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

### 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/ios/get-started/) for more information.

### 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 old `Helium` moniker has been rebranded with `ChartboostMediation` to be consistent with the product’s marketing terms.
- The `ChartboostMediation` prefixing has been dropped for brevity. In the event that there is a name collision with another SDK in the Publisher app, using the `ChartboostMediation`.namespace before the object type will tell Xcode explicitly which object to use.


### Classes

| Mediation 4.X | Mediation 5.X |
|---------------|---------------|
| `Helium` | `ChartboostMediation` |
| `HeliumAdapterInfo` | `PartnerAdapterInfo` |
| `HeliumBannerView` | `BannerAdView` |
| `HeliumImpressionData` | `ImpressionData` |
| `HeliumInitializationOptions` | `PreinitializationConfiguration` |
| `HeliumKeywords` | <span style="color:red">Removed, now uses standard Dictionary type</span> |

### Protocols

| Mediation 4.X | Mediation 5.X |
|---------------|---------------|
| `HeliumBannerAdDelegate` | `BannerAdViewDelegate` |
| `HeliumSdkDelegate` | <span style="color:red">Removed</span> |


## Integration

### SDK 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/ios/get-started/) for more information.

#### 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="7bdeffaa-b3c3-47f1-945a-b86206183ea3" data-name="iOSmigration4x5xNetworkKillswitch">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="7bdeffaa-b3c3-47f1-945a-b86206183ea3" data-name="iOSmigration4x5xNetworkKillswitch">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Optionally create an options object the with a list of partner IDs to disable.</span>
<span class="k">let</span> <span class="nv">options</span> <span class="o">=</span> <span class="kt">HeliumInitializationOptions</span><span class="p">(</span>
    <span class="nv">skippedPartnerIdentifiers</span><span class="p">:</span> <span class="kt">YOUR_LIST_OF_PARTNER_IDS_TO_SKIP</span>
<span class="p">)</span>

<span class="c1">// Initialize Chartboost Mediation.</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">start</span><span class="p">(</span>
    <span class="nv">withAppId</span><span class="p">:</span> <span class="s">"&lt;YOUR APP ID&gt;"</span><span class="p">,</span>
    <span class="nv">options</span><span class="p">:</span> <span class="n">options</span><span class="p">,</span>
    <span class="nv">delegate</span><span class="p">:</span> <span class="k">self</span> <span class="c1">// optional delegate, can be nil</span>
<span class="p">)</span>

<span class="c1">// Optionally implement the HeliumSdkDelegate protocol to get notified when</span>
<span class="c1">// Chartboost Mediation is initialized.</span>
<span class="kd">func</span> <span class="nf">heliumDidStartWithError</span><span class="p">(</span><span class="n">_</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationError</span><span class="p">?)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostCoreSDK</span>
<span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Optionally set the Chartboost Mediation preinitialization configuration</span>
<span class="c1">// to disable some mediation partners.</span>
<span class="kt">ChartboostMediation</span><span class="o">.</span><span class="nf">setPreinitializationConfiguration</span><span class="p">(</span>
    <span class="o">.</span><span class="nf">init</span><span class="p">(</span><span class="nv">skippedPartnerIDs</span><span class="p">:</span> <span class="kt">YOUR_LIST_OF_PARTNER_IDS_TO_SKIP</span><span class="p">)</span>
<span class="p">)</span>

<span class="c1">// Create a consent module instance, e.g. Usercentrics</span>
<span class="k">let</span> <span class="nv">usercentrics</span> <span class="o">=</span> <span class="kt">UsercentricsAdapter</span><span class="p">(</span>
    <span class="nv">options</span><span class="p">:</span> <span class="o">.</span><span class="nf">init</span><span class="p">(</span><span class="nv">settingsId</span><span class="p">:</span> <span class="s">"&lt;YOUR USECENTRICS SETTINGS ID&gt;"</span><span class="p">)</span>
<span class="p">)</span>

<span class="c1">// Initialize Core.</span>
<span class="c1">// This automatically initializes the Chartboost Mediation SDK, as well as other</span>
<span class="c1">// modules included in the `modules` array.</span>
<span class="c1">// Make sure to include your consent module in this array.</span>
<span class="kt">ChartboostCore</span><span class="o">.</span><span class="nf">initializeSDK</span><span class="p">(</span>
    <span class="nv">configuration</span><span class="p">:</span> <span class="o">.</span><span class="nf">init</span><span class="p">(</span><span class="nv">chartboostAppID</span><span class="p">:</span> <span class="s">"&lt;YOUR APP ID&gt;"</span><span class="p">,</span> <span class="nv">modules</span><span class="p">:</span> <span class="p">[</span><span class="n">usercentrics</span><span class="p">]),</span>
    <span class="nv">moduleObserver</span><span class="p">:</span> <span class="k">self</span>  <span class="c1">// optional observer, can be nil</span>
<span class="p">)</span>

<span class="c1">// Optionally implement the ModuleObserver protocol to get notified when some</span>
<span class="c1">// particular module is initialized (e.g. Chartboost Mediation).</span>
<span class="kd">func</span> <span class="nf">onModuleInitializationCompleted</span><span class="p">(</span><span class="n">_</span> <span class="nv">result</span><span class="p">:</span> <span class="kt">ModuleInitializationResult</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">moduleID</span> <span class="o">==</span> <span class="kt">ChartboostMediation</span><span class="o">.</span><span class="n">coreModuleID</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
            <span class="c1">// Handle error</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="c1">// Success</span>
        <span class="p">}</span>
    <span class="p">}</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/ios/integration/).

#### HyprMX

```swift
import ChartboostMediationAdapterHyprMX

// Set consent status directly on the adapter configuration
HyprMXAdapterConfiguration.setConsentStatusOverride(CONSENT_GIVEN)
```

#### Pangle

```swift
import ChartboostMediationAdapterPangle

// Set consent status directly on the adapter configuration
PangleAdapterConfiguration.setGDPRConsentOverride(.consent)
PangleAdapterConfiguration.setDoNotSellOverride(.sell)
```

#### UnityAds

```swift
import ChartboostMediationAdapterUnity

// Set consent status directly on the adapter configuration
UnityAdsAdapterConfiguration.setGDPRConsentOverride(true)
UnityAdsAdapterConfiguration.setPrivacyConsentOverride(true)
```

#### Vungle

```swift
// Demonstrate setting the consent related APIs

// Set consent status directly on the adapter configuration
VungleAdapterConfiguration.setGdprStatusOverride(true)
VungleAdapterConfiguration.setCcpaStatusOverride(true)
```

### 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 |
|---------------|---------------|
| `Helium.userIdentifier` | `ChartboostCore.publisherMetadata.setPlayerID(_:)` |
| `Helium.setGameEngineName(_, version:)` | `ChartboostCore.publisherMetadata.setFramework(name:, version:)` |
| `Helium.setSubjectToCoppa()` | `ChartboostCore.publisherMetadata.setIsUserUnderage()` |

### Adaptive Banner Ads

The changes to the adaptive banner ads APIs revolved around naming convention parity.

<ul class="tab" data-tab="b191d7eb-1fa4-4d05-b156-9be1af42dd00" data-name="iOSmigration4x5xAdaptiveBanner">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="b191d7eb-1fa4-4d05-b156-9be1af42dd00" data-name="iOSmigration4x5xAdaptiveBanner">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Create the banner ad instance</span>
<span class="k">let</span> <span class="nv">bannerAd</span> <span class="o">=</span> <span class="kt">ChartboostMediationBannerView</span><span class="p">()</span>


<span class="c1">// Create the load request</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">ChartboostMediationBannerLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_MEDIATION_PLACEMENT"</span><span class="p">,</span>
    <span class="nv">size</span><span class="p">:</span> <span class="o">.</span><span class="nf">adaptive</span><span class="p">(</span><span class="nv">width</span><span class="p">:</span> <span class="kt">SOME_WIDTH</span><span class="p">)</span>  <span class="c1">// see BannerSize for other options</span>
<span class="p">)</span>

<span class="c1">// Load the ad with the request</span>
<span class="n">bannerAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="nv">viewController</span><span class="p">:</span> <span class="k">self</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Create the banner ad instance</span>
<span class="k">let</span> <span class="nv">bannerAd</span> <span class="o">=</span> <span class="kt">BannerAdView</span><span class="p">()</span>


<span class="c1">// Create the load request</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">BannerAdLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_MEDIATION_PLACEMENT"</span><span class="p">,</span>
    <span class="nv">size</span><span class="p">:</span> <span class="o">.</span><span class="nf">adaptive</span><span class="p">(</span><span class="nv">width</span><span class="p">:</span> <span class="kt">SOME_WIDTH</span><span class="p">)</span>  <span class="c1">// see BannerSize for other options</span>
<span class="p">)</span>

<span class="c1">// Load the ad with the request</span>
<span class="n">bannerAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="nv">viewController</span><span class="p">:</span> <span class="k">self</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>


#### Resizing adaptive banner

The changes to resizing adaptive banner ads APIs revolved around naming convention parity.

<ul class="tab" data-tab="4970699b-9ad3-4ea2-a32b-09c1950048cf" data-name="iOSmigration4x5xResizingAdaptiveBanner">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="4970699b-9ad3-4ea2-a32b-09c1950048cf" data-name="iOSmigration4x5xResizingAdaptiveBanner">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">willAppear</span><span class="p">(</span><span class="nv">bannerView</span><span class="p">:</span> <span class="kt">ChartboostMediationBannerView</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Manual layout</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">bannerView</span><span class="o">.</span><span class="n">size</span><span class="p">?</span><span class="o">.</span><span class="n">size</span> <span class="p">??</span> <span class="o">.</span><span class="n">zero</span>
<span class="c1">// The alignment of the ad can be changed if the frame of the bannerView is larger than the ad.</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">horizontalAlignment</span> <span class="o">=</span> <span class="o">.</span><span class="n">left</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">verticalAlignment</span> <span class="o">=</span> <span class="o">.</span><span class="n">top</span>
    <span class="c1">// Auto-layout will automatically resize the bannerView based on the set constraints.</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">willAppear</span><span class="p">(</span><span class="nv">bannerView</span><span class="p">:</span> <span class="kt">BannerAdView</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Manual layout</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">bannerView</span><span class="o">.</span><span class="n">size</span><span class="p">?</span><span class="o">.</span><span class="n">size</span> <span class="p">??</span> <span class="o">.</span><span class="n">zero</span>
<span class="c1">// The alignment of the ad can be changed if the frame of the bannerView is larger than the ad.</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">horizontalAlignment</span> <span class="o">=</span> <span class="o">.</span><span class="n">left</span>
<span class="n">bannerView</span><span class="o">.</span><span class="n">verticalAlignment</span> <span class="o">=</span> <span class="o">.</span><span class="n">top</span>
    <span class="c1">// Auto-layout will automatically resize the bannerView based on the set constraints.</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



### Fixed Banner Ads

The fixed banner APIs have been deprecated and removed. To create and load fixed banners in the 5.X series, use the new banner APIs with a fixed size.

<ul class="tab" data-tab="24ea2902-f77a-4152-ab2e-fd2974341f1b" data-name="iOSmigration4x5xFixedBanner">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="24ea2902-f77a-4152-ab2e-fd2974341f1b" data-name="iOSmigration4x5xFixedBanner">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Create the banner ad instance with the desired fixed size</span>
<span class="c1">// Fixed 320x50 standard banner</span>
<span class="k">let</span> <span class="nv">bannerAd</span> <span class="o">=</span> <span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">bannerProvider</span><span class="p">(</span>
    <span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">,</span>
    <span class="nv">andPlacementName</span><span class="p">:</span> <span class="s">"YOUR_MEDIATION_PLACEMENT"</span><span class="p">,</span>
    <span class="nv">andSize</span><span class="p">:</span> <span class="o">.</span><span class="n">standard</span>
<span class="p">)</span>
<span class="c1">// Fixed 300x250 medium rectangle banner</span>
<span class="c1">// let bannerAd = Helium.shared().bannerProvider(</span>
<span class="c1">//     with: self,</span>
<span class="c1">//     andPlacementName: "YOUR_MEDIATION_PLACEMENT",</span>
<span class="c1">//     andSize: .medium</span>
<span class="c1">// )</span>
<span class="c1">// Fixed 728x90 leaderboard banner</span>
<span class="c1">// let bannerAd = Helium.shared().bannerProvider(</span>
<span class="c1">//     with: self,</span>
<span class="c1">//     andPlacementName: "YOUR_MEDIATION_PLACEMENT",</span>
<span class="c1">//     andSize: .leaderboard</span>
<span class="c1">// )</span>

<span class="c1">// Load the ad</span>
<span class="n">bannerAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">)</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Create the banner ad instance</span>
<span class="k">let</span> <span class="nv">bannerAd</span> <span class="o">=</span> <span class="kt">BannerAdView</span><span class="p">()</span>


<span class="c1">// Create the load request with the desired fixed size</span>
<span class="c1">// Fixed 320x50 standard banner</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">BannerAdLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_MEDIATION_PLACEMENT"</span><span class="p">,</span>
    <span class="nv">size</span><span class="p">:</span> <span class="o">.</span><span class="n">standard</span>
<span class="p">)</span>
<span class="c1">// Fixed 300x250 medium rectangle banner</span>
<span class="c1">// let request = BannerAdLoadRequest(</span>
<span class="c1">//     placement: "YOUR_MEDIATION_PLACEMENT",</span>
<span class="c1">//     size: .medium</span>
<span class="c1">// )</span>
<span class="c1">// Fixed 728x90 leaderboard banner</span>
<span class="c1">// let request = BannerAdLoadRequest(</span>
<span class="c1">//     placement: "YOUR_MEDIATION_PLACEMENT",</span>
<span class="c1">//     size: .leaderboard</span>
<span class="c1">// )</span>

<span class="c1">// Load the ad with the request</span>
<span class="n">bannerAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">,</span> <span class="nv">viewController</span><span class="p">:</span> <span class="k">self</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</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.

<ul class="tab" data-tab="ca72e296-0682-442c-8296-32e588ee4afc" data-name="iOSmigration4x5xFullscreen">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="ca72e296-0682-442c-8296-32e588ee4afc" data-name="iOSmigration4x5xFullscreen">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Interstitial Ads</span>

<span class="c1">// Create the load request</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">ChartboostMediationAdLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_INTERSTITIAL_MEDIATION_PLACEMENT"</span>
<span class="p">)</span>

<span class="c1">// Load the ad with the request</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">loadFullscreenAd</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="c1">// Rewarded Ads</span>

<span class="c1">// Create the load request</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">ChartboostMediationAdLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_REWARDED_MEDIATION_PLACEMENT"</span>
<span class="p">)</span>

<span class="c1">// Load the ad with the request</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">loadFullscreenAd</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Success</span>
    <span class="p">}</span>
<span class="p">}</span>

</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">import</span> <span class="kt">ChartboostMediationSDK</span>

<span class="c1">// Fullscreen Ads</span>

<span class="c1">// Create the load request</span>
<span class="k">let</span> <span class="nv">request</span> <span class="o">=</span> <span class="kt">FullscreenAdLoadRequest</span><span class="p">(</span>
    <span class="nv">placement</span><span class="p">:</span> <span class="s">"YOUR_FULLSCREEN_MEDIATION_PLACEMENT"</span>
<span class="p">)</span>

<span class="c1">// Load the ad with the request</span>
<span class="kt">FullscreenAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="n">request</span><span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
        <span class="c1">// Handle error</span>
    <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="k">let</span> <span class="nv">ad</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">ad</span> <span class="p">{</span>
        <span class="c1">// Success</span>
       <span class="n">ad</span><span class="o">.</span><span class="n">customData</span> <span class="o">=</span> <span class="s">"Y3VzdG9tIGRhdGE="</span> <span class="c1">// base 64 encoded string for rewarded fullscreen ads</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Handle no ad error</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



### Clearing Loaded Ads

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

<ul class="tab" data-tab="d9e81df6-712a-4375-a139-64fc6bb7b42f" data-name="iOSmigration4x5xClearingLoadedAds">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="d9e81df6-712a-4375-a139-64fc6bb7b42f" data-name="iOSmigration4x5xClearingLoadedAds">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Clearing Interstitial and Rewarded Ads</span>
<span class="n">interstitialAd</span><span class="p">?</span><span class="o">.</span><span class="nf">clearLoadedAd</span><span class="p">()</span>
<span class="n">rewardedAd</span><span class="p">?</span><span class="o">.</span><span class="nf">clearLoadedAd</span><span class="p">()</span>

<span class="c1">// Clearing Banner Ads</span>
<span class="n">bannerAd</span><span class="p">?</span><span class="o">.</span><span class="nf">clear</span><span class="p">()</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">fullscreenAd</span><span class="o">.</span><span class="nf">invalidate</span><span class="p">()</span>
<span class="n">bannerAd</span><span class="o">.</span><span class="nf">reset</span><span class="p">()</span>
</code></pre></div></div>
</li>
  
</ul>




## Winning Bid Information

The keys used to retrieve information from the dictionary have been normalized to use underscores instead of hyphens.

| Mediation 4.X | Mediation 5.X |
|---------------|---------------|
| `auction-id` | `auction_id` |
| `partner-id` | `partner_id` |
| `price` | `price` |
| `line_item_id` | `line_item_id` |
| `line_item_name` | `line_item_name` |

## Configure Mediation

### Test Mode

The changes to test mode revolved around naming convention parity.

<ul class="tab" data-tab="ba6c230a-0453-4449-90b1-fbbdeafd0ae7" data-name="iOSMigration4x5xTestMode">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="ba6c230a-0453-4449-90b1-fbbdeafd0ae7" data-name="iOSMigration4x5xTestMode">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">Add</span> <span class="n">the</span> <span class="n">environment</span> <span class="n">variable</span> <span class="p">`</span><span class="nv">HELIUM_TEST_MODE</span><span class="p">`</span> <span class="k">in</span> <span class="n">your</span> <span class="n">app</span><span class="err">’</span><span class="n">s</span> <span class="n">scheme</span> <span class="n">and</span> <span class="k">set</span> <span class="n">it</span> <span class="n">to</span> <span class="p">`</span><span class="nv">on</span><span class="p">`</span> <span class="n">or</span> <span class="p">`</span><span class="nv">off</span><span class="p">`</span><span class="o">.</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// For swift, set to true or false</span>
<span class="kt">ChartboostMediation</span><span class="o">.</span><span class="n">isTestModeEnabled</span> <span class="o">=</span> <span class="kc">true</span>

<span class="c1">// For Objective-C, set to 'TRUE'/'FALSE' or 'YES'/'NO'</span>
<span class="kt">ChartboostMediation</span><span class="o">.</span><span class="n">isTestModeEnabled</span> <span class="o">=</span> <span class="kt">TRUE</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="1ef27647-2491-4600-b6dd-275740388e53" data-name="iOSMigration4x5xPrivacyMethods">
  
      <li class="active">
          <a href="#">Mediation 4.X (Swift & Objective-C) </a>
      </li>
  
</ul>
<ul class="tab-content" id="1ef27647-2491-4600-b6dd-275740388e53" data-name="iOSMigration4x5xPrivacyMethods">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// COPPA</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setSubjectToCoppa</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setSubjectToCoppa</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span>

<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setSubjectToCoppa</span><span class="p">:</span><span class="kt">YES</span><span class="p">];</span>
<span class="c1">// or</span>
<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setSubjectToCoppa</span><span class="p">:</span><span class="kt">NO</span><span class="p">];</span>

<span class="c1">//- By sending `setSubjectToCoppa(true)`/`setSubjectToCoppa (YES)` 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)`/`setSubjectToCoppa (NO)`, 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="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setSubjectToGDPR</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setSubjectToGDPR</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span>

<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setSubjectToGDPR</span><span class="p">:</span><span class="kt">YES</span><span class="p">];</span>
<span class="c1">// or</span>
<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setSubjectToGDPR</span><span class="p">:</span><span class="kt">NO</span><span class="p">];</span>

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

<span class="c1">// User Given Consent</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setUserHasGivenConsent</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setUserHasGivenConsent</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span>

<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setUserHasGivenConsent</span><span class="p">:</span><span class="kt">YES</span><span class="p">];</span>
<span class="c1">// or</span>
<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setUserHasGivenConsent</span><span class="p">:</span><span class="kt">NO</span><span class="p">];</span>

<span class="c1">//- By sending `setUserHasGivenConsent(true)`/`setUserHasGivenConsent (YES)`, 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)`/`setUserHasGivenConsent (NO)`, 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="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setCCPAConsent</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">setCCPAConsent</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span>

<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setCCPAConsent</span><span class="p">:</span><span class="kt">YES</span><span class="p">];</span>
<span class="c1">// or</span>
<span class="p">[[</span><span class="kt">Helium</span> <span class="n">sharedHelium</span><span class="p">]</span> <span class="nv">setCCPAConsent</span><span class="p">:</span><span class="kt">NO</span><span class="p">];</span>

<span class="c1">//- By sending `setCCPAConsent(true)`/`setCCPAConsent (YES)`, 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)`/`setCCPAConsent (NO)`, 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>



### Keywords

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

<ul class="tab" data-tab="16225b1e-871e-449a-a570-e08ecef3be46" data-name="iOSMigration4x5xSettingUserIdentifier">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="16225b1e-871e-449a-a570-e08ecef3be46" data-name="iOSMigration4x5xSettingUserIdentifier">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">let</span> <span class="nv">interstitial</span> <span class="o">=</span> <span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">interstitialAdProvider</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">,</span> <span class="nv">andPlacementName</span><span class="p">:</span> <span class="s">"placement"</span><span class="p">)</span>
<span class="k">let</span> <span class="nv">rewarded</span> <span class="o">=</span> <span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">rewardedAdProvider</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">,</span> <span class="nv">andPlacementName</span><span class="p">:</span> <span class="s">"placement"</span><span class="p">)</span>
<span class="k">let</span> <span class="nv">banner</span> <span class="o">=</span> <span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">bannerProvider</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">,</span> <span class="nv">andPlacementName</span><span class="p">:</span> <span class="s">"placement"</span><span class="p">,</span> <span class="nv">andSize</span><span class="p">:</span> <span class="o">.</span><span class="n">standard</span><span class="p">)</span>

<span class="c1">// Setting Keyword</span>
<span class="c1">// (The set method returns a boolean whether or not if the keyword has been successfully set)</span>
<span class="k">let</span> <span class="nv">success</span> <span class="o">=</span> <span class="n">interstitial</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">set</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span> <span class="s">"i12_keyword1"</span><span class="p">,</span> <span class="nv">value</span><span class="p">:</span> <span class="s">"i12_value1"</span><span class="p">)</span> <span class="p">??</span> <span class="kc">false</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">success</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Failed to set keyword</span>
<span class="p">}</span>
<span class="k">let</span> <span class="nv">success</span> <span class="o">=</span> <span class="n">rewarded</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">set</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span> <span class="s">"rwd_keyword1"</span><span class="p">,</span> <span class="nv">value</span><span class="p">:</span> <span class="s">"rwd_value1"</span><span class="p">)</span> <span class="p">??</span> <span class="kc">false</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">success</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Failed to set keyword</span>
<span class="p">}</span>
<span class="k">let</span> <span class="nv">success</span> <span class="o">=</span> <span class="n">banner</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">set</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span> <span class="s">"bnr_keyword1"</span><span class="p">,</span> <span class="nv">value</span><span class="p">:</span> <span class="s">"bnr_value1"</span><span class="p">)</span> <span class="p">??</span> <span class="kc">false</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">success</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Failed to set keyword</span>
<span class="p">}</span>

<span class="c1">// Remove Custom Keyword (The remove method returns the value of the key removed)</span>
<span class="k">let</span> <span class="nv">removedi12KeywordValue</span> <span class="o">=</span> <span class="n">interstitial</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">remove</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span><span class="s">"i12_keyword1"</span><span class="p">);</span>
<span class="k">let</span> <span class="nv">removedRewardedKeywordValue</span> <span class="o">=</span> <span class="n">interstitial</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">remove</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span> <span class="s">"rwd_keyword1"</span><span class="p">);</span>
<span class="k">let</span> <span class="nv">removedBannerKeywordValue</span> <span class="o">=</span> <span class="n">interstitial</span><span class="p">?</span><span class="o">.</span><span class="n">keywords</span><span class="p">?</span><span class="o">.</span><span class="nf">remove</span><span class="p">(</span><span class="nv">keyword</span><span class="p">:</span> <span class="s">"bnr_keyword1"</span><span class="p">);</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Set Keywords</span>
<span class="c1">// Banner Ads</span>
<span class="k">let</span> <span class="nv">banner</span> <span class="o">=</span> <span class="kt">BannerAdView</span><span class="p">()</span>
<span class="n">banner</span><span class="o">.</span><span class="n">keywords</span> <span class="o">=</span> <span class="p">[</span><span class="s">"keyword1"</span><span class="p">:</span> <span class="s">"value1"</span><span class="p">]</span>

<span class="c1">// Fullscreen Ads</span>
<span class="kt">FullscreenAd</span><span class="o">.</span><span class="nf">load</span><span class="p">(</span>
    <span class="nv">with</span><span class="p">:</span> <span class="o">.</span><span class="nf">init</span><span class="p">(</span>
        <span class="nv">placement</span><span class="p">:</span> <span class="s">"placement"</span><span class="p">,</span>
        <span class="nv">keywords</span><span class="p">:</span> <span class="p">[</span><span class="s">"keyword1"</span><span class="p">:</span> <span class="s">"value1"</span><span class="p">],</span> <span class="c1">// set the whole dictionary</span>
        <span class="nv">partnerSettings</span><span class="p">:</span> <span class="kc">nil</span>
    <span class="p">)</span>
<span class="p">)</span> <span class="p">{</span> <span class="n">result</span> <span class="k">in</span>
    <span class="c1">// handle result</span>
<span class="p">}</span>

<span class="c1">// Remove Keywords</span>
<span class="k">let</span> <span class="nv">banner</span> <span class="o">=</span> <span class="kt">BannerAdView</span><span class="p">()</span>
<span class="n">banner</span><span class="o">.</span><span class="n">keywords</span> <span class="o">=</span> <span class="kc">nil</span> <span class="c1">// remove the whole dictionary</span>
</code></pre></div></div>
</li>
  
</ul>


### Setting User Identifier

The user identifier property is now configured with the [Chartboost Core SDK](/en/mediation/integrate/core/ios/).

<ul class="tab" data-tab="1e5ef96c-eb33-4035-a690-eaa2fbb08d9a" data-name="iOSMigration4x5xSettingUserIdentifier">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="1e5ef96c-eb33-4035-a690-eaa2fbb08d9a" data-name="iOSMigration4x5xSettingUserIdentifier">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="n">userIdentifier</span> <span class="o">=</span> <span class="s">"user"</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">ChartboostCore</span><span class="o">.</span><span class="n">publisherMetadata</span><span class="o">.</span><span class="nf">setPlayerID</span><span class="p">(</span><span class="s">"player_id"</span><span class="p">)</span>
</code></pre></div></div>
</li>
  
</ul>



### Setting Custom Data

`HeliumRewardedAd` no longer exists in 5.X and is replaced with `FullscreenAd` to align with the banner ads APIs.

<ul class="tab" data-tab="6fb7f050-b5ec-4e73-b44b-be9ce3bae028" data-name="iOSMigration4x5xSettingCustomData">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="6fb7f050-b5ec-4e73-b44b-be9ce3bae028" data-name="iOSMigration4x5xSettingCustomData">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">let</span> <span class="nv">rewardedAd</span> <span class="o">=</span> <span class="kt">Helium</span><span class="o">.</span><span class="nf">shared</span><span class="p">()</span><span class="o">.</span><span class="nf">rewardedAdProvider</span><span class="p">(</span><span class="nv">with</span><span class="p">:</span> <span class="k">self</span><span class="p">,</span> <span class="nv">andPlacementName</span><span class="p">:</span> <span class="s">"placement"</span><span class="p">)</span>
<span class="c1">// load ad</span>
<span class="k">let</span> <span class="nv">customData</span> <span class="o">=</span> <span class="s">"custom data"</span><span class="o">.</span><span class="nf">data</span><span class="p">(</span><span class="nv">using</span><span class="p">:</span> <span class="o">.</span><span class="n">utf8</span><span class="p">)</span>
<span class="k">let</span> <span class="nv">base64CustomData</span> <span class="o">=</span> <span class="n">customData</span><span class="p">?</span><span class="o">.</span><span class="nf">base64EncodedString</span><span class="p">()</span>
<span class="n">rewardedAd</span><span class="p">?</span><span class="o">.</span><span class="n">customData</span> <span class="o">=</span> <span class="n">base64CustomData</span>
<span class="c1">// show ad</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">let</span> <span class="nv">fullscreenAd</span><span class="p">:</span> <span class="kt">FullscreenAd</span> <span class="o">=</span> <span class="o">...</span> <span class="c1">// obtain the ad with a load request</span>
<span class="n">fullscreenAd</span><span class="o">.</span><span class="n">customData</span> <span class="o">=</span> <span class="s">"Y3VzdG9tIGRhdGE="</span> <span class="c1">// base 64 encoded string</span>
</code></pre></div></div>
</li>
  
</ul>



### Implementation

The changes to implementation revolved around naming convention parity.

<ul class="tab" data-tab="7104f0cf-7008-43d8-9426-9679c824333c" data-name="iOSMigration4x5xSettingImplementation">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="7104f0cf-7008-43d8-9426-9679c824333c" data-name="iOSMigration4x5xSettingImplementation">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">HeliumImpressionData</span><span class="p">:</span> <span class="kt">NSObject</span> <span class="p">{</span>
  <span class="c1">// The placement associated with Impression Level Revenue Data.</span>
  <span class="k">let</span> <span class="nv">placement</span><span class="p">:</span> <span class="kt">String</span>

  <span class="c1">// The Impression Level Revenue Data JSON.</span>
  <span class="k">let</span> <span class="nv">jsonData</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">Any</span><span class="p">]</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">ImpressionData</span><span class="p">:</span> <span class="kt">NSObject</span> <span class="p">{</span>
  <span class="c1">// The placement associated with Impression Level Revenue Data.</span>
  <span class="k">let</span> <span class="nv">placement</span><span class="p">:</span> <span class="kt">String</span>

  <span class="c1">// The Impression Level Revenue Data JSON.</span>
  <span class="k">let</span> <span class="nv">jsonData</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">Any</span><span class="p">]</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>


Usage Example

<ul class="tab" data-tab="cc44912b-e4ab-413c-8233-17a9db282d35" data-name="iOSMigration4x5xSettingImplementationExample">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="cc44912b-e4ab-413c-8233-17a9db282d35" data-name="iOSMigration4x5xSettingImplementationExample">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">NotificationCenter</span><span class="o">.</span><span class="k">default</span><span class="o">.</span><span class="nf">addObserver</span><span class="p">(</span>
    <span class="k">self</span><span class="p">,</span>
    <span class="nv">selector</span><span class="p">:</span> <span class="kd">#selector(</span><span class="nf">didReceiveILRDNotification</span><span class="kd">)</span><span class="p">,</span>
    <span class="nv">name</span><span class="p">:</span> <span class="o">.</span><span class="n">heliumDidReceiveILRD</span><span class="p">,</span>
    <span class="nv">object</span><span class="p">:</span> <span class="kc">nil</span>
<span class="p">)</span>

<span class="kd">@objc</span> <span class="kd">func</span> <span class="nf">didReceiveILRDNotification</span><span class="p">(</span><span class="nv">notification</span><span class="p">:</span> <span class="kt">Notification</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Extract the ILRD payload.</span>
    <span class="k">guard</span> <span class="k">let</span> <span class="nv">ilrd</span> <span class="o">=</span> <span class="n">notification</span><span class="o">.</span><span class="n">object</span> <span class="k">as?</span> <span class="kt">HeliumImpressionData</span> <span class="k">else</span> <span class="p">{</span>
        <span class="k">return</span>
    <span class="p">}</span>

    <span class="c1">// Placement name</span>
    <span class="k">let</span> <span class="nv">placement</span> <span class="o">=</span> <span class="n">ilrd</span><span class="o">.</span><span class="n">placement</span>

    <span class="c1">// JSON</span>
    <span class="k">let</span> <span class="nv">json</span> <span class="o">=</span> <span class="n">ilrd</span><span class="o">.</span><span class="n">jsonData</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">NotificationCenter</span><span class="o">.</span><span class="k">default</span><span class="o">.</span><span class="nf">addObserver</span><span class="p">(</span>
    <span class="k">self</span><span class="p">,</span>
    <span class="nv">selector</span><span class="p">:</span> <span class="kd">#selector(</span><span class="nf">didReceiveILRDNotification</span><span class="kd">)</span><span class="p">,</span>
    <span class="nv">name</span><span class="p">:</span> <span class="o">.</span><span class="n">chartboostMediationDidReceiveILRD</span><span class="p">,</span>
    <span class="nv">object</span><span class="p">:</span> <span class="kc">nil</span>
<span class="p">)</span>

<span class="kd">@objc</span> <span class="kd">func</span> <span class="nf">didReceiveILRDNotification</span><span class="p">(</span><span class="nv">notification</span><span class="p">:</span> <span class="kt">Notification</span><span class="p">)</span> <span class="p">{</span>
    <span class="c1">// Extract the ILRD payload.</span>
    <span class="k">guard</span> <span class="k">let</span> <span class="nv">ilrd</span> <span class="o">=</span> <span class="n">notification</span><span class="o">.</span><span class="n">object</span> <span class="k">as?</span> <span class="kt">ImpressionData</span> <span class="k">else</span> <span class="p">{</span>
        <span class="k">return</span>
    <span class="p">}</span>

    <span class="c1">// Placement name</span>
    <span class="k">let</span> <span class="nv">placement</span> <span class="o">=</span> <span class="n">ilrd</span><span class="o">.</span><span class="n">placement</span>

    <span class="c1">// JSON</span>
    <span class="k">let</span> <span class="nv">json</span> <span class="o">=</span> <span class="n">ilrd</span><span class="o">.</span><span class="n">jsonData</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



## Delegate Usage

### Mediation Start / Module Observer

Initialization of the Mediation SDK is now done by the [Chartboost Core SDK](/en/mediation/integrate/core/ios/). To receive initialization callbacks, utilize the module observer.

<ul class="tab" data-tab="b5b64d84-d333-4c83-a3b7-d4e8bdcbc2d1" data-name="iOSMigration4x5xModuleObserver">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="b5b64d84-d333-4c83-a3b7-d4e8bdcbc2d1" data-name="iOSMigration4x5xModuleObserver">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">AppDelegate</span><span class="p">:</span> <span class="kt">HeliumSdkDelegate</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">heliumDidStartWithError</span><span class="p">(</span><span class="n">_</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Chartboost Mediation did not start due to error: </span><span class="se">\(</span><span class="n">error</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Chartboost Mediation Started Successfully"</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-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">ChartboostMediationController</span><span class="p">:</span> <span class="kt">ModuleObserver</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">onModuleInitializationCompleted</span><span class="p">(</span><span class="n">_</span> <span class="nv">result</span><span class="p">:</span> <span class="kt">ModuleInitializationResult</span><span class="p">)</span> <span class="p">{</span>
        <span class="c1">// Chartboost Mediation SDK initialization result is represented by the initialization result of</span>
        <span class="c1">// an internal module with module ID `ChartboostMediation.coreModuleID`.</span>
        <span class="k">let</span> <span class="nv">moduleName</span> <span class="o">=</span> <span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">moduleID</span> <span class="o">==</span> <span class="kt">ChartboostMediation</span><span class="o">.</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="se">\(</span><span class="n">result</span><span class="o">.</span><span class="n">moduleID</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>

        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"[Error] </span><span class="se">\(</span><span class="n">moduleName</span><span class="se">)</span><span class="s"> initialization failed: </span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
            <span class="n">initializationResult</span> <span class="o">=</span> <span class="o">.</span><span class="nf">failure</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
            <span class="nf">completionHandler</span><span class="p">?(</span><span class="o">.</span><span class="nf">failure</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"[Success] </span><span class="se">\(</span><span class="n">moduleName</span><span class="se">)</span><span class="s"> initialization succeeded"</span><span class="p">)</span>
            <span class="n">initializationResult</span> <span class="o">=</span> <span class="o">.</span><span class="nf">success</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span>
            <span class="nf">completionHandler</span><span class="p">?(</span><span class="o">.</span><span class="nf">success</span><span class="p">(</span><span class="kc">true</span><span class="p">))</span>
        <span class="p">}</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>


### Interstitial Ad Delegate

<ul class="tab" data-tab="9412f2f5-f6a3-4cc0-a630-67f22ec9e4cd" data-name="iOSMigration4x5xInterstitialAdDelegate">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="9412f2f5-f6a3-4cc0-a630-67f22ec9e4cd" data-name="iOSMigration4x5xInterstitialAdDelegate">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">ViewController</span><span class="p">:</span> <span class="kt">CHBHeliumInterstitialAdDelegate</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">heliumInterstitialAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">requestIdentifier</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">winningBidInfo</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">Any</span><span class="p">]?,</span>
        <span class="n">didLoadWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to load with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didLoad"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumInterstitialAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="n">didShowWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to show with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didShow"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumInterstitialAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="n">didCloseWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to close with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Interstitial with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didClose"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumInterstitialAdDidRecordImpression</span><span class="p">(</span><span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"Impression recorded"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">FullscreenAdController</span><span class="p">:</span> <span class="kt">FullscreenAdDelegate</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">didRecordImpression</span><span class="p">(</span><span class="nv">ad</span><span class="p">:</span> <span class="kt">FullscreenAd</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">log</span><span class="p">(</span><span class="nv">action</span><span class="p">:</span> <span class="s">"record impression"</span><span class="p">,</span> <span class="nv">placementName</span><span class="p">:</span> <span class="n">placementName</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kc">nil</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">didClick</span><span class="p">(</span><span class="nv">ad</span><span class="p">:</span> <span class="kt">FullscreenAd</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">log</span><span class="p">(</span><span class="nv">action</span><span class="p">:</span> <span class="s">"click"</span><span class="p">,</span> <span class="nv">placementName</span><span class="p">:</span> <span class="n">placementName</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kc">nil</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">didReward</span><span class="p">(</span><span class="nv">ad</span><span class="p">:</span> <span class="kt">FullscreenAd</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">log</span><span class="p">(</span><span class="nv">action</span><span class="p">:</span> <span class="s">"get reward"</span><span class="p">,</span> <span class="nv">placementName</span><span class="p">:</span> <span class="n">placementName</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kc">nil</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">didClose</span><span class="p">(</span><span class="nv">ad</span><span class="p">:</span> <span class="kt">FullscreenAd</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationError</span><span class="p">?)</span> <span class="p">{</span>
        <span class="nf">log</span><span class="p">(</span><span class="nv">action</span><span class="p">:</span> <span class="s">"close"</span><span class="p">,</span> <span class="nv">placementName</span><span class="p">:</span> <span class="n">placementName</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="n">error</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">didExpire</span><span class="p">(</span><span class="nv">ad</span><span class="p">:</span> <span class="kt">FullscreenAd</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">log</span><span class="p">(</span><span class="nv">action</span><span class="p">:</span> <span class="s">"expire"</span><span class="p">,</span> <span class="nv">placementName</span><span class="p">:</span> <span class="n">placementName</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kc">nil</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>


### Banner Ad Delegate

<ul class="tab" data-tab="ce9e7bdd-2356-45aa-9090-654dc473eebd" data-name="iOSMigration4x5xBannerAdDelegate">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
      <li>
          <a href="#">Mediation 5.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="ce9e7bdd-2356-45aa-9090-654dc473eebd" data-name="iOSMigration4x5xBannerAdDelegate">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">ViewController</span><span class="p">:</span> <span class="kt">HeliumBannerAdDelegate</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">heliumBannerAd</span><span class="p">(</span>
        <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">requestIdentifier</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">winningBidInfo</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">Any</span><span class="p">]?,</span>
        <span class="n">didLoadWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Banner with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to load with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Banner with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didLoad"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumBannerAd</span><span class="p">(</span>
        <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="n">didClickWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Banner with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didClick with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Banner with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didClick"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumBannerAdDidRecordImpression</span><span class="p">(</span><span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"Impression recorded"</span><span class="p">)</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">extension</span> <span class="kt">BannerAdController</span><span class="p">:</span> <span class="kt">BannerAdViewDelegate</span> <span class="p">{</span>
    <span class="kd">func</span> <span class="nf">willAppear</span><span class="p">(</span><span class="nv">bannerView</span><span class="p">:</span> <span class="kt">BannerAdView</span><span class="p">)</span> <span class="p">{</span>
        <span class="c1">// Called when a new ad is about to appear inside of `bannerView`. This method can be used</span>
        <span class="c1">// to manually size `bannerView` if desired:</span>
        <span class="c1">// if let size = bannerView.size?.size {</span>
        <span class="c1">//     bannerView.frame.size = size</span>
        <span class="c1">// }</span>
        <span class="c1">// This method can also be used to check other updated properties of `bannerView`.</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>


### Rewarded Ad Delegates

Rewarded ad delegates are no longer available for 5.X.

<ul class="tab" data-tab="778cc3b0-5efe-4c27-a997-55033f5dab18" data-name="iOSMigration4x5xRewardedAdDelegate">
  
      <li class="active">
          <a href="#">Mediation 4.X </a>
      </li>
  
</ul>
<ul class="tab-content" id="778cc3b0-5efe-4c27-a997-55033f5dab18" data-name="iOSMigration4x5xRewardedAdDelegate">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Implement the `CHBHeliumRewardedAdDelegate` protocol to receive notifications about rewarded ads loading, displaying, and closing.</span>

<span class="kd">@interface</span> <span class="kt">ViewController</span> <span class="p">()</span> <span class="o">&lt;</span><span class="kt">CHBHeliumRewardedAdDelegate</span><span class="o">&gt;</span>

<span class="c1">// This will allow you to implement the following methods:</span>
<span class="kd">func</span> <span class="nf">heliumRewardedAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">requestIdentifier</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="nv">winningBidInfo</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">Any</span><span class="p">]?,</span>
        <span class="n">didLoadWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to load with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didLoad"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumRewardedAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="n">didShowWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to show with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didShow"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumRewardedAd</span><span class="p">(</span>
        <span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span>
        <span class="n">didCloseWithError</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">ChartboostMediationSDK</span><span class="o">.</span><span class="kt">ChartboostMediationError</span><span class="p">?</span>
    <span class="p">)</span> <span class="p">{</span>
        <span class="k">if</span> <span class="k">let</span> <span class="nv">error</span> <span class="o">=</span> <span class="n">error</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> failed to close with error:</span><span class="se">\(</span><span class="n">error</span><span class="o">.</span><span class="n">localizedDescription</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="nf">print</span><span class="p">(</span><span class="s">"Rewarded with Placement Name:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s"> didClose"</span><span class="p">)</span>
        <span class="p">}</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumRewardedAdDidGetReward</span><span class="p">(</span><span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"Got Reward for RV with placementName:</span><span class="se">\(</span><span class="n">placementName</span><span class="se">)</span><span class="s">"</span><span class="p">)</span>
    <span class="p">}</span>

    <span class="kd">func</span> <span class="nf">heliumRewardedAdDidRecordImpression</span><span class="p">(</span><span class="n">withPlacementName</span> <span class="nv">placementName</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="p">{</span>
        <span class="nf">print</span><span class="p">(</span><span class="s">"Impression recorded"</span><span class="p">)</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.