# Pubblica un gioco in HTML semplice dalla tua app di IA

Pubblica un file HTML autonomo fino a 10 MiB con upload_game: cosa ci sta, il mini catalogo, la visibilità, gli aggiornamenti e quando passare a un pacchetto.

Source: https://www.playdrop.ai/it/create/learn/html-games

Il percorso semplice pubblica un normale gioco HTML, come un arcade su canvas o un puzzle nel DOM, con una sola chiamata a `upload_game`. Non richiede l’SDK di PlayDrop, né una cartella di build, né file aggiuntivi, e restituisce un link che chiunque può aprire su un telefono o un computer.

## Quando va bene il percorso semplice

- L’intero gioco è un solo file HTML di al massimo 10 MiB (10.485.760 byte UTF-8), con script, stili, immagini e suoni incorporati.
- È un normale gioco da browser: non chiama l’SDK di PlayDrop, quindi niente salvataggi cloud, classifiche, obiettivi, condivisione, gruppi, acquisti o annunci.
- Non richiede file separati: niente immagini o video della scheda e nessun server di gioco.

Se una di queste condizioni non è vera, usa invece un [pacchetto](https://www.playdrop.ai/it/create/learn/packaging). Mantieni le funzioni che il tuo utente ha chiesto; non rimuoverle mai e non fondere in un solo file un gioco composto da più file per farlo rientrare in questo percorso. Il caricamento rifiuta chiamate all’SDK, codice server e campi del catalogo riservati ai pacchetti con `advanced_upload_required`.

## Invia il gioco

Chiama `upload_game` con un nuovo `requestId`, l’HTML completo e un mini catalogo per un solo gioco:

```json
{
  "requestId": "moon-jump-first-upload",
  "html": "<!doctype html><html><head><meta charset=\"utf-8\"><title>Moon Jump</title></head><body>…</body></html>",
  "catalogue": {
    "apps": [{
      "name": "moon-jump",
      "displayName": "Moon Jump",
      "description": "Jump between lunar platforms and reach the flag.",
      "controls": "Tap or press Space to jump.",
      "tags": ["game-genre/casual"],
      "types": ["solo"],
      "controller": { "support": "off" },
      "authMode": "NONE",
      "primarySurface": "MOBILE_PORTRAIT"
    }]
  }
}
```

- `name` è lo slug permanente del gioco: da 1 a 100 lettere minuscole, cifre o trattini.
- `tags` deve includere un genere come `game-genre/casual`; vedi [generi e tag](https://www.playdrop.ai/it/create/learn/tags).
- `types` dichiara come si gioca; un gioco in un solo file di solito è `["solo"]`. Le dimensioni dei gruppi e il gioco online sono riservati ai pacchetti.
- `controller.support` indica il supporto reale ai controller, compreso `off`.
- `authMode` decide l’accesso: `NONE` o `OPTIONAL` permette a chiunque di giocare; se omesso, il valore predefinito è `REQUIRED`. Includilo a ogni aggiornamento.
- `primarySurface` indica l’orientamento per cui è pensato il gioco; i caricamenti semplici compaiono per desktop, orizzontale e verticale.

Gli altri campi accettati sono `subtitle`, `emoji`, `color`, `license`, `creation`, `releaseNotes`, `inspirationPrompt`, `makingOf`, `sourceRepository`, `sourceLocale`, `offlineSupported` e `instant`. PlayDrop assegna il numero di versione.

## Scegli chi può giocare

- Ometti `visibility` per seguire l’impostazione dell’account del creator per un nuovo gioco (Pubblico, a meno che non abbia scelto Non in elenco o Privato); un aggiornamento mantiene il pubblico attuale del gioco.
- `"private"` salva una versione che solo il creator può aprire, per i test. Pubblica in seguito quella stessa versione con `publish_game_version`; non caricarla di nuovo.
- `"unlisted"` la pubblica per chiunque abbia il link, senza farla comparire negli elenchi; `"public"` la pubblica perché possa essere scoperta.

Segui ciò che il tuo utente ha chiesto e non rendere mai un gioco più visibile di quanto volesse. Vedi [chi può giocare](https://www.playdrop.ai/it/create/learn/distribution).

## Leggi la ricevuta

La ricevuta include `gameId`, `slug`, `version`, `status`, `visibility` e `url`, il link della versione esatta per il proprietario. I giochi pubblici e non in elenco ricevono anche `shareUrl`, la pagina duratura del gioco; consegna quello al tuo utente. Per una versione privata, consegna `url`. `instant` e `instantReason` indicano l’idoneità a [Instant](https://www.playdrop.ai/it/create/learn/instant-games).

## Aggiorna il gioco

Chiama `list_games`, passa il `gameId` del gioco e mantieni il suo `name`. Invia di nuovo l’HTML completo e il mini catalogo completo: ogni caricamento è un’istantanea completa, e i campi omessi mancano nella nuova versione. Il link resta lo stesso. Un gioco caricato la prima volta come pacchetto deve continuare a usare il percorso dei pacchetti, così i suoi file e le sue funzioni non vanno persi.

## Passa a un pacchetto in seguito

Aggiungere salvataggi cloud, una classifica, immagini della scheda o un server trasforma il gioco in un pacchetto. È un normale aggiornamento dello stesso gioco: mantieni il `name`, caricalo con `prepare_catalogue_upload` e imposta `expectedCurrentVersion` sulla versione attuale da `list_games`. Leggi [pacchetti](https://www.playdrop.ai/it/create/learn/packaging).

## Guide correlate

- [Pubblica dalla tua app di IA](https://www.playdrop.ai/it/create/learn/mcp-publishing): Come le app di IA pubblicano su PlayDrop tramite MCP: percorso semplice e pacchetti, test privati, publish_game_version, aggiornamenti, limiti e recupero.
- [Pacchetti e .play](https://www.playdrop.ai/it/create/learn/packaging): Organizza una cartella compilata, uno ZIP o un .play con catalogue.json nella radice, dichiara scheda e server e caricalo con prepare_catalogue_upload.
- [Visibilità e pubblico](https://www.playdrop.ai/it/create/learn/distribution): Scegli chi può aprire un gioco, capisci l’impostazione predefinita e le versioni, e scopri come Boost, Scambio di partite, Instant e ricerca portano giocatori.
