Skip to content
Adam Probert

Professional work

Gating a game launcher behind proof of purchase

Adding paid downloads to a launcher built for free-to-play games.

Sheet
13 of 25
Period
2023
Kind
Platform
Org
Rocket Science Group

What it was

Every download path in the studio's launcher assumed the game was free. Their first paid title needed ownership checks across the launcher, backend and CDN. I worked on the Lambda entitlement checks, Akamai's gating around the files and the TypeScript and React launcher. We also added single-use vouchers for developers and beta testers. Launch day was an important part of the design, because almost no traffic could become the whole player base arriving within a few minutes.

Gating a game launcher behind proof of purchase
Three checks before a download
secure distribution: project diagram

Build

  • Lambda checks the player's entitlement before a download is issued. The check is stateless, so it can scale up for a premium unlock.
  • The download bytes go through Akamai. The entitlement service makes a small access decision and never carries the game files.
  • Akamai enforces access at the delivery layer, so guessing or sharing the file URL is insufficient.
  • The launcher checks the response before offering a download and tells the player why access was refused.
  • Single-use vouchers provide beta access without leaving permanent entitlements to withdraw later.
  • The paid path runs alongside the existing free-to-play downloads.

Key decisions

  • Lambda

    The authorisation request has very uneven demand. Lambda suited that better than keeping a fleet warm for a launch spike. Cold starts were acceptable before a large download.

  • Beta vouchers

    The codes could be used once, giving testers access without creating a permanent list of entitlements somebody would have to clean up.

  • Existing games

    The free-to-play path was already live. I added the paid checks beside it so we could work on the new title without changing how the existing games downloaded.

Lesson learned

A backend check still left the file URL to protect.the rest of it ↓

I initially went looking for one place to enforce access. The launcher is on the player's machine though, so they can change what it does. A backend check doesn't stop somebody going straight to the file URL. And if the CDN refuses a request, the player still needs to understand why their download didn't start. There was some pushback on repeating the checks. Explaining the job of each one helped us get past that, particularly the difference between telling a player they can download and actually protecting the file.

Contact

Say hello.

If you’re stuck on something or thinking about starting a project, I’m happy to chat it through.

Get in touch
  • Something you're building, or thinking about building
  • A problem you're stuck on and want another pair of eyes on
  • Anything on this site you want to know more about
  • A role or piece of work worth a conversation