storebound/skills/ads-levelplay-checks/SKILL.md

39 lines
3.2 KiB
Markdown

---
name: ads-levelplay-checks
description: Diagnose and verify ad mediation (Unity LevelPlay / ironSource and its networks like Unity Ads, InMobi, Liftoff, AdMob) in a mobile game before and after store release - app keys, game ids, adapter versions, integration validation, "Invalid Game ID", "Mediation No fill" 509, app-ads.txt, SKAdNetwork ids, ATT, COPPA setting. Use when ads do not load, a network reports invalid/unknown ids, or the user prepares ads for launch.
---
# Ad mediation checks (LevelPlay)
No CLI needed; these are checks to run and read. Ask the owner before changing dashboard settings.
## Checklist
1. **Ids per platform.** LevelPlay app key + ad unit ids for iOS and Android are different; ship production ids only
in release builds and use the public demo app keys from Unity's Mediation demo apps during development so real units
never see test traffic.
2. **Integration.** After init call the SDK's `validateIntegration()`; the device log (Xcode console, Android logcat
tag `IntegrationHelper`) must list every network as "Adapter - Version x - VERIFIED". Adapter + network SDK versions
must be a pair from Unity's adapter tables / CHANGELOGs.
3. **Unity Ads "Invalid Game ID" / iOS "Initialization failed: not found".** Often account-side, not code: compare
`https://publisher-config.unityads.unity3d.com/games/<gameId>/configuration` for your id with Unity's demo id
`14851` (which answers with a config). If yours 404s or is empty, the Unity Ads project / game id is not set up or not
linked to the LevelPlay app: fix it in the Unity dashboard (Monetization > Projects > the game ids, and the LevelPlay
network setup using exactly those ids).
4. **509 "Mediation No fill"** before launch is normal: the LevelPlay app is not live / not linked to store URLs. After
both listings are public, set the store URLs in the LevelPlay dashboard.
5. **app-ads.txt** on the root of the developer website named in both listings (`https://<domain>/app-ads.txt`):
`OWNERDOMAIN=<domain>`, the LevelPlay DIRECT line with your publisher id, and each network's lines (Unity's
"App-Ads.txt" doc page lists them). Re-sync now and then. The listing website must match the domain exactly.
6. **iOS**: SKAdNetwork ids of every network in Info.plist (refresh from each network's official list when adding one),
`NSUserTrackingUsageDescription`, ATT prompt before the ad SDK starts, `-ObjC` linker flag if the SDK requires it.
7. **Android**: `AD_ID` permission (declared in Play's advertising ID form), network SDKs listed explicitly when the
adapter artifacts declare no dependencies.
8. **Privacy**: COPPA "not directed at children" unless the app is for kids; EU / UK / CH consent (CMP) or
non-personalized ads; Data safety + App Privacy list the ad data as shared / tracking (`store-declarations`).
9. **Placement sanity**: no ads in the first sessions / levels, never mid-round, rewarded always optional; reviewers
test the first minutes.
## Gotchas
- Adding Google AdMob needs its app id first: the adapter crashes at launch without the manifest / Info.plist id.
- Test ads on real units can get the account flagged: use demo ids or registered test devices.
- A network failing to init does not break mediation; the others still fill once the app is live.