Implement rewarded ads in Unity

Read time 5 minutes

Rewarding players for watching ads increases user engagement, resulting in higher revenue. For example, games might reward players with in-game currency, consumables, additional lives, or experience-multipliers. For more information on how to effectively design your rewarded ads, refer to the Monetization strategy documentation.

To reward players for completing a video ad, implement a callback method using the ShowResult result to check if the user finished the ad and should be rewarded.

Rewarded ad buttons

Using a button that prompts the player to opt in to watching an ad is a common implementation for rewarded video ads. Use the example code in the following steps to create a rewarded ads button. The button displays an ad when pressed, as long as ad content is available.

To configure a button in the Unity Editor:

  1. Select Game Object > UI > Button to add a button to your Scene.
  2. Select the button you added to your Scene, then add a script component to it using the Inspector (Add Component > New Script). Name the script RewardedAdsButton to match the class name.
  3. Open the script and add the following code:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
 
public class RewardedAdsButton : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
  [SerializeField] Button _showAdButton;
  [SerializeField] string _androidAdUnitId = "Rewarded_Android";
  [SerializeField] string _iOSAdUnitId = "Rewarded_iOS";
  string _adUnitId = null; // This will remain null for unsupported platforms
 
  void Awake()
  {   
    // Get the Ad Unit ID for the current platform:
    #if UNITY_IOS
    _adUnitId = _iOSAdUnitId;
    #elif UNITY_ANDROID
    _adUnitId = _androidAdUnitId;
    #endif

    // Disable the button until the ad is ready to show:
    _showAdButton.interactable = false;
  }
 
  // Call this public method when you want to get an ad ready to show.
  public void LoadAd()
  {
    // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).
    Debug.Log("Loading Ad: " + _adUnitId);
    Advertisement.Load(_adUnitId, this);
  }
 
  // If the ad successfully loads, add a listener to the button and enable it:
  public void OnUnityAdsAdLoaded(string adUnitId)
  {
    Debug.Log("Ad Loaded: " + adUnitId);
 
    if (adUnitId.Equals(_adUnitId))
    {
      // Configure the button to call the ShowAd() method when clicked:
      _showAdButton.onClick.AddListener(ShowAd);
      // Enable the button for users to click:
      _showAdButton.interactable = true;
    }
  }
 
  // Implement a method to execute when the user clicks the button:
  public void ShowAd()
  {
    // Disable the button:
    _showAdButton.interactable = false;
    // Then show the ad:
    Advertisement.Show(_adUnitId, this);
  }
 
  // Implement the Show Listener's OnUnityAdsShowComplete callback method to determine if the user gets a reward:
  public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
  {
    if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
    {
      Debug.Log("Unity Ads Rewarded Ad Completed");
      // Grant a reward.
    }
  }
 
  // Implement Load and Show Listener error callbacks:
  public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message)
  {
    Debug.Log($"Error loading Ad Unit {adUnitId}: {error.ToString()} - {message}");
    // Use the error details to determine whether to try to load another ad.
  }
 
  public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message)
  {
    Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");
    // Use the error details to determine whether to try to load another ad.
  }
 
  public void OnUnityAdsShowStart(string adUnitId) { }
  public void OnUnityAdsShowClick(string adUnitId) { }
 
  void OnDestroy()
  {
    // Clean up the button listeners:
    _showAdButton.onClick.RemoveAllListeners();
  }
}

Next steps: Refer to Implement banner ads in Unity.