AppsinityAPPSINITY
Desktop client

Licences and protected downloads

A protected release swaps its download button for Protected download and issues a per-device licence through the store API instead of serving a file directly.

Open Appsinity Studio

What the player sees

The buy panel's Protection row reads License protected - 2 devices - 72h offline with the listing's own values if it sets them. Those defaults — maxDevices: 2 and offlineGraceHours: 72 — are what a protected release gets unless configured otherwise.

Clicking Protected download requires a signed-in player. The panel status runs Checking Appsinity license... to License verified. or Protected download approved.; a stale session produces Sign in again before downloading this protected release.

Watch out: There is no licence management screen for players and none for you. They cannot see or release their device seats, and you cannot list who holds a licence.

The request chain

Because the ticket is the authorisation, the file URL is not the secret. A direct link to the stored object bypasses the check entirely — which is why protected releases must not have their object URL advertised anywhere.

  1. Issue. The page POSTs to /api/licenses/issue-download with a client-supplied deviceId and platform.
  2. Ticket. The API checks the licence, attaches a device within the limit, and returns a short-lived download ticket.
  3. Fetch. The browser retrieves the file through GET /api/licenses/download/<ticket>.
  4. Store. The licence, its devices and the ticket are recorded server-side.
Important: The deviceId comes from the browser. Clearing site data mints a new one and consumes another seat. Players will run out of devices, and the only remedy today is a support request.

Device limits and offline

Two seats is deliberately tight. Set expectations in the listing text rather than discovering it through a failed download.

ControlDefaultPractical effect
maxDevices2A desktop plus a laptop; a phone browser then fails
offlineGraceHours72How long a cached entitlement is trusted without re-checking
Device identityBrowser-generatedReinstall, incognito or a cleared profile costs a seat
Seat releaseNot self-serviceSupport action only

What DRM does and does not do

  • It gates the download. It cannot gate launch: nothing here talks to your executable.
  • It does not encrypt or watermark the file.
  • Once the file is on disk it is an ordinary copy, and re-running the game does not phone home.
  • There is no licence check inside the desktop client's library.
  • There is no refund, transfer or expiry mechanism attached to a licence.
Not available: If your threat model needs launch-time enforcement, that has to be inside your own build against your own server. Appsinity's licence layer is a store gate, not a runtime one.

Should you turn it on?

The honest answer for most titles on a free store is no. Protection adds a sign-in requirement, a seat limit and a support burden, and stops exactly zero determined copiers.

It is worth it when a release is expensive to produce, when you have a commercial agreement that expects it, or when you want the download to be attributable to an account so you can see who actually pulled the build.

Frequently asked questions

Can a player see which devices are licensed?

Not on Appsinity today. The records exist server-side; there is no interface for them.

Does turning protection off later break anything?

No. Unprotected downloads simply resolve the file directly; existing licence rows stop being consulted.

Is DRM configurable per build?

It is a property of the listing's download path, so it applies to the release the listing currently resolves to.

Need help?

Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]