How to Setup Yodo1
Use this guide to configure the Yodo1 MAS integration — the ad provider
used whenever AdsProviderType.Yodo1 is selected. Based directly on the
installed Yodo1 MAS SDK (version 4.18.0, from
Assets/Yodo1/MAS/version.xml) and the project's Yodo1Proxy
implementation.
Architecture Context
Yodo1 MAS (Mobile Ad Solution) is a mediation layer, not a single ad
network — it can itself serve AdMob and other networks under the hood,
with the actual mediation waterfall configured entirely in the Yodo1
dashboard, not in this project's code. This is the key difference from
the AdMob and Unity Ads guides: Yodo1Proxy.cs barely contains any IDs at
all, because almost everything is driven by one settings asset plus the
dashboard.
- All identity/config lives in
Assets/Resources/Yodo1/Yodo1AdSettings.asset: a per-platformAppKey(issued by Yodo1), a per-platformAdmobAppID(only needed if AdMob is one of the networks Yodo1 mediates for you — same format as the raw AdMob App ID,ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY), aBundleIDfield that must match your actual Player Settings bundle identifier/package name, and regional flags (ChinaRegionon iOS,ChineseAndroidStoreson Android). Yodo1Proxy.csalso has three optional placement-name constants (BannerPlacement,InterstitialPlacement,RewardedPlacement), all empty by default — empty means "use this format's default ad unit from the dashboard." You only fill one in if you created multiple named placements for that format and need to pick a specific one at runtime.- Before initializing,
Yodo1Proxybuilds aYodo1AdBuildConfigwithenableUserPrivacyDialog(true)and optionalPrivacyPolicyUrl/TermsOfServiceUrlconsts (also empty by default) — filling these in makes the SDK's built-in consent dialog link out to your own policy pages instead of showing no links. Yodo1U3dMas.InitializeMasSdk()is called automatically fromYodo1Proxy.Initialize()— there's no separate manual init step elsewhere in the codebase.
Pre-Setup Checklist
- An account on the Yodo1 MAS dashboard, with your app registered and an
AppKeyissued per platform. - Ad networks (AdMob and/or others) already configured for mediation inside the Yodo1 dashboard — this project's code has no say in which networks are mediated or their waterfall order.
- The Yodo1 MAS Unity SDK, version 4.18.0, imported under
Assets/Yodo1/MAS/. - Your Unity Player Settings bundle identifier / package name finalized — it needs to match what you register in the dashboard.
Main Procedure
Step 1: Set the App Keys
Open Assets/Resources/Yodo1/Yodo1AdSettings.asset (find it under
Resources → Yodo1 → Yodo1AdSettings in the Project window) and set
AppKey for each platform to the value issued by the Yodo1 dashboard.
Step 2: Set the Bundle ID
On the same asset, set the BundleID field to match your project's real
Player Settings bundle identifier / package name exactly — a mismatch
here is a common reason the SDK can't match your app to the dashboard.
Step 3: Set the AdMob App ID (If Mediating AdMob)
If AdMob is one of the networks configured in your Yodo1 mediation
waterfall, also set AdmobAppID per platform to your real AdMob App ID —
same format as in the AdMob guide's App ID step.
Step 4: Regional Flags
Only relevant if you distribute to Chinese app stores: set
iOSSettings.ChinaRegion / androidSettings.ChineseAndroidStores to
match your actual distribution target — Yodo1Proxy.ApplyRegionalPrivacySettings()
forces personalized ads on for those regions specifically.
Step 5: Select Yodo1 as the Active Provider
Set GameConfig.AdsProviderMobile (and AdsProviderEditor, for testing
in-editor) to AdsProviderType.Yodo1, or drive it from remote config by
setting the "AdsProvider" key to "Yodo1".
Step 6: (Optional) Point at Specific Placements
If you've created more than one named placement per ad format in the
dashboard, set the matching constant in Yodo1Proxy.cs
(BannerPlacement / InterstitialPlacement / RewardedPlacement) to
the exact placement name. Leave them blank to use each format's default.
Step 7: Validate
- Confirm
OnSdkInitialized(true, null)fires (logged indirectly via theINITIALIZEDaction) — if it fails, re-check theAppKeyandBundleIDfields first. - Check the logged privacy configuration from
OnSdkInitializationCompleted(geography,userAge,att) to confirm the SDK detected what you expect for your test device/region.
Common Edit Recipes
Recipe A: Point at a Specific Dashboard Placement
Set the matching *Placement constant in Yodo1Proxy.cs to the exact
placement name from the dashboard, instead of leaving it blank for the
default.
Recipe B: Add Your Own Privacy/Terms Links
Fill in PrivacyPolicyUrl and/or TermsOfServiceUrl in Yodo1Proxy.cs
so the SDK's built-in consent dialog links to your own pages instead of
showing none.
Troubleshooting
- SDK never reports initialized. Almost always an
AppKeyorBundleIDmismatch between the settings asset and the app registered in the Yodo1 dashboard. - Ads load overall, but not through the mediated AdMob network
specifically. Check the
AdmobAppIDfield inYodo1AdSettings.assetand confirm AdMob is actually enabled and configured in the Yodo1 dashboard's mediation waterfall — that configuration lives entirely on the dashboard side, not in this project's code. - Consent dialog never appears, or appears on every launch. Check
enableUserPrivacyDialogand the logged geography/userAge/ATT values fromOnSdkInitializationCompleted— the SDK decides whether and how to show it based on what it detects for the current device/region. - Wrong ad behavior specifically for Chinese-store builds. Check the
ChinaRegion/ChineseAndroidStoresflags match your actual distribution target for that build.