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-platform AppKey (issued by Yodo1), a per-platform AdmobAppID (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), a BundleID field that must match your actual Player Settings bundle identifier/package name, and regional flags (ChinaRegion on iOS, ChineseAndroidStores on Android).
  • Yodo1Proxy.cs also 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, Yodo1Proxy builds a Yodo1AdBuildConfig with enableUserPrivacyDialog(true) and optional PrivacyPolicyUrl / TermsOfServiceUrl consts (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 from Yodo1Proxy.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 AppKey issued 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 the INITIALIZED action) — if it fails, re-check the AppKey and BundleID fields 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.

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 AppKey or BundleID mismatch 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 AdmobAppID field in Yodo1AdSettings.asset and 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 enableUserPrivacyDialog and the logged geography/userAge/ATT values from OnSdkInitializationCompleted — 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 / ChineseAndroidStores flags match your actual distribution target for that build.