Why rewarded ads fit TV games
A rewarded ad is a trade the player opts into: watch a video (or scan a code), get something in the game. That fits the living room better than any other format:
- Nothing interrupts play. The ad only runs when the player picks it, so it never lands in the middle of a jump.
- The TV is good at video. A full-screen video on a big screen is what TVs do best, unlike a banner nobody can click.
- It respects the people who don't want ads. They just don't press the button.
Where to place rewarded ads
Offer the reward at moments when the player already wants something:
- Continue after game over: "Watch an ad to keep your score and continue." A natural fit for arcade games.
- Extra life when the last one is lost.
- Double the coins on the level-complete screen.
- A hint in puzzle games, offered after a few failed attempts.
- A daily bonus on the start screen.
Make the offer one clearly focused button with the reward written on it ("Watch ad: +1 life"), and a second button to decline. Don't make "watch" the default focus on a screen where a fast OK press could start it by accident.
Remote UX: focus, OK and BACK
Every remote has a D-pad, OK and BACK. Some LG remotes add a pointer (the Magic Remote). The ad screen has to work with all of them:
- One focused action at a time, with a thick, visible focus ring. During a rewarded video that is the close button once closing is allowed.
- OK arrives as Enter (keyCode 13). A Magic Remote click on the button should do the same.
- BACK is keyCode 10009 on Samsung Tizen and 461 on LG webOS; Escape or Backspace elsewhere. BACK must always do something.
- "No reward if you close" written next to the close button, so ending early is an informed choice, not a surprise.
- Swallow the D-pad while the ad is up, so arrow presses don't move the game behind it.
In SofAds, BACK can end a rewarded video after a short abort_after period (3 seconds by default) and forfeits the reward; on a video that never started it exits at once.
Pause your render loop
Many TV games draw on a WebGL canvas with frameworks like Lightning or Blits. On low-end TV chips, a running render loop and a decoding video compete for the same GPU, and the video stutters. Stop your loop before the ad, start it again after:
SofAds.init({
appId: "sof_YOUR_APP_ID",
onPause: () => game.stopRenderLoop(), // before the ad renders
onResume: () => game.startRenderLoop(), // always follows onPause
});
Mute your game's own audio in the same hook, and restore it in onResume.
Scan-to-reward vs watch-to-reward
Watching is not the only way to earn a reward. With scan-to-reward, the ad shows a QR code; the player scans it with their phone, and the reward is granted as soon as the scan is registered.
- Watch-to-reward: the reward comes after the video completes. Predictable, needs no phone.
- Scan-to-reward: no 30-second wait for the player, and the advertiser gets a visit on the phone. It needs a phone nearby, and a clear Close button for players who don't want to scan.
Your game code doesn't need to care which one it gets: grant the reward in one callback. More on the QR side in QR code ads on TV.
Code example
A continue-after-game-over flow with the SofAds SDK. The reward amount shown on the ad screen can be set per placement in the dashboard, or overridden per call:
async function offerContinue() {
const r = await SofAds.showRewarded({
placement: "continue",
reward: { amount: 1, name: "continue" },
onReward: () => { game.continueFromCheckpoint(); }, // called at most once
});
if (!r.rewarded) game.showGameOver();
// r.status: "shown" | "no_fill" | "error" | "timeout"
// r.skipped is true when the player ended the ad early
}
Grant the reward in onReward, not after the promise resolves: with scan-to-reward, the reward arrives while the ad is still on screen.
Never-break-the-game rules
- Every ad call must end. Use a timeout on the request, on video start and on stalls. A black screen with no way out is the worst outcome on a TV.
- Plan for no fill. Sometimes no ad is available. Decide up front: hide the offer, or grant the reward anyway. Never show "watch an ad" and then nothing.
- Grant once. Guard the reward so a retry, a double callback or a reconnect can't grant it twice.
- Don't punish closing. A player who closes early loses the reward, nothing more.
- Cap frequency. Rewarded ads are opt-in, but a continue offer after every 20-second round wears thin.
Early access
How SofAds fits
The SofAds SDK implements the rules above for Tizen, webOS, Whale TV and Titan OS: one focused button, BACK and OK handling, "No reward if you close", onPause/onResume, a reward callback that fires at most once, and calls that always settle as shown, no_fill, error or timeout. Both watch-to-reward and scan-to-reward go through the same onReward. It is in early access for outside publishers.
Frequently asked questions
Can rewarded ads be skippable on TV?
The player can usually end a rewarded ad early, but then there is no reward. Show that clearly ("No reward if you close") next to the close button, and let BACK close the ad after a few seconds.
What happens if the user presses BACK during a rewarded ad?
It should close the ad without the reward and return to the game. On Tizen BACK is keyCode 10009, on webOS 461. In SofAds, BACK works after a short delay (3 seconds by default) and immediately if the video never started.
How long should a rewarded ad on TV be?
Keep it short. 15 and 30 seconds are the usual video ad lengths, and a TV viewer feels every second. Scan-to-reward ads can be shorter still, because the reward arrives on the scan.
Where should rewarded ads go in a TV game?
Where the player already wants something: a continue after game over, an extra life, double coins at the end of a level, a hint in a puzzle.