# Chartboost Videos

**Boost your game with engaging, high-quality video ads!**

The Chartboost SDK offers rich media support, custom advertiser experiences, and refreshed end cards to make your videos feel less like ads and more like crafted recommendations. Give your players the best in-game experience to enhance your ad performance and drive higher eCPM.

**Chartboost offers two types of video ads:**

- **Rewarded video** lets players earn in-game items or virtual currency in exchange for a completed video view.

- **Interstitial video** earns you revenue or helps you acquire users similarly to static creatives.

## Before You Begin

- [Download and integrate](/en/monetization/get-started/#sdk-integration) the latest Chartboost SDK.
- [Start a campaign](/en/monetization/publishing/adding-your-first-app-and-campaign/) in your dashboard. 

Prefetched videos (in total) only take up 30-50MB, even when you are using mediation. Video prefetch might download videos from campaigns that hit budget, in which case a "No Ad Found" error might occur.



## Rewarded Video Integration

To create a rewarded ad you use the initializer `initWithLocation:delegate:` providing a Chartboost location and an optional delegate.

<ul class="tab" data-tab="57a15d9a-5f81-4357-8def-84c83d96cbe1" data-name="rewardedVideoIntegration">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="57a15d9a-5f81-4357-8def-84c83d96cbe1" data-name="rewardedVideoIntegration">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rewarded</span> <span class="o">=</span> <span class="kt">CHBRewarded</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>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">CHBRewarded</span> <span class="o">*</span><span class="n">rewarded</span> <span class="o">=</span> <span class="p">[[</span><span class="n">CHBRewarded</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithLocation</span><span class="p">:</span><span class="s">@"MainMenu"</span> <span class="nf">delegate</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
</code></pre></div></div>
</li>
  
</ul>


Rewarded ads need to be cached before they can be shown. To cache a rewarded ad, call the cache method.

<ul class="tab" data-tab="258d95cd-6f78-49fa-8add-44f888d5ab3b" data-name="rewardedCache">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="258d95cd-6f78-49fa-8add-44f888d5ab3b" data-name="rewardedCache">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rewarded</span><span class="o">.</span><span class="nf">cache</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">rewarded</span> <span class="nf">cache</span><span class="p">];</span>
</code></pre></div></div>
</li>
  
</ul>



To show a rewarded ad, call the show method.

<ul class="tab" data-tab="150b54a8-8a93-41b0-b93a-0d9810826e69" data-name="rewardedShow">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="150b54a8-8a93-41b0-b93a-0d9810826e69" data-name="rewardedShow">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rewarded</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">rewarded</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>


<div class="alert alert-warning" role="alert">
  <b>Caution:</b> The maximum number of rewarded video impressions that a user can receive per day, per publishing app is 20.
</div>


[Learn more about delegate methods](/en/monetization/integrate/ios/delegate-methods/) 



## Interstitial Video Integration

To create an interstitial ad you use the initializer `initWithLocation:delegate:` providing a Chartboost location and an optional delegate.

<ul class="tab" data-tab="e395e040-485a-4653-8ea7-e594f9ece463" data-name="interstitialVideoIntegration">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="e395e040-485a-4653-8ea7-e594f9ece463" data-name="interstitialVideoIntegration">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">interstitial</span> <span class="o">=</span> <span class="kt">CHBInterstitial</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>
</code></pre></div></div>
</li>
  
      <li>
<div class="language-objectivec highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">CHBInterstitial</span> <span class="o">*</span><span class="n">interstitial</span> <span class="o">=</span> <span class="p">[[</span><span class="n">CHBInterstitial</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithLocation</span><span class="p">:</span><span class="s">@"MainMenu"</span> <span class="nf">delegate</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
</code></pre></div></div>
</li>
  
</ul>


Interstitial video ads need to be cached before they can be shown. To cache an interstitial video ad just call the cache method.

<ul class="tab" data-tab="01433af5-cef1-4485-9fd1-5d4d4d8527e2" data-name="interstitialVideoIntegrationCache">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="01433af5-cef1-4485-9fd1-5d4d4d8527e2" data-name="interstitialVideoIntegrationCache">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">interstitial</span><span class="o">.</span><span class="nf">cache</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">interstitial</span> <span class="nf">cache</span><span class="p">];</span>
</code></pre></div></div>
</li>
  
</ul>


To show an interstitial video ad just call the show method.

<ul class="tab" data-tab="ee926c0a-5f74-4010-a388-ef73ae2355ac" data-name="interstitialVideoIntegrationShow">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="ee926c0a-5f74-4010-a388-ef73ae2355ac" data-name="interstitialVideoIntegrationShow">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">interstitial</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">interstitial</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>




## Custom Rewarded Video Behavior

To check if a video is available at either location, show the appropriate prompt before playing the video, and give the appropriate reward afterward, use the following:

<div class="alert alert-warning" role="alert">
  <b>Deprecated:</b> The <code>isCached</code> property is deprecated and will be removed in a future SDK release. Additional condition checks have been added to <code>cache()</code> and <code>show()</code> calls making this property redundant. Remove <code>isCached</code> checks and call <code>show(from:)</code> directly; the SDK will handle the uncached case.
</div>

<ul class="tab" data-tab="b28757ae-6971-4d1a-956d-d5d6ac2fa93d" data-name="customRewardedVideo">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="b28757ae-6971-4d1a-956d-d5d6ac2fa93d" data-name="customRewardedVideo">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Preload videos at BOTH named locations</span>
<span class="n">networkRewardedAd</span> <span class="o">=</span> <span class="kt">CHBRewarded</span><span class="p">(</span><span class="nv">location</span><span class="p">:</span> <span class="s">"NetworkVideo"</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">crossPromoRewardedAd</span> <span class="o">=</span> <span class="kt">CHBRewarded</span><span class="p">(</span><span class="nv">location</span><span class="p">:</span> <span class="s">"CrossPromo"</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">networkRewardedAd</span><span class="o">.</span><span class="nf">cache</span><span class="p">()</span>
<span class="n">crossPromoRewardedAd</span><span class="o">.</span><span class="nf">cache</span><span class="p">()</span>

<span class="c1">// When the user triggers the rewarded ad offer, call show(from:) directly.</span>
<span class="c1">// The SDK handles the uncached case internally — no isCached check is needed.</span>

<span class="c1">// We prefer to use the monetizing video if available; fall back to cross-promo.</span>
<span class="c1">// Call your custom UI prompt and, if accepted, show the ad:</span>
<span class="n">networkRewardedAd</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>
<span class="c1">// or</span>
<span class="n">crossPromoRewardedAd</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="c1">// Preload videos at BOTH named locations</span>
<span class="n">networkRewardedAd</span> <span class="o">=</span> <span class="p">[[</span><span class="n">CHBRewarded</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithLocation</span><span class="p">:</span><span class="s">@"NetworkVideo"</span> <span class="nf">delegate</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
<span class="n">crossPromoRewardedAd</span> <span class="o">=</span> <span class="p">[[</span><span class="n">CHBRewarded</span> <span class="nf">alloc</span><span class="p">]</span> <span class="nf">initWithLocation</span><span class="p">:</span><span class="s">@"CrossPromo"</span> <span class="nf">delegate</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
<span class="p">[</span><span class="n">networkRewardedAd</span> <span class="nf">cache</span><span class="p">];</span>
<span class="p">[</span><span class="n">crossPromoRewardedAd</span> <span class="nf">cache</span><span class="p">];</span>

<span class="c1">// When the user triggers the rewarded ad offer, call showFromViewController: directly.</span>
<span class="c1">// The SDK handles the uncached case internally — no isCached check is needed.</span>

<span class="c1">// We prefer to use the monetizing video if available; fall back to cross-promo.</span>
<span class="c1">// Call your custom UI prompt and, if accepted, show the ad:</span>
<span class="p">[</span><span class="n">networkRewardedAd</span> <span class="nf">showFromViewController</span><span class="p">:</span><span class="n">self</span><span class="p">];</span>
<span class="c1">// or</span>
<span class="p">[</span><span class="n">crossPromoRewardedAd</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>


After the player watches the video, check the location where your game’s rewarded video delegate method is called:

<ul class="tab" data-tab="2c8868ab-6550-43ab-af2f-f31fa2edb798" data-name="CHBRewardEvent">
  
      <li class="active">
          <a href="#">swift </a>
      </li>
  
      <li>
          <a href="#">objective-c </a>
      </li>
  
</ul>
<ul class="tab-content" id="2c8868ab-6550-43ab-af2f-f31fa2edb798" data-name="CHBRewardEvent">
  
      <li class="active">
<div class="language-swift highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="kd">func</span> <span class="nf">didEarnReward</span><span class="p">(</span><span class="n">_</span> <span class="nv">event</span><span class="p">:</span> <span class="kt">CHBRewardEvent</span><span class="p">)</span> <span class="p">{</span>
        <span class="c1">// The event.reward value is what is set on the app's dashboard, which we are overriding</span>
        <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">ad</span><span class="o">.</span><span class="n">location</span> <span class="o">==</span> <span class="s">"NetworkVideo"</span> <span class="p">{</span>
            <span class="c1">// give your user the NetworkVideo reward</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="c1">// give your user the CrossPromo reward</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">didEarnReward</span><span class="p">:(</span><span class="n">CHBRewardEvent</span> <span class="o">*</span><span class="p">)</span><span class="nv">event</span> <span class="p">{</span>
        <span class="c1">// The event.reward value is what is set on the app's dashboard, which we are overriding</span>
        <span class="k">if</span> <span class="p">([</span><span class="n">event</span><span class="p">.</span><span class="n">ad</span><span class="p">.</span><span class="n">location</span> <span class="nf">isEqual</span><span class="p">:</span><span class="s">@"NetworkVideo"</span><span class="p">])</span> <span class="p">{</span>
            <span class="c1">// give your user the NetworkVideo reward</span>
        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="c1">// give your user the CrossPromo reward</span>
        <span class="p">}</span>
    <span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



