Ads
four networks, every placement off.
AdMob, AppLovin MAX, Unity Ads and ironSource LevelPlay, as one network or a waterfall per format. Ads are off until you switch them on, and hidden for Pro users and after Remove ads.
01Networks and formats
| Network | Formats in this app | Ids the app needs |
|---|---|---|
| Google AdMob | Banner, interstitial, rewarded, native, app open | Android and iOS app id, unit ids |
| AppLovin MAX | Banner, interstitial, rewarded, native, app open | SDK key, unit ids |
| Unity Ads | Banner, interstitial, rewarded | Android and iOS game id, placement ids |
| ironSource LevelPlay | Banner, interstitial, rewarded | Android and iOS app key, ad unit ids |
Each network needs a publisher account, which reviews your app and pays you under its own terms. Ad income depends entirely on your traffic, countries and the network; these docs do not estimate it.
02Placements
Console → Ads. Every placement is off by default.
| Placement | Default | Notes |
|---|---|---|
| Show ads (master switch) | Off | Nothing shows while this is off. |
| App-open ad | Off | At most once per hour. |
| Banner on the markets / coin / news screen | Off | Three separate switches. |
| Native ad after every n coins | 0 (off) | 0–100. A native ad row inside the markets list. |
| Native ad after every n news items | 0 (off) | 0–100. |
| Interstitial on every n-th coin opened | 0 (off) | 0–50. |
| Seconds between two interstitials (minimum) | 120 | 30–3600. Also spaces app-open ads. |
| Rewarded ad unlocks an AI coin report | Off | Capped per user and day under AI summaries. See AI summaries. |
Pro users and users who bought Remove ads see no ads at all (app/lib/ads/ad_policy.dart).
03One network or a waterfall
- One network (default, AdMob): that network serves every format it supports.
- Waterfall per format: one list per format (banner, interstitial, rewarded, native, app open), one network per line, tried in order until one fills. A network that does not have that format, an unknown name or a repeat is skipped and shown on the Status page.
applovin
admob
Example waterfall for rewarded: AppLovin MAX first, then AdMob.
04Enter your ids
No live ad ids are included. The only ad ids in the code are Google's public AdMob test ids: the test app id ca-app-pub-3940256099942544~… in AndroidManifest.xml and Info.plist, and the test unit ids in app/lib/ads/ad_adapter.dart that debug builds use. Every id field in the console starts empty. Replace the test app ids with your own (step 3 below) before you publish; a store build with test ids earns nothing.
- Create the app and ad unitsIn each network's dashboard, for Android and for iOS.
- Paste them in the consoleUnder AdMob ids, AppLovin MAX ids, Unity Ads ids or ironSource LevelPlay ids. An empty unit in a release build means no ad of that format. Status warns when a switched-on placement has no id.
- AdMob app id in the native projectAdMob reads its app id from the app bundle at start, so it must also be in the code: replace Google's public test app ids in
app/android/app/src/main/AndroidManifest.xml(com.google.android.gms.ads.APPLICATION_ID) andapp/ios/Runner/Info.plist(GADApplicationIdentifier) with your own, then rebuild.
When an AdMob unit id is empty and the build is a debug build, the app uses Google's published test units, and Unity Ads runs in test mode. Release builds never use test ids: an empty id means no ad. Never click your own live ads.
05Consent and privacy
- Before the first ad request the app runs Google's User Messaging Platform (UMP) consent flow (
app/lib/ads/native_adapters.dart). Create and publish your GDPR (and, if you want, US state) message in AdMob → Privacy & messaging; without a published message no form is shown. - iOS:
Info.plistcontainsNSUserTrackingUsageDescriptionand SKAdNetwork ids. Reword the tracking text to match your app, and add the SKAdNetwork ids each network asks you to include. - Declare ads and the advertising id in Google Play's Data safety form and Apple's App Privacy details. See Release.
06Ads in the web demo
The web demo (DEMO_MODE=true) draws simulated, clearly labelled placeholders instead of real ads, so visitors can see where each placement appears. The ad SDKs do not run on the web.
07Measuring ad revenue
Ad revenue is shown in the console only when it is measured: either pulled from the AdMob or AppLovin MAX reporting API, or entered by hand from a network payout. See Revenue centre.