MRAID 3.0 playable example: a short skeleton for Unity Ads
A short MRAID 3.0 playable skeleton for Unity Ads: wait for ready, react to viewableChange, start and pause, call mraid.open only on a CTA tap.
MRAIDPlayables6 min read

Playable specs for Unity, AppLovin, Meta and Mintegral side by side. Size limits, MRAID version and CTA call differ across the docs.

Unity, AppLovin, Meta and Mintegral all take an HTML playable, but their pages do not describe the same file. File size limits, the MRAID version and the call that opens the store differ, so the docs do not support “one build for every network”. The table below puts the four side by side, and cells say “Not on the page” wherever a network’s page is silent.
Every page was read on 29 Oct 2026. Meta’s page came back in German, so we translated the wording ourselves.
| Parameter | Unity | AppLovin | Meta | Mintegral |
|---|---|---|---|---|
| Format | Single HTML file (index.html) |
Single HTML file | Zip file or a single HTML file (index.html), judging by the error texts |
HTML (single file) |
| File size | Less than 5 MB | 5 MB or smaller per ad file | Zip under 5 MB. For a single HTML file the error texts imply a 2 MB cap | 5 MB |
| Assets | Everything inlined as base64. No relative paths or remote URLs | base64 or base122 only. External resources prohibited | Not on the page. Assets must not contain JavaScript redirect code | Not on the page |
| MRAID | 3.0, injected by Unity’s webview. Full-screen ads only | v2.0 | Not on the page | Not on the page |
| Orientation | Portrait and landscape from one responsive build | Must work in landscape and portrait | Not on the page | Must render in portrait or landscape modes |
| Network calls | None, except permitted analytics calls | External network calls prohibited | Not on the page | Not on the page |
| Store redirect / CTA | mraid.open on a CTA tap after gameplay. The first tap can’t open the store |
mraid.open() for click-throughs. No store redirect on the first tap, no auto-click |
FbPlayableAd.onCTAClick() |
Not on the page |
| Other | Android 5+ and iOS 13+. No fake close buttons | Timer starts after the first user interaction. Audio muted until first interaction. WebGL needs a UI fallback | Objective App installs only. iPads not supported for testing | Used for Playable Interstitial and Rewarded Video. “No fixed size” |
According to Unity’s playable specifications, the file is a single index.html under 5 MB with every asset inlined as base64, and the playable must support MRAID 3.0. The store opens through mraid.open only after a tap on a CTA that follows real gameplay. The full list is in our Unity Ads playable requirements checklist.
AppLovin’s creative guidelines ask for a single HTML file of 5 MB or smaller, with all resources embedded in base64 or base122 and no external network calls. The playable must support MRAID v2.0 and wait for ready (or for mraid.getState() to return anything but 'loading'). Audio stays muted until the first interaction. The page gives no numeric load-time limit, no timer duration, no pixel sizes, and says nothing about MRAID v1 or v3.
Meta’s playable ads page describes the file limits through its error messages: a zip over 5 MB is rejected, and so is a single HTML file, or an index.html, over 2 MB. The CTA must call FbPlayableAd.onCTAClick(). Only the App installs objective is supported, and the page advises creating ads with status=PAUSED and switching to ACTIVE after testing. It states no orientation requirement and no general policy on external requests. A full HTML and zip spec sits in a linked help article we did not read.
Mintegral’s asset specs (the page shows “Last modified: 2026-09-10”) list a single HTML file, 5 MB, no fixed size, and portrait or landscape rendering for Playable Interstitial and Rewarded Video. You also upload a main image and an app icon. The page links a Playable Test Guide that we did not read. It makes no MRAID statement and says nothing about CTA handling, load time or frame rate.
Three differences are visible in the docs alone:
mraid.open, while Meta requires FbPlayableAd.onCTAClick(). A build that calls only one of them is not documented to work on the other.Smaller rules differ too. AppLovin wants audio muted until the first interaction, while Unity’s docs focus on the iOS mute switch and viewability. Meta forbids JavaScript redirect code in assets. None of the four pages promises that a file accepted by one is accepted by another.
A safer plan is one shared game core and a thin export step per network that swaps the CTA call, checks the size against that network’s cap and tests against that network’s page. The skeleton in MRAID 3.0 playable example shows where the Unity side of that wrapper lives.
DarkCore Ramet is built for Unity Ads and includes a Playable Builder. The other three networks are here for comparison only, so use their own pages for those exports.
Check each network's page before you export
DarkCore Ramet runs bulk launch and automation for Unity Ads through the official Unity API, and includes a Playable Builder.
A short MRAID 3.0 playable skeleton for Unity Ads: wait for ready, react to viewableChange, start and pause, call mraid.open only on a CTA tap.
MRAIDPlayables6 min read

Unity's docs name one cause of a blank playable: an asset loaded by path or URL. Seven more checks from the spec and moderation pages follow.
PlayablesMRAID7 min read

Unity's playable checklist: one HTML file under 5 MB, base64 assets, no network, MRAID 3.0, both orientations, store only after a CTA tap.
PlayablesModeration7 min read
