================================================================================ MONETIZEPRO PLUGIN — COMPLETE BLUEPRINT DEVELOPER GUIDE Plugin v1.1.0 | Alpha-XP | UE4 Editor ================================================================================ This file walks you through every Blueprint-exposed feature of MonetizePro. Follow each section in order the first time. After initial setup you can jump to whichever ad format you need. ──────────────────────────────────────────────────────────────────────────────── SECTION 0 — ENABLE THE PLUGIN ──────────────────────────────────────────────────────────────────────────────── 1. Open your UE4 project. 2. Main menu → Edit → Plugins 3. Search "MonetizePro" → tick Enabled → Restart Editor. ──────────────────────────────────────────────────────────────────────────────── SECTION 1 — PROJECT SETTINGS SETUP (do this ONCE before any Blueprint work) ──────────────────────────────────────────────────────────────────────────────── Main menu → Edit → Project Settings → scroll left panel to "Plugins" category → click "MonetizePro" You will see these sections: ┌─────────────────────────────────────────────────────────────────────┐ │ PROVIDER │ │ Active Ad Provider [dropdown] │ │ None = safe default / editor testing │ │ AdMob = Android + iOS │ │ AdsJumbo (Win64) = Windows desktop │ │ Unity Ads = (future) │ ├─────────────────────────────────────────────────────────────────────┤ │ APP IDs │ │ AdMob App ID (Android) → ca-app-pub-XXXXXXXX~YYYYYYYY │ │ AdMob App ID (iOS) → ca-app-pub-XXXXXXXX~YYYYYYYY │ │ AdsJumbo App ID (Win64) → your AdsJumbo App ID │ ├─────────────────────────────────────────────────────────────────────┤ │ AD UNITS ← THIS IS THE MAIN REGISTRY │ │ [+ Add Element] button creates a new row. │ │ Each row has: │ │ Name → any unique label YOU choose │ │ (e.g. MainMenu_Banner) │ │ Ad Type → Banner / Interstitial / Native / │ │ Rewarded / Rewarded Interstitial / │ │ App Open │ │ Unit ID (Windows) → AdsJumbo unit ID for Win64 │ │ Unit ID (Android) → AdMob unit ID for Android │ │ Unit ID (iOS) → AdMob unit ID for iOS │ ├─────────────────────────────────────────────────────────────────────┤ │ BANNER DEFAULTS │ │ Default Banner Size [dropdown] │ │ Banner 320×50 (phones + tablets) │ │ Large Banner 320×100 (phones + tablets) │ │ Medium Rectangle 300×250 (phones + tablets) │ │ Full Banner 468×60 (tablets) │ │ Leaderboard 728×90 (tablets) │ │ Default Banner Position [dropdown] │ │ Top Center / Bottom Center / Top Left / Top Right / │ │ Bottom Left / Bottom Right │ ├─────────────────────────────────────────────────────────────────────┤ │ PRIVACY │ │ GDPR Consent Granted [bool] │ │ COPPA Mode [bool] │ ├─────────────────────────────────────────────────────────────────────┤ │ DEBUG │ │ Test Mode [bool] ← keep TRUE during development │ │ Verbose Logging [bool] │ └─────────────────────────────────────────────────────────────────────┘ EXAMPLE — Add three ad units for a mobile game: Row 0: Name = "HomeScreen_Banner" Ad Type = Banner Unit ID (Android) = ca-app-pub-3940256099942544/6300978111 ← test ID Unit ID (iOS) = ca-app-pub-3940256099942544/2934735716 Unit ID (Windows) = (leave blank) Row 1: Name = "LevelFailed_Interstitial" Ad Type = Interstitial Unit ID (Android) = ca-app-pub-3940256099942544/1033173712 Unit ID (iOS) = ca-app-pub-3940256099942544/4411468910 Unit ID (Windows) = (leave blank) Row 2: Name = "ExtraLife_Rewarded" Ad Type = Rewarded Unit ID (Android) = ca-app-pub-3940256099942544/5224354917 Unit ID (iOS) = ca-app-pub-3940256099942544/1712485313 Unit ID (Windows) = (leave blank) Row 3: Name = "Shop_RewardedInterstitial" Ad Type = Rewarded Interstitial Unit ID (Android) = ca-app-pub-3940256099942544/5354046379 Unit ID (iOS) = ca-app-pub-3940256099942544/6978759866 Unit ID (Windows) = (leave blank) Row 4: Name = "AppLaunch_AppOpen" Ad Type = App Open Unit ID (Android) = ca-app-pub-3940256099942544/9257395921 Unit ID (iOS) = ca-app-pub-3940256099942544/5575463023 Unit ID (Windows) = (leave blank) Row 5: Name = "Article_Native" Ad Type = Native Unit ID (Android) = ca-app-pub-3940256099942544/2247696110 Unit ID (iOS) = ca-app-pub-3940256099942544/3986624511 Unit ID (Windows) = (leave blank) Press "Save" (Ctrl+S in the Settings window or close it — UE4 auto-saves). NOTE: The test IDs above are Google's official AdMob test unit IDs. Replace them with your real IDs before shipping. ──────────────────────────────────────────────────────────────────────────────── SECTION 2 — GETTING THE SUBSYSTEM IN BLUEPRINT ──────────────────────────────────────────────────────────────────────────────── The subsystem is your single access point for all ad operations. It is created automatically when the game starts — you never construct it. IN ANY BLUEPRINT (Level BP, Widget BP, Actor BP, GameMode, etc.): Right-click graph → search "MonetizePro" → select "Get MonetizePro Subsystem" (compact node title: "MonetizePro") This returns UMonetizeProSubsystem*. Drag a wire from its output pin to call any function below. TIP: Store the reference in a local variable named "MonetizePro" and reuse it across your graph to avoid duplicate Get nodes. ┌────────────────────┐ │ Get MonetizePro │──► [MonetizePro subsystem ref] │ Subsystem │ └────────────────────┘ ──────────────────────────────────────────────────────────────────────────────── SECTION 3 — BINDING EVENTS (do this BEFORE loading any ads) ──────────────────────────────────────────────────────────────────────────────── Bind events once — typically in Begin Play of your main HUD Widget or Game Instance Blueprint. From the [MonetizePro subsystem ref] pin: ┌─────────────────────────────────────────────────────────────────────┐ │ BIND EVENT — General lifecycle │ │ │ │ Drag → "Assign On Ad Loaded" │ │ Output pin "Ad Type" (EAdType enum) │ │ Use a Switch on EAdType to handle Banner / Interstitial / │ │ Rewarded / etc. in one binding. │ │ │ │ Drag → "Assign On Ad Failed" │ │ Output pins: Ad Type, Error Message (String) │ │ Print or log the Error Message for debugging. │ │ │ │ Drag → "Assign On Ad Shown" │ │ Output pin: Ad Type │ │ Good place to pause game audio / timer when a fullscreen appears.│ │ │ │ Drag → "Assign On Ad Closed" │ │ Output pin: Ad Type │ │ Resume game, grant reward result, reload the next ad, etc. │ │ │ │ Drag → "Assign On Ad Clicked" │ │ Output pin: Ad Type │ │ │ │ Drag → "Assign On Ad Impression" │ │ Output pin: Ad Type │ │ Fire analytics here if you track viewable impressions. │ ├─────────────────────────────────────────────────────────────────────┤ │ BIND EVENT — Reward │ │ │ │ Drag → "Assign On Reward Granted" │ │ Output pin: Reward (FAdReward struct) │ │ Break struct → Reward Type (String) │ │ → Reward Amount (Integer) │ │ THIS IS WHERE YOU GRANT THE IN-GAME REWARD (coins, lives, etc.) │ ├─────────────────────────────────────────────────────────────────────┤ │ BIND EVENT — Video Playback │ │ │ │ Drag → "Assign On Video Started" │ │ Output pin: Ad Type │ │ Mute game audio, hide UI overlays, etc. │ │ │ │ Drag → "Assign On Video Completed" │ │ Output pin: Ad Type │ │ Restore game audio. For rewarded ads the reward fires via │ │ OnRewardGranted — NOT here — because the user must explicitly │ │ dismiss the ad after the video ends. │ │ │ │ Drag → "Assign On Video Muted" │ │ Output pin: Ad Type │ │ │ │ Drag → "Assign On Video Unmuted" │ │ Output pin: Ad Type │ └─────────────────────────────────────────────────────────────────────┘ COMPLETE BIND EXAMPLE (Begin Play of HUD Widget): [Begin Play] │ ▼ [Get MonetizePro Subsystem] ─────────────────────────────────────────┐ │ │ ▼ (store in variable "AdsRef") │ [Assign On Ad Loaded] ── Event ──► [Switch on Ad Type] │ Banner → Show Banner │ Interstitial → (auto shown) │ Rewarded → (auto shown) │ │ │ [Assign On Ad Failed] ── Event ──► [Print String] (Error Message) │ │ │ [Assign On Ad Closed] ── Event ──► [Switch on Ad Type] │ Interstitial → Load Next │ Rewarded → (wait reward) │ App Open → Resume Game │ │ │ [Assign On Reward Granted] ─ Event ──► [Break FAdReward] │ Reward Type → (log/use) │ Reward Amount → Add Coins │ │ │ [Assign On Video Started] ─ Event ──► [Set Game Paused = True] │ [Assign On Video Completed] ─ Event ──► [Set Game Paused = False] │ ──────────────────────────────────────────────────────────────────────────────── SECTION 4 — BANNER ADS ──────────────────────────────────────────────────────────────────────────────── Functions available on the subsystem: ┌──────────────────────────────────────────────────────────────────┐ │ LOAD BANNER │ │ Node name: "Load Banner" │ │ Inputs: │ │ Target → MonetizePro subsystem ref │ │ Ad Unit Name → FName — type the Name you set in Settings │ │ e.g. "HomeScreen_Banner" │ │ Size → enum dropdown (default: Banner 320×50) │ │ Banner 320×50 phones + tablets │ │ Large Banner 320×100 phones + tablets │ │ Medium Rectangle 300×250 phones + tablets │ │ Full Banner 468×60 tablets │ │ Leaderboard 728×90 tablets │ │ Position → enum dropdown (default: Bottom Center) │ │ Top Center / Bottom Center / Top Left / Top Right / │ │ Bottom Left / Bottom Right │ │ Effect: requests a banner from the network. When ready, │ │ OnAdLoaded fires with Ad Type = Banner. │ ├──────────────────────────────────────────────────────────────────┤ │ SHOW BANNER │ │ Node name: "Show Banner" │ │ Call this AFTER receiving OnAdLoaded (Ad Type = Banner). │ │ Tip: put this inside your OnAdLoaded → Switch → Banner branch. │ ├──────────────────────────────────────────────────────────────────┤ │ HIDE BANNER │ │ Node name: "Hide Banner" │ │ Hides the banner without destroying it. Call Show Banner │ │ again to make it visible again instantly (no reload needed). │ ├──────────────────────────────────────────────────────────────────┤ │ DESTROY BANNER │ │ Node name: "Destroy Banner" │ │ Removes the banner completely from the screen and frees │ │ resources. You must Load Banner again after this. │ ├──────────────────────────────────────────────────────────────────┤ │ SET BANNER POSITION ← runtime repositioning │ │ Node name: "Set Banner Position" │ │ Input: Position → enum dropdown │ │ Moves a LIVE banner without reloading or flickering. │ │ Call at any time after Show Banner. │ │ │ │ Use case example: slide banner from bottom to top when a │ │ menu opens that overlaps the bottom of the screen. │ └──────────────────────────────────────────────────────────────────┘ BANNER FLOW BLUEPRINT GRAPH: [Begin Play or "Show Banner Button Pressed"] │ ▼ [Get MonetizePro Subsystem] │ ▼ [Load Banner] Ad Unit Name = "HomeScreen_Banner" Size = Large Banner (320×100) Position = Bottom Center ──── (meanwhile, in your OnAdLoaded binding from Section 3) ──── [OnAdLoaded fires] → Ad Type = Banner │ ▼ [Show Banner] ← banner now appears on screen ──── (later, if you want to move it) ──────────────────────────── [Some other event — e.g. Pause Menu Opened] │ ▼ [Set Banner Position] Position = Top Center ──── (when leaving the level) ─────────────────────────────────── [End Play / Level Transition] │ ▼ [Destroy Banner] ──────────────────────────────────────────────────────────────────────────────── SECTION 5 — INTERSTITIAL ADS ──────────────────────────────────────────────────────────────────────────────── Interstitials are full-screen image/video ads. Load them early, show them at natural transition points (level complete, game over, etc.) ┌──────────────────────────────────────────────────────────────────┐ │ LOAD INTERSTITIAL │ │ Node name: "Load Interstitial" │ │ Input: Ad Unit Name → e.g. "LevelFailed_Interstitial" │ │ Best practice: load during the PREVIOUS level, not at the │ │ transition point, so it is ready instantly when needed. │ ├──────────────────────────────────────────────────────────────────┤ │ SHOW INTERSTITIAL │ │ Node name: "Show Interstitial" │ │ Always check Is Ad Ready (Interstitial) before calling this. │ │ The ad is automatically destroyed after it closes. │ └──────────────────────────────────────────────────────────────────┘ INTERSTITIAL FLOW BLUEPRINT GRAPH: [Level Begin Play] │ ▼ [Get MonetizePro Subsystem] │ ▼ [Load Interstitial] Ad Unit Name = "LevelFailed_Interstitial" ──── (on level end event) ──────────────────────────────────────── [On Level End] │ ▼ [Is Ad Ready] → Ad Type = Interstitial │ ├─ TRUE → [Show Interstitial] → (OnAdClosed fires later) │ then in OnAdClosed: [Open Level "MainMenu"] │ └─ FALSE → [Open Level "MainMenu"] (skip if not ready) ──────────────────────────────────────────────────────────────────────────────── SECTION 6 — REWARDED ADS ──────────────────────────────────────────────────────────────────────────────── Rewarded ads are full-screen videos the user opts into watching in exchange for in-game items. The reward is only granted if the video plays fully. ┌──────────────────────────────────────────────────────────────────┐ │ LOAD REWARDED │ │ Node name: "Load Rewarded" │ │ Input: Ad Unit Name → e.g. "ExtraLife_Rewarded" │ ├──────────────────────────────────────────────────────────────────┤ │ SHOW REWARDED │ │ Node name: "Show Rewarded" │ │ Only call when Is Ad Ready (Rewarded) = true. │ └──────────────────────────────────────────────────────────────────┘ CALLBACK ORDER for rewarded ads: 1. OnAdShown ← video begins 2. OnVideoStarted ← playback confirmed 3. OnVideoCompleted ← user watched to the end 4. OnRewardGranted ← GRANT YOUR REWARD HERE (Reward Type + Amount) 5. OnAdClosed ← user dismisses the post-video screen REWARDED FLOW BLUEPRINT GRAPH: [Watch Ad Button Pressed] │ ▼ [Is Ad Ready] → Ad Type = Rewarded │ ├─ TRUE → [Show Rewarded] │ └─ FALSE → [Show "Ad not ready yet" message] [Load Rewarded] ← pre-fetch for next time Ad Unit Name = "ExtraLife_Rewarded" ──── (in Begin Play — bind events from Section 3) ─────────────── OnRewardGranted → [Break FAdReward] Reward Type → (your reward type string) Reward Amount → [Add to Player Lives variable] [Show Reward popup "You earned X coins!"] OnAdClosed → Ad Type = Rewarded → [Load Rewarded "ExtraLife_Rewarded"] ← reload immediately → [Set Game Paused = False] ──────────────────────────────────────────────────────────────────────────────── SECTION 7 — REWARDED INTERSTITIAL ADS ──────────────────────────────────────────────────────────────────────────────── Like rewarded ads but shown without the user opting in first. AdMob shows them at natural break points. They still grant a reward. Requires: AdMob account allowlisting (see Google's publisher requirements). ┌──────────────────────────────────────────────────────────────────┐ │ LOAD REWARDED INTERSTITIAL │ │ Node name: "Load Rewarded Interstitial" │ │ Input: Ad Unit Name → e.g. "Shop_RewardedInterstitial" │ ├──────────────────────────────────────────────────────────────────┤ │ SHOW REWARDED INTERSTITIAL │ │ Node name: "Show Rewarded Interstitial" │ │ Check Is Ad Ready (Rewarded Interstitial) first. │ └──────────────────────────────────────────────────────────────────┘ BLUEPRINT GRAPH — same pattern as Rewarded (Section 6). Reward is still delivered via OnRewardGranted. ──────────────────────────────────────────────────────────────────────────────── SECTION 8 — APP OPEN ADS ──────────────────────────────────────────────────────────────────────────────── App Open ads appear when the user brings the app to the foreground. Pre-load on startup; show when the app resumes from background. ┌──────────────────────────────────────────────────────────────────┐ │ LOAD APP OPEN │ │ Node name: "Load App Open" │ │ Input: Ad Unit Name → e.g. "AppLaunch_AppOpen" │ ├──────────────────────────────────────────────────────────────────┤ │ SHOW APP OPEN │ │ Node name: "Show App Open" │ │ Check Is Ad Ready (App Open) before showing. │ └──────────────────────────────────────────────────────────────────┘ APP OPEN FLOW BLUEPRINT GRAPH: [Game Instance Begin Play] │ ▼ [Load App Open] Ad Unit Name = "AppLaunch_AppOpen" ──── (bind OnApplicationReactivated in Game Instance) ─────────── [On Application Reactivated] ← built-in UE4 event │ ▼ [Is Ad Ready] → Ad Type = App Open │ ├─ TRUE → [Show App Open] │ └─ FALSE → [Load App Open "AppLaunch_AppOpen"] OnAdClosed → Ad Type = App Open → [Load App Open "AppLaunch_AppOpen"] ← reload ──────────────────────────────────────────────────────────────────────────────── SECTION 9 — NATIVE ADS ──────────────────────────────────────────────────────────────────────────────── Native ads are rendered using your own UI components. MonetizePro loads the ad data; you place it into your Widget Blueprint. ┌──────────────────────────────────────────────────────────────────┐ │ LOAD NATIVE │ │ Node name: "Load Native" │ │ Input: Ad Unit Name → e.g. "Article_Native" │ │ When loaded, OnAdLoaded fires with Ad Type = Native. │ │ NOTE: Native is not supported on Win64/AdsJumbo. │ └──────────────────────────────────────────────────────────────────┘ NATIVE FLOW BLUEPRINT GRAPH: [Widget Begin Construct] │ ▼ [Load Native] Ad Unit Name = "Article_Native" OnAdLoaded → Ad Type = Native → [Set Visibility on NativeAdContainer = Visible] → (populate your text/image elements from the SDK) ──────────────────────────────────────────────────────────────────────────────── SECTION 10 — IS AD READY (guard before every Show call) ──────────────────────────────────────────────────────────────────────────────── Always check readiness before calling Show to avoid crashes or SDK errors. Node name: "Is Ad Ready" Input: Ad Type → enum dropdown Output: bool (true = loaded and ready to show) ┌──────────────────────────────────────────────────────────────────┐ │ [Is Ad Ready] ─ Ad Type = Rewarded ─► TRUE → [Show Rewarded] │ │ FALSE → show retry UI │ └──────────────────────────────────────────────────────────────────┘ ──────────────────────────────────────────────────────────────────────────────── SECTION 11 — PRIVACY CONTROLS ──────────────────────────────────────────────────────────────────────────────── Call these BEFORE loading any ads, ideally right after getting the subsystem and AFTER the user accepts/declines your consent dialog. ┌──────────────────────────────────────────────────────────────────┐ │ SET GDPR CONSENT │ │ Node name: "Set GDPR Consent" │ │ Input: bConsent (bool) │ │ True = user granted consent for personalised ads │ │ False = serve non-personalised ads only │ ├──────────────────────────────────────────────────────────────────┤ │ SET COPPA COMPLIANCE │ │ Node name: "Set COPPA Compliance" │ │ Input: bIsChild (bool) │ │ True = treat as child-directed content (no personal data) │ │ False = normal adult audience │ └──────────────────────────────────────────────────────────────────┘ PRIVACY FLOW BLUEPRINT GRAPH: [User taps "Accept" on GDPR popup] │ ▼ [Set GDPR Consent] bConsent = True │ ▼ [Load Banner "HomeScreen_Banner"] ← first ad load after consent ──────────────────────────────────────────────────────────────────────────────── SECTION 12 — UTILITY NODES ──────────────────────────────────────────────────────────────────────────────── These are pure (no execution pin) nodes you can call anywhere. ┌──────────────────────────────────────────────────────────────────┐ │ GET MONETIZEPRO VERSION (Category: MonetizePro|Utility) │ │ Returns: String e.g. "1.1.0" │ │ Use in credits screen, debug HUD, analytics events. │ ├──────────────────────────────────────────────────────────────────┤ │ IS MONETIZATION SUPPORTED (Category: MonetizePro|Utility) │ │ Returns: bool │ │ True on Win64 (AdsJumbo), Android, iOS. │ │ False on editor without a configured provider, console, etc. │ │ Use to hide "Watch Ad" buttons on unsupported platforms. │ ├──────────────────────────────────────────────────────────────────┤ │ GET ACTIVE PROVIDER NAME (Category: MonetizePro|Utility) │ │ Returns: String e.g. "AdMob", "AdsJumbo v2.1.0", "None" │ │ Useful for debug overlays. │ ├──────────────────────────────────────────────────────────────────┤ │ GET AD UNIT ID BY NAME (Category: MonetizePro|Utility) │ │ Inputs: Ad Unit Name (FName), Ad Type (enum) │ │ Returns: String — the raw Unit ID for the current platform │ │ Use for logging, third-party SDK bridges, or debug display. │ └──────────────────────────────────────────────────────────────────┘ UTILITY EXAMPLE — hide Watch Ad button on unsupported platforms: [Widget Pre-Construct] │ ▼ [Is Monetization Supported] │ ├─ TRUE → [Set Visibility: WatchAdButton = Visible] └─ FALSE → [Set Visibility: WatchAdButton = Collapsed] ──────────────────────────────────────────────────────────────────────────────── SECTION 13 — FULL RECOMMENDED STARTUP SEQUENCE ──────────────────────────────────────────────────────────────────────────────── Use your GAME INSTANCE Blueprint for this sequence so it runs once for the entire session regardless of level changes. [Event Begin Play] (Game Instance) │ ▼ [Is Monetization Supported?] │ ├─ FALSE → (stop, skip all ad setup) │ └─ TRUE │ ▼ [Get MonetizePro Subsystem] → Store as "AdsRef" variable │ ▼ ── Bind ALL events (Section 3) ── [Assign On Ad Loaded] [Assign On Ad Failed] [Assign On Ad Shown] [Assign On Ad Closed] [Assign On Reward Granted] [Assign On Video Started] [Assign On Video Completed] │ ▼ ── Set privacy BEFORE any loads ── [Set GDPR Consent] bConsent = (your consent variable) [Set COPPA Compliance] bIsChild = False │ ▼ ── Pre-load all ads ── [Load Banner] "HomeScreen_Banner" [Load Interstitial] "LevelFailed_Interstitial" [Load Rewarded] "ExtraLife_Rewarded" [Load Rewarded Interstitial] "Shop_RewardedInterstitial" [Load App Open] "AppLaunch_AppOpen" ──────────────────────────────────────────────────────────────────────────────── SECTION 14 — EVENT REFERENCE CARD ──────────────────────────────────────────────────────────────────────────────── Event Output Pins When It Fires ───────────────────── ─────────────────────── ────────────────────────────── On Ad Loaded Ad Type Ad downloaded and ready On Ad Failed Ad Type, Error Message Network / SDK error On Ad Shown Ad Type Fullscreen ad became visible On Ad Closed Ad Type User dismissed the ad On Ad Clicked Ad Type User tapped the ad On Ad Impression Ad Type Ad counted as viewable On Reward Granted Reward (Type, Amount) User earned the reward On Video Started Ad Type Video playback begins On Video Completed Ad Type Video played to the end On Video Muted Ad Type User muted the video On Video Unmuted Ad Type User unmuted the video ──────────────────────────────────────────────────────────────────────────────── SECTION 15 — FUNCTION REFERENCE CARD ──────────────────────────────────────────────────────────────────────────────── Function Category Inputs ────────────────────────── ────────────────────────── ──────────────────────── Load Banner MonetizePro|Banner Name, Size, Position Show Banner MonetizePro|Banner — Hide Banner MonetizePro|Banner — Destroy Banner MonetizePro|Banner — Set Banner Position MonetizePro|Banner Position (enum) Load Interstitial MonetizePro|Interstitial Name Show Interstitial MonetizePro|Interstitial — Load Native MonetizePro|Native Name Load Rewarded MonetizePro|Rewarded Name Show Rewarded MonetizePro|Rewarded — Load Rewarded Interstitial MonetizePro|RwdInterstitial Name Show Rewarded Interstitial MonetizePro|RwdInterstitial — Load App Open MonetizePro|App Open Name Show App Open MonetizePro|App Open — Is Ad Ready MonetizePro Ad Type → bool Get Active Provider Name MonetizePro — → String Get Ad Unit ID By Name MonetizePro Name, Ad Type → String Set GDPR Consent MonetizePro|Privacy bool Set COPPA Compliance MonetizePro|Privacy bool Get MonetizePro Version MonetizePro|Utility — → String Is Monetization Supported MonetizePro|Utility — → bool Get Active Provider Name MonetizePro|Utility — → String Get MonetizePro Subsystem MonetizePro WorldContext → Subsystem ──────────────────────────────────────────────────────────────────────────────── SECTION 16 — TIPS AND COMMON MISTAKES ──────────────────────────────────────────────────────────────────────────────── ✓ Always bind events BEFORE loading any ad. ✓ Always check Is Ad Ready before calling any Show function. ✓ Reload ads in OnAdClosed — ads are single-use and must be reloaded. ✓ Pre-load during idle time, not right before you need to show. ✓ Set GDPR/COPPA before the first Load call. ✓ Keep Test Mode = True while developing. Set to False before shipping. ✓ Use unique FName values per ad unit — duplicates silently use first match. ✗ Do NOT call Show before OnAdLoaded fires. ✗ Do NOT call Show without checking Is Ad Ready first. ✗ Do NOT load ads every frame — load once, show once, then reload once. ✗ Do NOT hard-code Unit ID strings in Blueprint — always use the Name lookup system in Project Settings. ✗ Do NOT show ads during gameplay on Rewarded without user initiation. ──────────────────────────────────────────────────────────────────────────────── SECTION 17 — PLATFORM SUPPORT MATRIX ──────────────────────────────────────────────────────────────────────────────── Format Win64 Android iOS ─────────────────── ──────── ──────── ──────── Banner YES YES YES Interstitial YES YES YES Rewarded YES YES YES Rewarded Interstitial NO YES YES App Open NO YES YES Native NO YES YES Win64 "YES" requires AdsJumbo.lib + AdsJumbo.dll placed in ThirdParty/AdsJumbo/Win64/Lib/ and /Bin/ — until then all Win64 calls log a stub warning and no-op safely. Android requires AdMob SDK 22.6.0 (injected automatically via UPL). iOS requires GoogleMobileAds.xcframework v13.1.0 (already placed in ThirdParty/AdMob/IOS/ in this plugin). ================================================================================ END OF GUIDE ================================================================================