Hi, I'm Josep. I’ve been developing mobile games for the past 14 years, living and coding under the sun in Spain.
For my new game, Morning Words (shipping for Shipaton 2026), I wanted a clean, straightforward ad setup: show ads without annoying players, protect my real-money shop sales, and keep the game fun to play.
Morning Words is a cozy word puzzle game where players connect adjacent letter tiles to clear goals like crates, cheese, and grass across a colorful saga map.Designed as a relaxing morning brain workout, it pairs classic word-search mechanics with casual progression and smart, player-first monetization.
In Morning Words, ads are divided into three clear categories:
‘2. Why I Moved the Rewarded Ad Out of the Shop
In many mobile games, you open the coin shop and see a button: "Watch an Ad for 50 Free Coins".
It sounds innocent, but from a design perspective, it is a huge trap.
When a player taps the Shop button, they have buying intent. They are actively thinking about spending $1.99, $4.99, or more.
If you put a free video ad right in front of them, you give them an easy way out. Instead of buying a $2.99 coin pack, they tap the free ad, get a few coins, and leave. You just traded a $3 purchase for a 2-cent ad impression!
1. Inside the Shop: Clean and premium. Only real-money packs powered by RevenueCat. No ads to distract the player.
2.After the Shop Closes: If the player leaves the shop without buying anything and still needs coins to continue, I can show a rewarded ad offer after they return to the game screen.
This protects cash sales from paying players while still giving non-paying players a way to progress.
I don't show an interstitial after every single level. That drives players crazy and makes them delete the game. Instead, I use a simple decision flow:
Figure 1: Unity lifecycle-style flowchart for between-level interstitial eligibility.
Here is one of the most frustrating things that can happen in mobile games:
That is an immediate recipe for a rage-quit.
"If a player just voluntarily gave you 30 seconds of high-value attention, treat it as their ad for this interval and give them a clean transition to the next level."
Whenever a player finishes watching an end-of-level rewarded video, my code calls a single method:
LevelPlayAdManager.Instance.ResetInterstitialCooldown();
This resets the timer and the 3-level counter to zero.
Here is a neat trick I implemented using an idle detector in Unity (IdleAdPlayer.cs).
Have you ever been playing a puzzle game, put your phone down on the table to make a coffee or answer the door, and left the screen on?
In Morning Words, if the game detects that the screen has been completely untouched for a while (idle state):
• **Zero Gameplay Disruption:**The player wasn't actively solving a puzzle anyway.
•Bonus Ad Impression: You monetize idle downtime that would have otherwise generated zero revenue.
Some players try to be smart: when an interstitial starts, they swipe up, kill the game app, and reopen it 5 seconds later to avoid waiting for the ad to finish.
Figure 2: Ad-In-Flight tracking state machine detecting force-close bypasses vs. natural session drop-offs.
To handle this, I created a simple class called AdAbandonmentTracker:
// When the ad opens:
_abandonmentTracker.MarkAdStarted("interstitial", currentLevel);
// When the ad closes normally:
_abandonmentTracker.MarkAdCompleted();
When the app boots on the next session, I check if the ad was left running. If it was, I measure how much time passed:
WasLastAdBypassed = true) and can queue an on-login ad on the map screen. Once players realize force-closing doesn't skip the ad, they stop closing the app.Rewarded ads are beloved by players when the exchange of value is fair. As Morning Words grows, here are the new rewarded placements I'm adding next: