21 Eylül 2026 Pazartesi

From CPI Traps to High-Retention Players: Scaling Mobile Games with Firebase In-App Actions and Google Ads (UAC 2.0)




From CPI Traps to High-Retention Players: Scaling Mobile Games with Firebase In-App Actions and Google Ads (UAC 2.0)

Every indie game developer who launches a mobile title eventually faces the Cost-Per-Install (CPI) Paradox:

You launch a paid user acquisition campaign, celebrate a flood of cheap downloads, and watch your Google Play install counter tick upward. But when you open your analytics dashboard 48 hours later, the cold reality sets in:

1,000 Installs ──► 500 Immediate Uninstalls (< 2 mins) ──► 50 Level 1 Completions ──► 5 Retained Players

Over 50% of acquired users deleted the game before finishing the very first level.

If you are running a standard Google Ads App Campaign for Installs (UAC 1.0) with basic CPI bidding, Google’s machine learning algorithm is doing exactly what you instructed it to do: find the cheapest possible users who will tap "Install" on Google Play. Unfortunately, the cheapest users on the ad network are often reward-ad hunters, accidental clickers, or bot-adjacent accounts who never intend to engage with your game.

In this article, we share our real-world engineering and marketing architecture from our fast-paced retro tank action game, Blocked: Pixel Panzer (developed with MonoGame and C# by Arar Games). We will explore how we bridged device-side telemetry with Google Analytics 4 (GA4) and Google Ads App Campaigns for In-App Actions (UAC 2.0) to stop buying empty installs and start acquiring dedicated, high-retention players.


1. Diagnosing the Funnel: What Live Analytics Taught Us

Before spending a single dollar on ad networks, you must know where players drop off.

In Blocked: Pixel Panzer, our telemetry logs core gameplay lifecycles asynchronously to Firebase:

  • first_open
  • screen_view (tracking 40+ custom MonoGame screens)
  • level_completed (with parameters level_number, score, duration_seconds)
  • skill_upgraded
  • boss_fight_result
  • app_remove (native OS uninstall signal)

When we analyzed uninstalled sessions in GA4 Path Exploration, the data was stark:

  • Out of 63 uninstalled devices examined, ~30 users uninstalled before ever completing Level 1.
  • 14 users churned after upgrading their initial skills inside the gameplay loop.
  • The maximum progress reached among churned users was Level 10 (the first World Boss).
[ User Installs ] 
       │
       ├──► 48% Churn: Drop before completing Level 1  <── (The CPI Waste Zone)
       │
       ├──► 30% Engagement: Upgrade Skills & Reach Level 2-3
       │
       └──► 22% Core Retention: Reach Boss (Level 10) and Meta-Game

The takeaway was undeniable: Paying for raw installs is throwing money into the churn zone.

To build a sustainable game economy, our advertising bidding model needed to optimize for users whose behavioral signature matched players who actually conquer Level 1 and progress toward Level 3.


2. The Mechanics of UAC 2.0: Optimizing for In-App Actions

Google Ads App Campaigns (Universal App Campaigns) come in distinct optimization flavors:

Campaign Model Bidding Focus What the Algorithm Learns Best For
UAC 1.0 (Installs) Maximize Installs / Target CPI Profiles of users who frequently install new apps Early store launch, volume bursts
UAC 2.0 (In-App Actions) Target CPA (Cost-per-Action) Profiles of users likely to complete a specific in-game milestone Sustainable retention, meta-game growth
UAC 2.5 (Value / ROAS) Target ROAS Profiles of high spenders (whales) Games with heavy in-app purchase monetization

Under UAC 2.0 (In-App Actions), you set a Target Cost Per Action (tCPA)—for example, $0.20 per Level 1 completion.

Google’s Smart Bidding neural network then analyzes hundreds of behavioral signals across Google Play, YouTube, Google Search, and millions of apps on the Google Display Network (AdMob). It bids aggressively only when an ad impression matches a user whose historical habits indicate they will download the game, play past the tutorial, and finish Level 1.


3. Step-by-Step Implementation: From C# Telemetry to Google Ads

Here is the exact technical pipeline we used to turn in-game achievements into actionable advertising conversion goals.

Step 1: Device-Side Telemetry Hook (MonoGame / C#)

In Blocked.Shared/Managers/AnalyticsManager.cs, whenever the player clears a combat zone, the game calculates score, damage, and time, then dispatches level_completed without blocking the 60 FPS render thread:

public static void LogLevelCompleted(int level, int score, int totalScore, string rank,
                                     int durationSeconds, int damageTaken,
                                     int blocksBroken, int enemiesKilled, int suppliesCollected)
{
    try
    {
        _payload.Clear();
        _payload[AnalyticsParams.LevelNumber] = level;
        _payload[AnalyticsParams.Score] = score;
        _payload[AnalyticsParams.TotalScore] = totalScore;
        _payload[AnalyticsParams.DurationSeconds] = durationSeconds;
        _payload[AnalyticsParams.IsBoss] = IsBossLevel(level) ? 1 : 0;
        
        // Dispatches to Android Firebase SDK via JNI (non-blocking SQLite buffer)
        _service.LogEvent(AnalyticsEvents.LevelCompleted, _payload);
    }
    catch (Exception ex)
    {
        // Telemetry must never crash gameplay
        Warn(ex);
    }
}

Step 2: GA4 Event Synthesis (No Client App Update Required)

Google Ads cannot directly bid on parameter sub-queries like level_completed WHERE level_number == 1 out of the box. However, Google Analytics 4 allows you to synthesize custom events in real time from incoming telemetry without pushing an app store update:

  1. In the GA4 Console, navigate to Admin ➔ Data display ➔ Events.
  2. Click Create event and configure:
    • Custom event name: level_1_completed
    • Matching conditions:
      • event_name equals level_completed
      • level_number equals 1
    • Check "Copy parameters from the source event" to preserve scores and session metrics.
  3. Save the configuration.
  4. On the Events or Key events tab, locate level_1_completed and toggle "Mark as key event" to active.

Now, whenever any player on Earth beats Level 1, GA4 automatically emits a dedicated level_1_completed conversion event.

Step 3: Importing Conversion Actions into Google Ads

  1. Open Google Ads (ads.google.com).
  2. Navigate to Goals ➔ Conversions ➔ Summary.
  3. Click New conversion action ➔ Import ➔ Google Analytics 4 properties (Firebase).
  4. Select level_1_completed from the list.
  5. Set the category to Engagement or Level achieved.
  6. Set the conversion action to Primary so Smart Bidding actively optimizes toward it.
[ Mobile Game: Level 1 Cleared ]
                │
                │  LogEvent("level_completed", { level_number: 1 })
                ▼
[ Firebase Analytics Engine ]
                │
                │  GA4 Rule: Synthesize "level_1_completed"
                ▼
[ GA4 Key Event (Conversion) ]
                │
                │  Google Ads Linked Integration
                ▼
[ Google Ads Smart Bidding Engine (UAC 2.0 Target CPA) ]

4. Overcoming the Cold-Start Problem: The Funnel Strategy

A common mistake indie developers make when transitioning to UAC 2.0 is aiming too deep into the game too early.

The Machine Learning Volume Rule

Google Ads Smart Bidding algorithms require a minimum statistical threshold to train effectively:

  • Golden Rule: A campaign should generate at least 10 to 20 target in-app conversions per day to exit the "Learning Phase" and achieve optimal bidding efficiency.

In our early analytics audit, we had created an audience named Quality_Players_Level_3 (players who cleared Level 3 or higher), which had accumulated 17 players.

If we had launched a campaign targeting Level 3 immediately:

  • Generating 15 Level 3 conversions daily would require massive upfront ad spend.
  • With only 17 historical seeds, the algorithm’s lookalike sample size was too narrow, risking volatile bidding spikes or zero delivery ("Too small to serve").

The Two-Stage Scalpel Solution

Instead of an all-or-nothing approach, we adopted a phased funnel:

flowchart TD
    A["Phase 1: Scale Level 1 Completed"] --> B["Acquires engaged players at low tCPA"]
    B --> C["Filters 100% of non-playing install churners"]
    C --> D["Fills 'Quality_Players_Level_3' Audience (100+ players)"]
    D --> E["Phase 2: Shift Target CPA to Level 3 / Skill Upgrades"]
  1. Stage 1 (Volume & Hygiene): Optimize for level_1_completed. Because 50-60% of genuine gamers can beat Level 1, the campaign easily secures 20+ conversions daily at a low target CPA ($0.15 - $0.25). This instantly purges low-quality install farms while building an active user base.
  2. Stage 2 (Refinement): As hundreds of players complete Level 1, a steady percentage naturally progresses to Level 3, 5, and 10. Once the Quality_Players_Level_3 pool exceeds 100-200 active users, the campaign target can safely transition to Level 3 or meta-game milestones (skill_upgraded) for maximum lifetime value.

5. Market Selection & Geographical Arbitrage

Bidding on Tier-1 markets (USA, UK, Germany) with an uncalibrated campaign can exhaust small indie budgets within hours ($1.50 - $4.00 per action).

For our initial UAC 2.0 test run of Blocked: Pixel Panzer, we selected a strategic cluster of four high-volume, cost-efficient, and gaming-rich markets:

  1. Turkey (TR): Strong local player base, high engagement with arcade/action titles, and low acquisition costs.
  2. Brazil (BR): One of the largest Android gaming markets on Earth. Brazilian mobile players have immense passion for retro aesthetics and arcade combat.
  3. Mexico (MX): The second-largest Latin American gaming hub, offering dense volume and loyal player communities.
  4. Poland (PL): An ideal European testbed—significantly higher AdMob eCPM monetization than South America, yet substantially lower user acquisition costs than Western Europe.

Native Localization: The Secret Multiplier

Running ads in foreign markets only converts if the in-game experience matches the store listing. In Blocked: Pixel Panzer, all four markets are supported with native localization out of the box:

  • tr.json (Turkish)
  • pt-BR.json (Brazilian Portuguese)
  • es-419.json (Latin American Spanish)
  • pl.json (Polish)

When a player from São Paulo or Warsaw taps an ad, installs the game, and hears their native tongue immediately upon launch, immersion is instantaneous—drastically boosting Level 1 completion rates.

Location Targeting Pro-Tip: In Google Ads Location settings, always switch the default "Presence or interest" to "Presence: People in or regularly in your included locations". This ensures your budget is exclusively spent on users physically residing in your target countries, eliminating traffic from foreign VPNs or unrelated search queries.


6. Creative Assets: Why Video Multiplies, Never Cannibalizes

When assembling Google Ads creative groups, developers often ask: “If I add gameplay video, will it overshadow my polished screenshots?”

The answer is an emphatic no. Google Ads operates across distinct multi-channel inventories:

  • Headlines & Screenshots: Dominate Google Play search queries, recommended apps trays, and display banner networks.
  • Video: Unlocks the massive inventory of YouTube Shorts, in-stream pre-rolls, and rewarded video placements across other popular mobile games.

In high-intensity games like Blocked: Pixel Panzer, static screenshots can show pixel art, but only video can demonstrate the feel of dodging bullet-hell swarms, detonating explosive chain reactions, and destroying enemy fighter jets.

Players who install after watching genuine gameplay video already understand the controls and mechanics. Consequently, their conversion rate on level_1_completed is dramatically higher than users acquired through static graphics alone.


7. Summary Checklist for Indie Developers

Before launching your next mobile game ad campaign, run through this architectural checklist:

  • Verify In-Game Telemetry: Ensure level_completed and level milestones are logged with clean parameters and zero main-thread GC allocations.
  • Synthesize GA4 Key Events: Create dedicated events (e.g. level_1_completed) and mark them as Key Events in GA4.
  • Import to Google Ads: Link Firebase and Google Ads, import the action, and mark it as Primary.
  • Bidding Focus: Choose In-App Actions (Target CPA) rather than raw install volume.
  • Calibrate Starting CPA: Set realistic target CPAs ($0.15 - $0.30 depending on target country tiers) and allow at least 3-4 days of uninterrupted machine learning.
  • Stage Your Funnel: Start with an early, achievable milestone (Level 1) to build conversion velocity, then graduate to deeper progression targets.

By shifting your mindset from buying downloads to buying gameplay milestones, you turn advertising from an unpredictable expense into a repeatable, high-retention growth engine.


Written by the engineering team at Arar Games / Mayhemco. Explore Blocked: Pixel Panzer on Google Play to experience our fast-paced retro arcade combat firsthand.


Hashtags & SEO Topics

#BlockedPixelPanzer #ArarGames #Mayhemco #PaintTrek #MonoGame #GoogleAds #FirebaseAnalytics #GA4 #MobileGameDev #UserAcquisition #GameMarketing #SmartBidding #TargetCPA #InAppActions #IndieGameDev #GameAnalytics #AndroidDev




Hiç yorum yok:

Yorum Gönder