name: mediation description: Create and maintain mediation network plugins (e.g., AppLovin, Vungle, Meta, IronSource) across Godot, C#, Android, and iOS.
Mediation Network Development & Maintenance Guide
This guide outlines the architecture and step-by-step instructions for adding or maintaining AdMob mediation adapters (e.g., Meta, IronSource, Vungle, AppLovin) within the Godot AdMob Editor Plugin.
๐๏ธ Architecture Overview
Mediation integration consists of native Android/iOS libraries, GDScript/C# interface wrappers, and editor export configurations:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Game Project โ
โโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ (API Calls)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Godot Addon โ
โ - AppLovin.gd (GDScript Wrapper) โ
โ - AppLovin.cs (C# Parity Wrapper) โ
โ - project_settings_service.gd (registers settings) โ
โ - export_plugins (copies AARs/XCFrameworks) โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโ
โ (JNI / Android Bridge) โ (Objective-C++ / iOS Bridge)
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Android Library โ โ iOS Framework โ
โ - PoingGodotAdMobAppLovin.kt โ โ - PoingGodotAdMobAppLovin.mm โ
โ - play-services-ads-applovin โ โ - AppLovinAdapterTarget โ
โ - AppLovin SDK (AAR) โ โ - AppLovin SDK (XCFramework) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ ๏ธ Step-by-Step Implementation Guide
1. Editor Settings Registration
Add the setting to project_settings_service.gd:
SettingDefinition.new(ANDROID_MEDIATION_PREFIX + "network_name", TYPE_BOOL, false)
2. Public GDScript API Wrapper
Create <NetworkName>.gd inside platforms/godot_editor/addons/admob/gdscript/src/mediation/extras/<network_name>/:
- Must inherit
MobileSingletonPlugin. - Use type-safe
:=operators. - Register under class name
<NetworkName>. - Add a setup and usage example in Main.gd inside
_setup_mediation_adapters().
3. C# Wrapper Parity
Create <NetworkName>.cs in platforms/godot_editor/addons/admob/csharp/src/Mediation/Extras/<NetworkName>/:
- Match 1:1 API parity with the GDScript wrapper.
- Use
PascalCasefor method names, bridging to thesnake_caseGDScript plugin calls. - Add a setup and usage example in MainCSharpExample.cs inside
SetupMediationAdapters().
4. Android Native Implementation
- Register Module: Add
include ':src:mediation:<network_name>'toplatforms/android/settings.gradle. - Build Configuration: Create
build.gradlepulling dependencies from the GDScript config. - AndroidManifest: Create
src/main/AndroidManifest.xmlregistering yourorg.godotengine.plugin.v2.PoingGodotAdMob<NetworkName>metadata. - Kotlin Plugin Class: Implement
PoingGodotAdMob<NetworkName>(godot: Godot?)inheritingGodotPluginand exposing methods annotated with@UsedByGodot. - Addon Export configuration:
- Create
config/poing_godot_admob_<network_name>.gddeclaring your dependency coordinates (e.g.,"com.google.ads.mediation:applovin:x.y.z.w"). - Register the library name in export_plugin.gd (Android) arrays
KNOWN_LIBSandMEDIATION_LIBS.
- Create
5. iOS Native Implementation
- SCons Configuration: Modify SConstruct to add the new platform option to
pluginand include the path to your.xcframeworkdependencies inFRAMEWORKPATH. - iOS GDIP Config:
- Create
config/poing-godot-admob-<network_name>.gdipunderplatforms/ios/src/mediation/<network_name>/config/declaring SPM package rules. - Crucial SPM Tip: Swift Package Manager uses Semantic Versioning (
major.minor.patch). For 4-component mediation versions (e.g.,13.6.3.0), multiply the patch component by 100 (e.g., use13.6.300). - Create an identical copy under
platforms/godot_editor/ios/plugins/using theadmob_packagesarray format.
- Create
- Objective-C++ Wrapper:
- Implement
PoingGodotAdMob<NetworkName>.h&.mmreferencing<NetworkNameSDK/NetworkNameSDK.h>. - Implement
PoingGodotAdMob<NetworkName>Module.h&.mmto register the plugin singleton with the engine during initialization.
- Implement
6. Create Documentation Page
Create a new Markdown documentation file <network_name>.md under docs/mediate/integrate_partner_networks/:
- Document the supported integrations (bidding/waterfall) and ad formats.
- Detail SDK imports for both Android and iOS.
- Describe how to enable the plugin in both Project Settings and Export Presets.
- Provide GDScript and C# code snippets for GDPR, CCPA, and any custom SDK configuration methods (such as audio controls).
๐งช Validation & Compilation
Android
Verify module compilation by running:
./gradlew build
iOS Swift Packages
Verify Swift Package Manager dependency resolution:
swift package resolve
iOS compilation
Compile the static library using SCons:
scons plugin=<network_name> arch=arm64 target=debug
Full Addon Rebuild
Generate and package all binaries into the editor addon directory using the main build script:
./scripts/build_local.sh all <godot_version>
Logging & Diagnostics
- Optional singletons (
is_required := false): When a mediation plugin (like AppLovin) is disabled in Project Settings, the GDScript wrapper usespush_warningrather thanprinterr. - Logcat visibility: In mobile builds (Android/iOS) without a debugger attached, Godot's
push_warningis not outputted to standard console streams, meaning it will not appear inadb logcatlogs. To force-print missing singleton messages to logcat, you must temporarily setis_required := truein the adapter wrapper initialization (which usesprinterr).
๐ซ Constraints & Security
- No Browser Usage: Do NOT launch browser subagents to research versions or view documentation. Always use terminal-based commands (such as
curl,git ls-remote, or the nativeread_url_contenttool) to inspect packages, repositories, or documentation pages. - Consult Official Documentation: Before integrating any new mediation network, read the official Google AdMob mediation documentation for Android & iOS to ensure version compatibility. The URLs follow this pattern (replace
<network_name>with the target mediation name in lowercase, e.g.,vungle,bidmachine):- Android:
https://developers.google.com/admob/android/mediation/<network_name> - iOS:
https://developers.google.com/admob/ios/mediation/<network_name>
- Android:
- Dependency Coordinates: Consult the dependency version tables in the official guides to retrieve the correct adapter coordinate (e.g.,
com.google.ads.mediation:<network_name>:<version>). - Never Commit: Do not commit code or create branches unless explicitly instructed by the user.