Unity Ads playable specs at a glance
| File format | One index.html, all assets inlined, minified. No links to other files or folders. |
|---|---|
| Max file size | Under 5 MBUnity's moderation page says under 6 MB; its spec pages say 5 MB. Build to 5 MB. |
| MRAID | MRAID 3.0, injected by the Unity Ads webview |
| Start | Wait for ready, then viewableChange / mraid.isViewable() before starting. Pause when it's hidden. |
| CTA call | mraid.open(storeUrl); with your App Store or Google Play URL |
| External requests | Not needed. Analytics calls may be allowed if they carry no personal data. |
| Orientation | Portrait and landscape, scaling to the screen, without breaking on rotation |
| Redirects | Never automatic, and never on the first touch |
| Close button | Controlled by the Unity SDK. Don't cover or block it. |
| Sound | Turns off with the iOS mute switch; stops when the screen locks and resumes on unlock |
| Formats | Standalone playable, or a 15–60 s video with a playable end card. Rewarded and interstitial. |
| Testing | The Ad Testing for Unity Ads app, then human moderation |
Required code
This follows the bootstrap in Unity's best-practices guide: wait for MRAID, then start only once the ad is actually on screen:
var STORE_URL = /iPhone|iPad|iPod/.test(navigator.userAgent)
? "https://apps.apple.com/app/id000000000"
: "https://play.google.com/store/apps/details?id=com.your.game";
function onViewable(viewable) {
if (viewable) startGame(); else pauseGame();
}
function onReady() {
mraid.addEventListener("viewableChange", onViewable);
if (mraid.isViewable()) startGame();
}
if (mraid.getState() === "loading") {
mraid.addEventListener("ready", onReady);
} else {
onReady();
}
installButton.addEventListener("click", function () {
mraid.open(STORE_URL);
});
Unity attributes starts, views and clicks on its servers, so you don't need tracking calls. Unity's docs don't ask for a mraid.js script tag, since the webview injects MRAID.
Standalone playable or playable end card
- Playable: the whole ad is the interactive demo.
- Video and playable end card: a 15–60 second video, then the playable as its end card. Unity says the playable can start loading with the video, and it must respect
isViewableso it doesn't run hidden.
Both run through Unity's rewarded and interstitial ad units and use the same single-file spec.
Moderation checks
Every new creative pack is reviewed by a person at Unity, and packs stay Pending until the organization has added funds. Moderators check that:
- the content scales to the screen and doesn't break when the device rotates
- the install button is easy to reach, not covered, and goes to the right store
- the iOS mute switch turns sound off, and locking the screen stops it
- the code is minified and there are no errors in the console
- it runs smoothly, without stutter or pixelated art
- it plays for a reasonable length before the end screen and isn't too hard for its audience
- it makes no unnecessary network requests
It also needs to run on Android 4.4+ and iOS 9+.
How to test a Unity playable
- Host the HTML at a URL ending in
.html(HTTPS for iOS), or upload it to a playable creative pack in the Unity dashboard. - Install Ad Testing for Unity Ads (iOS, Android).
- Use Show QR code in the dashboard, scan it, and play the ad in Unity's own webview. Rotate the phone, flip the mute switch and lock the screen while it plays.
Why Unity rejects playables
Unity's “Rejected” status page names these as the common causes:
- The ad doesn't work properly when switching between portrait and landscape.
- Sound doesn't stop when the screen locks, or doesn't come back on unlock.
- Sound ignores the iOS mute switch.
- The content breaks Unity's advertising content policies.
Failing the moderation checks above (file size, unminified code, console errors, an obstructed install button) also gets packs rejected. Hover over a rejected pack's name in the dashboard to see why.
Common questions
What is the file size limit for Unity Ads playables?
Under 5 MB for the single index.html. One Unity moderation page says 6 MB, but the playable specification pages say 5 MB, so build to 5 MB.
Which MRAID version does Unity Ads use?
MRAID 3.0. The Unity Ads webview injects MRAID, so the playable can call its methods directly.
What is the CTA call for Unity playables?
mraid.open() with your app's App Store or Google Play URL. The playable can't open the store automatically or on the user's first touch.
Can a Unity Ads playable be a ZIP?
No. Unity requires a single index.html with all assets inlined and no links to other files or folders.
Why was my Unity playable rejected?
Unity's most common reasons are breaking on orientation change, sound that doesn't stop when the screen locks, ignoring the iOS mute switch, and content policy violations. Hover over the pack name in the dashboard to see the exact reason.
How do I test a Unity Ads playable?
Install the Ad Testing for Unity Ads app, then scan the QR code from your creative pack, or load a hosted .html URL, to play it in Unity's webview on a real phone.
Sources
Networks change their specs without notice. These are the pages this summary was checked against. If anything here disagrees with them, follow the network.