Already using an ad platform? Follow the AdMob, MAX, LevelPlay, Unity Ads, or any-provider guide alongside this SDK reference.
UNITY SDK · 0.5.3 PREVIEW

A few lines.
All your controls here.

Unity 2022.3 LTS and newer. Set your Game ID and Test Mode once, then manage your advertising on this website.

Quick start

  1. Add your game under My games and copy its Game ID.
  2. Create and activate an ad group with banners, interstitials, or rewarded videos in Ads.
  3. Open the publishing game's Advertising settings. Set the overall share, public/personal split, and the personal ads it can show.
  4. Import the Unity package. Open Tools → Indie Exchange → Setup, enter the Game ID, and turn on Test Mode.
  5. Initialize after consent, then add the calls below at your existing ad breaks.

Full setup guide ↓

Use your existing ad breaks

using IndieExchange;

// Once, after consent:
IndieAds.Initialize();

// At an eligible interstitial break:
if (!await IndieAds.TryShowInterstitialAsync())
    ShowMyNormalInterstitial();

// When displaying a banner:
if (!IndieAds.TryShowBanner())
    ShowMyNormalBanner();

A successful interstitial call finishes after the ad closes. Preload your normal provider independently. Use IndieAds.HideBanner() when leaving a banner screen, and avoid displaying both providers' banners together.

There is no AdMob dependency or required AdMob SDK version. The production URL is built into the package.

Full-screen ads automatically pause normal gameplay, animations, and game audio, then restore their previous state when the ad closes. Ad video and controls keep running. Banners do not pause the game. Custom gameplay using unscaled time needs to check IndieAds.IsShowingInterstitial, which covers both full-screen formats.

Offer a reward

First ask the player, for example: “Watch an ad for 20 coins.” When they accept:

bool displayed = await IndieAds.TryShowRewardedAsync(
    onRewardEarned: () => GivePlayerCoins(20));
if (!displayed)
    ShowYourNormalRewardedAd();

Grant the reward only in the callback. The returned value says whether an ad displayed, including early exit. Closing before the end asks whether to leave without a reward. Completing and closing calls your callback once. Keep the reward button disabled while waiting. Buffering and background time do not earn watch time.

Use the same video for both formats by checking “Also use as rewarded” in the group. Configure Rewarded under the publishing game's advertising settings. Public approvals, personal fallback, and percentages work the same way. Requires package 0.5.0. Test Mode exercises the callback without exchange credits.

One launch. One settings snapshot.

New games start at 0%. Each format has its own overall percentage, public/personal split, and personal-ad weights. At a steady 5%, the counter selects five of every 100 opportunities. By default, when a public ad is not ready, a ready personal ad selected for that format fills the same opportunity before your normal provider is tried. Turn off “Show a personal ad when no public ad is ready” to keep the categories separate. This also works at 100% public share. Actual personal displays may exceed the scheduled split; if neither ad is ready, the call returns false. Overall 0% stays off.

Changes apply on the next launch. Failed configuration requests leave exchange ads unavailable for that session. Sessions expire after 24 hours; show calls use preloaded ads and do not wait on a network request.

In Unity Editor Play Mode, Test Mode shows an offline sample interstitial, banner, or three-second rewarded placeholder, even before you create ads on the website. On a device, Test Mode previews your active server creatives at 100% overall share. Both show TEST labels and never earn credits or send production tracking. Setup is just Game ID and Test Mode: no certificate or Google project. Normal traffic earns credits automatically; only suspicious activity is held for review. Turn Test Mode off before release. Rewarded previews exercise your game reward callback; use a test player balance.

If your normal provider has no ad or fails before opening, call await IndieAds.TryShowInterstitialAsync(bypassPercentage: true) once. It uses an already-loaded Indie ad without another percentage roll or network request. A live format set to 0% remains disabled. Do not retry after a paid ad has already displayed. For banner no-fill, use IndieAds.TryShowBanner(bypassPercentage: true) when ready.

Create an ad group

  1. Choose the game to promote and who should see it.
  2. Select Generate from store listing to get several image previews. Check the versions you want to keep. You can generate more sizes or upload multiple finished images and videos.
  3. Set the shared message, targeting, and limits once, then save the group.
  4. In each publishing game's advertising settings, select the group for banner, interstitial, or rewarded delivery. The server chooses a compatible creative and banner size.

One group holds up to 24 creatives. Its budget and daily device limit cover the whole group. Existing ads become groups automatically and keep their game links. Store generation makes static images; videos must be uploaded. Check “Also use as rewarded” under a video to reuse it in both full-screen formats. Its existing content approval is preserved.

Public creative review

Personal ads between your own games need no approval. Administrators review each image or video separately for public delivery. Adding a new creative leaves existing approvals intact. Changing the shared message or store destination requires new review of affected creatives. Budgets and targeting do not affect approval. Existing ads remain eligible unchanged while awaiting their first review. Rejection blocks that creative's new public delivery and settlement; a previously cached copy may remain visible until its short cache expires.

Artwork that fits

FormatDimensionsMedia
Interstitial9:16, minimum 720 × 1280
16:9, minimum 1280 × 720
Static image or MP4
Banner320 × 50 · 320 × 100
300 × 250 · 728 × 90
Larger images with the same proportions work.
Static image
RewardedFull-screen ratios aboveMP4 video; full playback required for the reward.

PNG, JPG, and WebP: up to 5 MB, 4096 pixels per side, and 9 megapixels. MP4: up to 30 MB, 6–30 seconds, H.264 yuv420p and optional AAC audio. The server checks the file before you can launch.

Store artwork produces a static draft with padding to preserve the whole image. Review its composition and legibility. It does not generate a video; test playback on your target devices.

Live ad loads have a server-enforced 30-second cooldown per installation and format. Banner and interstitial are independent; public/personal loads share the same limit. The SDK waits automatically and your normal provider remains available. Previews are exempt.

Credits when public inventory is empty

Eligible public opportunities can earn no-fill credits whether personal fallback is enabled or disabled. A personal backup supplied by the server earns its country and media weight after its live impression (after completion for rewarded video). If the server supplies no creative, SDK 0.5.3 claims a one-use receipt when a normal public opportunity occurs, using the lowest enabled media rate for that format. Background preloads, personal-only slots, preview traffic, network errors and provider recovery calls do not earn no-fill credits. Flagged traffic can await review; check Credits for the amount and reason.

Simple setup, automatic credits

The package creates an installation signing key automatically. No certificates, Google project, or Play installation are required. Short-lived signed challenges and one-use ad tickets protect against replay. Network, installation and publisher limits constrain abuse.

Eligible public credits settle automatically. Only integrity findings or unusual traffic volume need review. Installation signatures do not prove a genuine device or actual viewing; all publishers remain subject to server limits. Preview traffic never earns or spends credits. The server derives country from the connection IP. Keep your consent flow and privacy disclosures accurate.