storebound/skills/ads-levelplay-checks/SKILL.md
CRT 25bc761a53 Skills: release management, preflight, rejections, originality, compliance, ASO, release notes
- New: review-rejections, portfolio-originality, release-management, store-preflight,
  privacy-manifest, export-compliance, aso-basics, whats-new
- Updated: explicit build numbers, first availability UI fallback, phased + manual release by
  default, IAP versions in review submissions (API 4.4.1, reported, verify), IAP description 45,
  privacy manifest cross-links, tool-neutral CLI instructions
- docs/agents-core.md: shared rules for every agent
2026-10-10 21:03:10 +08:00

3.5 KiB

name description
ads-levelplay-checks 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 (checked by storebound validate --play when ads.appAdsTxt lists your lines) 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. Every network SDK and adapter must ship a privacy manifest (PrivacyInfo.xcprivacy): storebound privacy-manifest --ios ios/App lists SDKs without one (privacy-manifest skill); update them before uploading.
  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.