# Molnsparningar för PlayDrop-spel

Spara och läs in spelarens framsteg med sdk.me.appData och updateAppData, för gäster och inloggade, med regler för skrivningar, förhandsvisningar och offline.

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

Molnsparningar behåller varje spelares framsteg i ditt spel på PlayDrop, så att de följer med från webbplatsen till apparna. Ett JSON-objekt per spelare och spel sparas; ingen server eller flerspelarrum behövs.

## Läs och skriv

Efter `init()` är `sdk.me.appData` den sparade ögonblicksbilden: `{ data, seq, ts_event, ts_arrival }`, eller `null` före den första sparningen. Läs ditt objekt från `data`. Skriv hela objektet med `updateAppData`, som returnerar den sparade ögonblicksbilden och uppdaterar `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
}
```

- Varje skrivning ersätter hela det sparade objektet: behåll alla fält som du fortfarande behöver.
- Utför skrivningar i följd, som ovan, så att en äldre sparning aldrig landar efter en nyare, och håll kön igång efter ett fel.
- Visa ”Sparat” först när promise-objektet har slutförts. Att ändra `appData.data` i minnet sparar ingenting.
- `appData` har inga metoder `get`, `set` eller `save`.

## När du ska spara

Spara vid kontrollpunkter, slutet av banor och köp i stället för varje bildruta. Spara aldrig under förhandsvisningar eller inspelningar: skriv bara när `sdk.host.phase` är `play`. Håll sparningen liten och versionerad med ett eget fält, som `saveVersion: 2`, så att en senare version av spelet kan migrera den.

## Gäster och inloggade spelare

Du behöver inte kontrollera `sdk.me.isLoggedIn` innan du sparar: PlayDrop-gäster behåller också sina sparningar. En spelare helt utan session behåller sparningen i minnet under det besöket, så en slutförd skrivning bevisar inte att sparningen nådde molnet. Använd `isLoggedIn` bara för funktioner som kräver ett riktigt konto, som köp och hostat flerspelarläge.

## Offline

I en webbläsare kräver sparningar en anslutning och det finns ingen offlinekö: fortsätt spela vid fel och försök igen vid nästa kontrollpunkt. Värdar som anger stöd för enhetsdata, som PlayDrop-appar med offlinestöd, behåller sparningar på enheten och synkroniserar dem när de är online.

## Vad sparningar inte är

Sparningar är privata för en spelare och ett spel. De är skilda från [topplistor](https://www.playdrop.ai/sv/create/learn/leaderboards) och [prestationer](https://www.playdrop.ai/sv/create/learn/achievements), som har egna API:er och visas på PlayDrop. Tillstånd som delas mellan spelare, som en match eller en värld, hör hemma på en [spelserver](https://www.playdrop.ai/sv/create/learn/game-servers) i ditt spels MongoDB-samlingar.

## Testa

Sparningar hör till ett uppladdat spel. Ladda upp en privat version minst en gång och testa sedan från kvittots `url` eller från den lokala Dev-ramen som beskrivs i [publicera från din AI-app](https://www.playdrop.ai/sv/create/learn/mcp-publishing).

## Relaterade guider

- [Topplistor](https://www.playdrop.ai/sv/create/learn/leaderboards): Deklarera topplistor i catalogue.json, skicka poäng med sdk.leaderboards och visa toppen och spelarens grannar. Poängtyper, gränser och uppdateringsregler.
- [Prestationer](https://www.playdrop.ai/sv/create/learn/achievements): Deklarera vanliga och stegvisa prestationer med ikoner i catalogue.json, lås upp dem och rapportera framsteg med sdk.achievements.
- [Spelservrar i realtid](https://www.playdrop.ai/sv/create/learn/game-servers): Kör en hostad Colyseus 0.17-server med en MongoDB-databas för ditt spel, anslut från webbläsaren med SDK:t, testa med två spelare och känn till gränserna.
