# Delegate Usage

## Overview

The Mediation SDK’s delegate methods allow you to exercise a greater degree of control over your integration. For example, you can:

- Log debug messages when your game attempts to load an interstitial
- Prevent ads from showing the first time a user plays your game
- Determine whether a user has closed an ad
- Get the price of the bid that won the auction



## Delegates Setup

The Chartboost Mediation Unity SDK implements its delegate functionality using C# style delegates and events. Before using any of the delegate methods, you should first subscribe to the relevant SDK events in your MonoBehaviour as demonstrated:

### Subscribing Static Delegates

<ul class="tab" data-tab="1e1bac36-7b6e-498c-8dd1-226bdf38a911" data-name="subscribeStaticDelegates">
  
      <li class="active">
          <a href="#">C# </a>
      </li>
  
</ul>
<ul class="tab-content" id="1e1bac36-7b6e-498c-8dd1-226bdf38a911" data-name="subscribeStaticDelegates">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">private</span> <span class="k">void</span> <span class="nf">OnEnable</span><span class="p">()</span> <span class="p">{</span>
    <span class="c1">// Start Delegate</span>
    <span class="n">ChartboostMediationSDK</span><span class="p">.</span><span class="n">DidStart</span> <span class="p">+=</span> <span class="n">DidStart</span><span class="p">;</span>

    <span class="c1">// ILRD Delegate</span>
    <span class="n">ChartboostMediationSDK</span><span class="p">.</span><span class="n">DidReceiveImpressionLevelRevenueData</span> <span class="p">+=</span> <span class="n">DidReceiveImpressionLevelRevenueData</span><span class="p">;</span>

    <span class="c1">// Partner Initialization Data Delegate</span>
    <span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">DidReceivePartnerInitializationData</span> <span class="p">+=</span> <span class="n">DidReceivePartnerInitializationData</span><span class="p">;</span>

    <span class="c1">// Error Handling Delegate</span>
    <span class="n">ChartboostMediation</span><span class="p">.</span><span class="n">UnexpectedSystemErrorDidOccur</span> <span class="p">+=</span> <span class="n">UnexpectedSystemErrorDidOccur</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>



- Don’t make `cache` or `show` calls inside a delegate indicating that an ad has just failed to load.
- Banner ads do not have a `DidCloseBanner` delegate.
- Not all of the partner sdks have support for the `DidClick` delegate.

### Unsubscribing Delegates

Make sure to unsubscribe to those same events when appropriate:

<ul class="tab" data-tab="e8c42b36-0e68-439a-9a32-5bf4d2e33195" data-name="unsubscribingDelegates">
  
      <li class="active">
          <a href="#">C# </a>
      </li>
  
</ul>
<ul class="tab-content" id="e8c42b36-0e68-439a-9a32-5bf4d2e33195" data-name="unsubscribingDelegates">
  
      <li class="active">
<pre><code class="language-Csharp">private void OnDisable() {
    // Remove event handlers
    ChartboostMediation.DidStart -= DidStart;

    // ILRD Delegate
    ChartboostMediation.DidReceiveImpressionLevelRevenueData -= DidReceiveImpressionLevelRevenueData;

    // Partner Initialization Data Delegate
    ChartboostMediation.DidReceivePartnerInitializationData -= DidReceivePartnerInitializationData;

    // Error Handling Delegate
    ChartboostMediation.UnexpectedSystemErrorDidOccur -= UnexpectedSystemErrorDidOccur;
}
</code></pre>
</li>
  
</ul>




## Example Delegate Methods

### Lifecycle Delegates

<ul class="tab" data-tab="a087d26f-6b24-4073-990f-937762c62b42" data-name="lifecycleDelegates">
  
      <li class="active">
          <a href="#">C# </a>
      </li>
  
</ul>
<ul class="tab-content" id="a087d26f-6b24-4073-990f-937762c62b42" data-name="lifecycleDelegates">
  
      <li class="active">
<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Start Delegate</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">DidStart</span><span class="p">(</span><span class="kt">string</span> <span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"DidStart: </span><span class="p">{</span><span class="n">error</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
    <span class="c1">// Logic goes here</span>
<span class="p">}</span>

<span class="c1">// ILRD Delegate</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">DidReceiveImpressionLevelRevenueData</span><span class="p">(</span><span class="kt">string</span> <span class="n">placement</span><span class="p">,</span> <span class="n">Hashtable</span> <span class="n">impressionData</span><span class="p">)</span>
<span class="p">{</span>
    <span class="kt">var</span> <span class="n">json</span> <span class="p">=</span>  <span class="n">JsonTools</span><span class="p">.</span><span class="nf">Serialize</span><span class="p">(</span><span class="n">impressionData</span><span class="p">);</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"DidReceiveImpressionLevelRevenueData </span><span class="p">{</span><span class="n">placement</span><span class="p">}</span><span class="s">: </span><span class="p">{</span><span class="n">json</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// Partner Initialization Data Delegate</span>
<span class="k">private</span> <span class="k">void</span> <span class="nf">DidReceivePartnerInitializationData</span><span class="p">(</span><span class="kt">string</span> <span class="n">partnerInitializationData</span><span class="p">)</span>
<span class="p">{</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">Log</span><span class="p">(</span><span class="s">$"DidReceivePartnerInitializationData: $</span><span class="p">{</span><span class="n">partnerInitializationData</span><span class="p">}</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// Error Handling Delegate</span>
<span class="k">private</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">UnexpectedSystemErrorDidOccur</span><span class="p">(</span><span class="kt">string</span> <span class="n">error</span><span class="p">)</span>
<span class="p">{</span>
    <span class="n">Debug</span><span class="p">.</span><span class="nf">LogErrorFormat</span><span class="p">(</span><span class="n">error</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>
</li>
  
</ul>

