# Banners

## Creating A Banner Ad

To create a banner, use the initializer `initWithSize:location:delegate:`  and provide a size, Chartboost location, and an optional delegate. A banner ad has a `CHBBannerSize` which corresponds to the view's `intrinsicContentSize`.

There are currently 3 banner sizes:

| Name        | Field                      | Size      |
| :---------- | :------------------------- | :-------- |
| Standard    | `CHBBannerSizeStandard`    | 320 x 50  |
| Medium      | `CHBBannerSizeMedium`      | 300 x 250 |
| Leaderboard | `CHBBannerSizeLeaderboard` | 728 x 90  |

**Automatic Sizing:** If `AutoLayout` is being used, give the banner an X and Y position constraint and it will be automatically sized. 

**Manual Sizing:** Assign frame sizes manually and make sure the banner frame size is equal to its `CHBBannerSize` property.

Example:

<ul class="tab" data-tab="cfa1979e-bad8-4689-95ee-4739acd7d77e" data-name="CHBBannerSize">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="cfa1979e-bad8-4689-95ee-4739acd7d77e" data-name="CHBBannerSize">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">createBanner</span><span class="p">()</span> <span class="p">{</span>
  <span class="n">banner</span> <span class="o">=</span> <span class="kt">CHBBanner</span><span class="p">(</span><span class="nv">size</span><span class="p">:</span> <span class="kt">CHBBannerSizeStandard</span><span class="p">,</span> <span class="nv">location</span><span class="p">:</span> <span class="s">"MainMenu"</span><span class="p">,</span> <span class="nv">delegate</span><span class="p">:</span> <span class="k">self</span><span class="p">)</span>
  <span class="n">banner</span><span class="o">.</span><span class="n">translatesAutoresizingMaskIntoConstraints</span> <span class="o">=</span> <span class="kc">false</span>
  <span class="k">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="nf">addSubview</span><span class="p">(</span><span class="n">banner</span><span class="p">)</span>
  <span class="kt">NSLayoutConstraint</span><span class="o">.</span><span class="nf">activate</span><span class="p">([</span>
      <span class="n">banner</span><span class="o">.</span><span class="n">bottomAnchor</span><span class="o">.</span><span class="nf">constraint</span><span class="p">(</span><span class="nv">equalTo</span><span class="p">:</span> <span class="k">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">safeAreaLayoutGuide</span><span class="o">.</span><span class="n">bottomAnchor</span><span class="p">),</span>
      <span class="n">banner</span><span class="o">.</span><span class="n">centerXAnchor</span><span class="o">.</span><span class="nf">constraint</span><span class="p">(</span><span class="nv">equalTo</span><span class="p">:</span> <span class="k">self</span><span class="o">.</span><span class="n">view</span><span class="o">.</span><span class="n">centerXAnchor</span><span class="p">)</span>
  <span class="p">])</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">createBanner</span> <span class="p">{</span>
   <span class="n">CHBBanner</span> <span class="o">*</span><span class="n">banner</span> <span class="o">=</span> <span class="p">[[</span><span class="n">CHBBanner</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithSize</span><span class="p">:</span><span class="n">CHBBannerSizeStandard</span> <span class="nf">location</span><span class="p">:</span><span class="s">@"MainMenu"</span> <span class="n">delegate</span><span class="o">:</span><span class="n">self</span><span class="p">];</span>
   <span class="n">banner</span><span class="p">.</span><span class="n">translatesAutoresizingMaskIntoConstraints</span> <span class="o">=</span> <span class="nb">NO</span><span class="p">;</span>
   <span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">view</span> <span class="nf">addSubview</span><span class="p">:</span><span class="n">banner</span><span class="p">];</span>
   <span class="p">[</span><span class="n">NSLayoutConstraint</span> <span class="nf">activateConstraints</span><span class="p">:@[[</span><span class="n">banner</span><span class="p">.</span><span class="n">bottomAnchor</span> <span class="nf">constraintEqualToAnchor</span><span class="p">:</span><span class="n">self</span><span class="p">.</span><span class="n">view</span><span class="p">.</span><span class="n">safeAreaLayoutGuide</span><span class="p">.</span><span class="n">bottomAnchor</span><span class="p">],</span>
                                            <span class="p">[</span><span class="n">banner</span><span class="p">.</span><span class="n">centerXAnchor</span> <span class="nf">constraintEqualToAnchor</span><span class="p">:</span><span class="n">self</span><span class="p">.</span><span class="n">view</span><span class="p">.</span><span class="n">centerXAnchor</span><span class="p">]]];</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



- We do not serve banner ads to apps that are opted-out of [behavioral targeting](/en/faq/coppa/).
- You do not need to create a **Banner Publishing Campaign** on the Chartboost Dashboard. The banner ads are delivered through our **Exchange**. You only need to call on them via the SDK.
- Your **banner analytics** are available in the **App Analytics** section of your Chartboost Dashboard.
- Multiple banners can be displayed at once if desired.



## Showing Banner Ads

After creating your banner ad, show it by calling this method:

<ul class="tab" data-tab="cbd84e83-81b9-480e-8a9f-458eb63c75a0" data-name="showBanner">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="cbd84e83-81b9-480e-8a9f-458eb63c75a0" data-name="showBanner">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">banner</span><span class="o">.</span><span class="nf">show</span><span class="p">(</span><span class="nv">from</span><span class="p">:</span><span class="k">self</span><span class="p">)</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">[</span><span class="n">banner</span> <span class="nf">showFromViewController</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
</code></pre></div></div>
</li>
  
</ul>




## Banner Delegates Methods

Every banner has an optional delegate which can be provided when initialized or assigned afterward. Get notified and respond to events related to the banner life-cycle by implementing delegate methods:

### `didCacheAd`

`(void)didCacheAd:(CHBCacheEvent _)event error:(nullable CHBCacheError _)error`

- **Description:** Called after a cache call if 
  - an ad has been loaded from the Chartboost servers and cached.
  - an ad has failed to be loaded from the Chartboost servers.
- **Parameter Event:** A cache event with info related to the cached ad. 
- **Parameter Error:** An error specifying the failure reason, or `nil` if the operation was successful.
- ** Discussion:** Get notified of when an ad is ready to be shown after the cache method has been called. 



### `willShowAd`

`- (void)willShowAd:(CHBShowEvent \*)event;`

- **Description:** Called after a `showFromViewController:` call, right before an ad is presented.
- **Parameter Event:** A show event with info related to the ad to be shown.
- **Discussion:** Get notified of when an ad is about to be presented.

Example:

<ul class="tab" data-tab="a91385a5-4c23-4aee-a293-59717a35eada" data-name="willShowAd">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="a91385a5-4c23-4aee-a293-59717a35eada" data-name="willShowAd">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">willShowAd</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBShowEvent</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// Make any necessary UI updates</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">willShowAd</span><span class="p">:(</span><span class="n">CHBShowEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="p">{</span>
<span class="c1">// Make any necessary UI updates</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>





### `didShowAd`

`(void)didShowAd:(CHBShowEvent _)event error:(nullable CHBShowError _)error;`

- **Description:** Called after a `showFromViewController:` call, either if the ad has been presented and an ad impression logged, or if the operation failed.
- **Parameter Event:** A show event with info related to the ad shown.
- **Parameter Error:** An error specifying the failure reason, or `nil` if the operation was successful.
- **Discussion:** Get notified of when the ad presentation process has finished.  
  

Example:

<ul class="tab" data-tab="b81ca5d2-efa4-4318-b773-dcd2818d5b6f" data-name="didShowAd">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="b81ca5d2-efa4-4318-b773-dcd2818d5b6f" data-name="didShowAd">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">didShowAd</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBShowEvent</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">CHBShowError</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="c1">// Handle error</span>
  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
      <span class="n">event</span><span class="o">.</span><span class="n">ad</span><span class="o">.</span><span class="nf">cache</span><span class="p">();</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didShowAd</span><span class="p">:(</span><span class="n">CHBShowEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="nf">error</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">CHBShowError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</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="p">[</span><span class="n">event</span><span class="p">.</span><span class="n">ad</span> <span class="nf">cache</span><span class="p">];</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>




### `didClickAd`

`- (void)didClickAd:(CHBClickEvent _)event error:(nullable CHBClickError _)error;`

- **Description:** Called after an ad has been clicked. 
- **Parameter Event:** A click event with info related to the ad clicked. 
- **Parameter Error:** An error specifying the failure reason, or `nil` if the operation was successful. 
- **Discussion:** Get notified when an ad has been clicked. If the click does not result in the opening of a link an error will be provided explaining why. 

Example:

<ul class="tab" data-tab="6d9b99bd-c35f-4094-a7d9-2452338a0182" data-name="didClickAd">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="6d9b99bd-c35f-4094-a7d9-2452338a0182" data-name="didClickAd">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">didClickAd</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBClickEvent</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">CHBClickError</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="c1">// Handle error</span>
  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
    <span class="c1">// Maybe pause ongoing processes like video or gameplay when a banner ad is clicked</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didClickAd</span><span class="p">:(</span><span class="n">CHBClickEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="nf">error</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">CHBClickError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</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">// Maybe pause ongoing processes like video or gameplay when a banner ad is clicked</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>




### `didFinishHandlingClick` *(Deprecated)*

`- (void)didFinishHandlingClick:(CHBClickEvent *)event error:(nullable CHBClickError *)error;`

<div class="alert alert-warning" role="alert">
  <b>Deprecated:</b> This method is deprecated and will be removed in a future SDK release.
</div>

- **Description:** Called when the link viewer presented as a result of an ad click has been dismissed.
- **Parameter Event:** A click event with info related to the ad clicked.
- **Parameter Error:** An error specifying the failure reason, or `nil` if the operation was successful.
- **Discussion:** Get notified of when an ad click has been handled. This can mean an in-app web browser or StoreKit rendered ad has been dismissed, or that the user came back to the app after the link was opened on an external application.

Example:

<ul class="tab" data-tab="a53897b8-2476-4b96-a217-1e755b46da51" data-name="didFinishHandlingClick">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="a53897b8-2476-4b96-a217-1e755b46da51" data-name="didFinishHandlingClick">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">didFinishHandlingClick</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBClickEvent</span><span class="p">,</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">CHBClickError</span><span class="p">?){</span>
  <span class="c1">// Resume processes previously paused on didClickAd:error: implementation.</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didFinishHandlingClick</span><span class="p">:(</span><span class="n">CHBClickEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="nf">error</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">CHBClickError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span> <span class="p">{</span>
  <span class="c1">// Resume processes previously paused on didClickAd:error: implementation.</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>




### `didRecordImpression`

`- (void)didRecordImpression:(CHBImpressionEvent *)event;`

- **Description:** Called after an ad has recorded an impression.
- **Parameter Event:** An impression event with info related to the visible ad.
- **Discussion:** Implement to be notified of when an ad has recorded an impression. This method will be called once a valid impression is recorded after the ad is shown.

Example:

<ul class="tab" data-tab="9175e5ff-2e31-43b2-890c-97b8a8dea0f9" data-name="bannerDidRecordImpression">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="9175e5ff-2e31-43b2-890c-97b8a8dea0f9" data-name="bannerDidRecordImpression">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">didRecordImpression</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBImpressionEvent</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// Track the impression</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didRecordImpression</span><span class="p">:(</span><span class="n">CHBImpressionEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="p">{</span>
  <span class="c1">// Track the impression</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>




### `didExpireAd`

`- (void)didExpireAd:(CHBExpirationEvent *)event;`

- **Description:** Called when a loaded ad has expired.
- **Parameter Event:** An expiration event with info related to the expired ad.
- **Discussion:** Implement to be notified of when an ad has expired. This method will be called if a loaded ad is not shown before a predetermined expiration interval. After expiration a new ad may be loaded.

Example:

<ul class="tab" data-tab="bb835d89-a14a-4431-90d7-6442212c90f6" data-name="bannerDidExpireAd">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="bb835d89-a14a-4431-90d7-6442212c90f6" data-name="bannerDidExpireAd">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">func</span> <span class="nf">didExpireAd</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBExpirationEvent</span><span class="p">)</span> <span class="p">{</span>
  <span class="c1">// The cached ad has expired, cache a new one</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">didExpireAd</span><span class="p">:(</span><span class="n">CHBExpirationEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="p">{</span>
  <span class="c1">// The cached ad has expired, cache a new one</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



