# Salvataggi cloud per i giochi PlayDrop

Salva e carica i progressi con sdk.me.appData e sdk.me.updateAppData, per ospiti e giocatori con accesso: regole per scritture, anteprime e gioco offline.

Source: https://www.playdrop.ai/it/create/learn/cloud-saves

I salvataggi cloud conservano su PlayDrop i progressi di ogni giocatore nel tuo gioco, così i progressi lo seguono dal sito alle app. Viene memorizzato un oggetto JSON per giocatore e per gioco; non servono un server né una stanza multiplayer.

## Leggi e scrivi

Dopo `init()`, `sdk.me.appData` è l’istantanea salvata: `{ data, seq, ts_event, ts_arrival }`, oppure `null` prima del primo salvataggio. Leggi il tuo oggetto da `data`. Scrivi l’intero oggetto con `updateAppData`, che restituisce l’istantanea salvata e aggiorna `sdk.me.appData`.

```js
const sdk = await playdrop.init();
let progress = { level: 1, coins: 0, ...(sdk.me.appData?.data ?? {}) };
let queue = Promise.resolve();

// Resolves with the saved snapshot; rejects when the save failed.
function save(changes) {
  progress = { ...progress, ...changes };
  const snapshot = { ...progress };
  const attempt = queue.then(() => sdk.me.updateAppData(snapshot));
  queue = attempt.catch(() => {}); // a failed save must not block the next one
  return attempt;
}

try {
  await save({ level: 2 });
  showSaved();
} catch (error) {
  showSaveError(); // progress stays in memory; the next save sends it again
}
```

- Ogni scrittura sostituisce l’intero oggetto salvato: conserva tutti i campi che ti servono ancora.
- Esegui le scritture in sequenza, come sopra, così un salvataggio più vecchio non arriva mai dopo uno più recente, e mantieni attiva la coda dopo un errore.
- Mostra «Salvato» solo dopo che la promise si è risolta. Modificare `appData.data` in memoria non salva nulla.
- `appData` non ha metodi `get`, `set` o `save`.

## Quando salvare

Salva ai checkpoint, alla fine dei livelli e dopo gli acquisti, invece che a ogni frame. Non salvare mai durante anteprime o acquisizioni: scrivi solo quando `sdk.host.phase` è `play`. Mantieni il salvataggio piccolo e indica una versione in un campo tuo, come `saveVersion: 2`, così una versione successiva del gioco può migrarlo.

## Ospiti e giocatori con accesso

Non devi controllare `sdk.me.isLoggedIn` prima di salvare: anche gli ospiti di PlayDrop conservano i loro salvataggi. Un giocatore senza alcuna sessione mantiene il salvataggio in memoria per quella visita, quindi una scrittura risolta non dimostra che il salvataggio abbia raggiunto il cloud. Usa `isLoggedIn` solo per le funzioni che richiedono un vero account, come acquisti e multiplayer ospitato.

## Offline

Nel browser i salvataggi richiedono una connessione e non c’è una coda offline: continua a giocare in caso di errore e riprova al checkpoint successivo. Gli host che dichiarano il supporto ai dati sul dispositivo, come le app PlayDrop che funzionano offline, conservano i salvataggi sul dispositivo e li sincronizzano quando sono online.

## Cosa non sono i salvataggi

I salvataggi sono privati e legati a un solo giocatore e a un solo gioco. Sono separati dalle [classifiche](https://www.playdrop.ai/it/create/learn/leaderboards) e dagli [obiettivi](https://www.playdrop.ai/it/create/learn/achievements), che hanno API proprie e compaiono su PlayDrop. Lo stato condiviso tra giocatori, come una partita o un mondo, va su un [server di gioco](https://www.playdrop.ai/it/create/learn/game-servers), nelle collezioni MongoDB del tuo gioco.

## Prova

I salvataggi appartengono a un gioco caricato. Carica almeno una volta una versione privata, poi prova dall’`url` della ricevuta o dal frame Dev locale descritto in [pubblicare dalla tua app di IA](https://www.playdrop.ai/it/create/learn/mcp-publishing).

## Guide correlate

- [Classifiche](https://www.playdrop.ai/it/create/learn/leaderboards): Dichiara le classifiche in catalogue.json, invia punteggi con sdk.leaderboards e mostra i primi posti e i vicini del giocatore. Tipi, limiti e aggiornamenti.
- [Obiettivi](https://www.playdrop.ai/it/create/learn/achievements): Dichiara obiettivi standard e incrementali con icone in catalogue.json, sbloccali e segnala i progressi con sdk.achievements.
- [Server in tempo reale](https://www.playdrop.ai/it/create/learn/game-servers): Esegui un server Colyseus 0.17 ospitato con un database MongoDB, collegati dal browser con l’SDK, prova con due giocatori e conosci i limiti.
