Guide · Ad formats

Rewarded ads for Smart TV games: a remote-first guide

Rewarded ads are the one ad format players ask for. On a TV they need more care than on a phone: the player holds a remote with five buttons, sits three meters away, and may share the screen with family. This guide is how we place and build them in our own TV games.

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.

SofAds for 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.

Building a TV game or app? Join the early access.