> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudx.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Banner & MREC Ads

> Integrate CloudX banner and MREC ads in Unity games

## Banner Ads (320x50)

Standard banner ads displayed at a fixed screen position with auto-refresh functionality.

```csharp theme={null}
using CloudX;
using UnityEngine;

public class BannerExample : MonoBehaviour
{
    private const string BannerAdUnitId = "banner_main";

    void Start()
    {
        // Subscribe to callbacks
        CloudXAdsCallbacks.Banner.OnAdLoadSuccess += OnBannerLoaded;
        CloudXAdsCallbacks.Banner.OnAdLoadFailed += OnBannerLoadFailed;
        CloudXAdsCallbacks.Banner.OnAdClicked += OnBannerClicked;
        CloudXAdsCallbacks.Banner.OnAdRevenuePaid += OnBannerRevenuePaid;

        // Create, load, and show banner
        var config = new CloudXAdViewConfiguration(CloudXAdViewConfiguration.AdViewPosition.BottomCenter);
        CloudXSdk.CreateBanner(BannerAdUnitId, config);
        CloudXSdk.LoadBanner(BannerAdUnitId);
        CloudXSdk.ShowBanner(BannerAdUnitId);
    }

    void OnApplicationFocus(bool hasFocus)
    {
        if (hasFocus)
        {
            CloudXSdk.ShowBanner(BannerAdUnitId);
        }
        else
        {
            CloudXSdk.HideBanner(BannerAdUnitId);
        }
    }

    private void OnBannerLoaded(CloudXAd ad)
    {
        Debug.Log($"Banner loaded: {ad.AdUnitId}");
    }

    private void OnBannerLoadFailed(string adUnitId, CloudXError error)
    {
        Debug.LogError($"Banner failed to load: {adUnitId} - {error}");
    }

    private void OnBannerClicked(CloudXAd ad)
    {
        Debug.Log($"Banner clicked: {ad.AdUnitId}");
    }

    private void OnBannerRevenuePaid(CloudXAd ad)
    {
        Debug.Log($"Banner revenue: ${ad.Revenue} from {ad.NetworkName}");
    }
}
```

### Auto-Refresh Control

Banner ads auto-refresh by default. To control refresh manually:

```csharp theme={null}
CloudXSdk.StopBannerAutoRefresh(BannerAdUnitId);  // Stop auto-refresh
CloudXSdk.LoadBanner(BannerAdUnitId);              // Manually load
CloudXSdk.StartBannerAutoRefresh(BannerAdUnitId); // Re-enable auto-refresh
```

### Placement and Custom Data

```csharp theme={null}
CloudXSdk.SetBannerPlacement(BannerAdUnitId, "home_screen");
CloudXSdk.SetBannerCustomData(BannerAdUnitId, "custom_value");
```

<Note>
  Starting with `2.2.6`, if you want `placement` and `customData` to be included on the first banner request, call `SetBannerPlacement(...)` and `SetBannerCustomData(...)` before `CreateBanner(...)`.
</Note>

## MREC Ads (300x250)

Medium Rectangle ads work the same way as banners but with a larger size.

```csharp theme={null}
using CloudX;
using UnityEngine;

public class MrecExample : MonoBehaviour
{
    private const string MrecAdUnitId = "mrec_main";

    void Start()
    {
        // Subscribe to callbacks
        CloudXAdsCallbacks.Mrec.OnAdLoadSuccess += OnMrecLoaded;
        CloudXAdsCallbacks.Mrec.OnAdLoadFailed += OnMrecLoadFailed;
        CloudXAdsCallbacks.Mrec.OnAdClicked += OnMrecClicked;
        CloudXAdsCallbacks.Mrec.OnAdRevenuePaid += OnMrecRevenuePaid;

        // Create, load, and show MREC
        var config = new CloudXAdViewConfiguration(CloudXAdViewConfiguration.AdViewPosition.Centered);
        CloudXSdk.CreateMrec(MrecAdUnitId, config);
        CloudXSdk.LoadMrec(MrecAdUnitId);
        CloudXSdk.ShowMrec(MrecAdUnitId);
    }

    void OnApplicationFocus(bool hasFocus)
    {
        if (hasFocus)
        {
            CloudXSdk.ShowMrec(MrecAdUnitId);
        }
        else
        {
            CloudXSdk.HideMrec(MrecAdUnitId);
        }
    }

    private void OnMrecLoaded(CloudXAd ad)
    {
        Debug.Log($"MREC loaded: {ad.AdUnitId}");
    }

    private void OnMrecLoadFailed(string adUnitId, CloudXError error)
    {
        Debug.LogError($"MREC failed to load: {adUnitId} - {error}");
    }

    private void OnMrecClicked(CloudXAd ad)
    {
        Debug.Log($"MREC clicked: {ad.AdUnitId}");
    }

    private void OnMrecRevenuePaid(CloudXAd ad)
    {
        Debug.Log($"MREC revenue: ${ad.Revenue} from {ad.NetworkName}");
    }
}
```

### Placement and Custom Data

```csharp theme={null}
CloudXSdk.SetMRecPlacement(MrecAdUnitId, "home_screen");
CloudXSdk.SetMRecCustomData(MrecAdUnitId, "custom_value");
```

<Note>
  Starting with `2.2.6`, if you want `placement` and `customData` to be included on the first MREC request, call `SetMRecPlacement(...)` and `SetMRecCustomData(...)` before `CreateMrec(...)`.
</Note>

### Auto-Refresh Control

MREC ads also auto-refresh by default. Use the same refresh control methods as banners:

```csharp theme={null}
CloudXSdk.StopMrecAutoRefresh(MrecAdUnitId);
CloudXSdk.LoadMrec(MrecAdUnitId);
CloudXSdk.StartMrecAutoRefresh(MrecAdUnitId);
```
