Use Indie Exchange with your existing Unity ad provider
Indie Exchange adds cross-promotion and a credit-based traffic exchange to Unity games on Android and iOS. It runs alongside your existing ad integration. Your game chooses which provider to call; Indie Exchange does not initialize or call other ad SDKs, enter their bidding auctions, or guarantee their fill.
SDK 0.5.3 preview · Download optional examples · Setup instructions
These are integration patterns for an existing ad manager, not complete provider SDK setups or certification of every SDK/version combination. Keep your provider's consent, initialization, loading, close, failure, and cleanup handlers. Use one shared guard for the entire ad break, including your provider's asynchronous display, so repeated taps cannot open competing ads. Call Indie Exchange on Unity's main thread; dispatch provider callbacks there when needed.
Set up Indie Exchange once
Keep your existing ad integration. Add Indie Exchange as another option at the same ad breaks.
- Add the game on Indie Exchange and copy its Game ID. Create an ad group with the formats you need.
- In the game's Advertising settings, enable each format with an overall share above 0%. Choose the public/personal split and any personal ad groups. Settings refresh on the next game launch.
- Install the Unity package, open Tools > Indie Exchange > Setup, and enter Game ID. Turn on Test Mode during development. Unity 2022.3 or newer is required; validate your target Unity version and devices.
- After your consent and age flow permits ad requests, initialize Indie Exchange and your existing provider independently. Let both preload ahead of the ad break.
using IndieExchange;
// Once, after consent allows ad requests:
IndieAds.Initialize(); Editor Test Mode displays offline samples. Device Test Mode previews eligible server creatives without exchange credits. Test your other provider using its own test mode too, then turn test modes off for release.
Choose which ad gets this opportunity
The integration point is your game's ad manager. It can use AdMob, MAX, LevelPlay, a different Unity-compatible provider, or your own wrapper. You do not need to replace it or add a provider-specific Indie Exchange dependency.
// Inside your existing guarded, async ad-break handler:
if (await IndieAds.TryShowInterstitialAsync())
return;
if (await TryShowNormalInterstitialAsync())
return;
await IndieAds.TryShowInterstitialAsync(bypassPercentage: true); TryShowNormalInterstitialAsync is a method you implement in your ad manager. It must finish after close and return true if any ad opened, or return false only for no ready ad or a definitive failure before opening. It is not part of this SDK. Do not treat a timeout after a show request as proof that no ad opened.
Connect the provider you already use
Map its existing behavior to this contract:
- Initialize and preload independently of Indie Exchange, after your consent flow allows requests.
- Check readiness at a valid ad break, honoring your own frequency and placement limits before selecting either provider.
- Track opening and closure. Keep the ad-break guard until closure; an asynchronous Show call returning is not the same as an ad closing.
- Handle final failure before opening once. Continue normally if both sources have no ad, and ignore late callbacks from a retired attempt.
- Use only the mediation SDK's overall outcome. Its individual networks are not separate opportunities for Indie recovery.
Keep one ad in charge of each break
An Indie Exchange full-screen call returns true after a displayed ad closes, including an early exit. False means it did not display an ad, so your normal provider can take over.
- Initialize and preload your normal provider independently. An Indie Exchange configuration failure or unavailable cached ad must not prevent your provider's own load or show path.
- Only attempt recovery when no ad has opened and the original break is still active. A background load failure is not a reason to interrupt the player with an ad.
- Keep your shared ad-break guard held until the selected provider closes or definitively fails before opening. Ignore stale or duplicate callbacks. Never show a second ad after a successful display.
- When both sources are unavailable, continue the game. Do not loop, wait indefinitely, or promise 100% fill.
bypassPercentage: true makes one recovery attempt using a ready Indie ad. It does not fetch an ad or override a live format set to 0%. It can increase the actual Indie share above the scheduled percentage.
What provider independence means
The current package is for Unity on Android and iOS, with offline Editor samples. It does not add Unreal or native Android/iOS SDK support, an auction bidder, or an official mediation adapter. Validate your provider versions, device builds, and consent requirements together. Other providers' fill and availability are outside Indie Exchange's control.