# Partidas guardadas en la nube para juegos de PlayDrop

Guarda y carga el progreso con sdk.me.appData y sdk.me.updateAppData, para invitados y jugadores con sesión: escrituras, vistas previas y juego sin conexión.

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

Las partidas guardadas en la nube conservan el progreso de cada jugador en tu juego en PlayDrop, para que lo acompañe de la web a las apps. Se guarda un objeto JSON por jugador y juego; no hace falta ningún servidor ni sala multijugador.

## Lee y escribe

Después de `init()`, `sdk.me.appData` es la instantánea guardada: `{ data, seq, ts_event, ts_arrival }`, o `null` antes del primer guardado. Lee tu objeto desde `data`. Escribe el objeto completo con `updateAppData`, que devuelve la instantánea guardada y actualiza `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
}
```

- Cada escritura reemplaza todo el objeto guardado: conserva todos los campos que todavía necesites.
- Realiza las escrituras en serie, como arriba, para que un guardado antiguo nunca llegue después de uno más reciente, y mantén la cola en marcha tras un fallo.
- Muestra «Guardado» solo cuando la promesa se resuelva. Cambiar `appData.data` en memoria no guarda nada.
- `appData` no tiene métodos `get`, `set` ni `save`.

## Cuándo guardar

Guarda en los puntos de control, al terminar un nivel y en las compras, no en cada fotograma. No guardes nunca durante las vistas previas ni las capturas: escribe solo cuando `sdk.host.phase` sea `play`. Mantén cada partida guardada pequeña y versionada con un campo propio, como `saveVersion: 2`, para que una versión posterior del juego pueda migrarla.

## Invitados y jugadores con la sesión iniciada

No necesitas comprobar `sdk.me.isLoggedIn` antes de guardar: los invitados de PlayDrop también conservan sus partidas guardadas. Un jugador sin ninguna sesión conserva la partida guardada en memoria durante esa visita, así que una escritura resuelta no demuestra que haya llegado a la nube. Usa `isLoggedIn` solo para funciones que necesitan una cuenta real, como las compras y el multijugador alojado.

## Sin conexión

En un navegador, guardar requiere conexión y no hay cola sin conexión: sigue jugando si falla y vuelve a intentarlo en el siguiente punto de control. Los hosts que anuncian compatibilidad con datos en el dispositivo, como las apps de PlayDrop que funcionan sin conexión, conservan las partidas guardadas en el dispositivo y las sincronizan cuando hay conexión.

## Qué no son las partidas guardadas

Cada partida guardada es privada y pertenece a un solo jugador y un solo juego. Son independientes de las [clasificaciones](https://www.playdrop.ai/es/create/learn/leaderboards) y los [logros](https://www.playdrop.ai/es/create/learn/achievements), que tienen sus propias API y aparecen en PlayDrop. El estado compartido entre jugadores, como una partida multijugador o un mundo, va en un [servidor de juego](https://www.playdrop.ai/es/create/learn/game-servers), en las colecciones de MongoDB de tu juego.

## Prueba

Las partidas guardadas pertenecen a un juego subido. Sube una versión privada al menos una vez y prueba desde la `url` del recibo o desde el marco Dev local que se describe en [publicar desde tu app de IA](https://www.playdrop.ai/es/create/learn/mcp-publishing).

## Guías relacionadas

- [Clasificaciones](https://www.playdrop.ai/es/create/learn/leaderboards): Declara clasificaciones en catalogue.json, envía puntuaciones con sdk.leaderboards y muestra los mejores puestos y los vecinos del jugador. Tipos, límites y reglas.
- [Logros](https://www.playdrop.ai/es/create/learn/achievements): Declara logros estándar e incrementales con iconos en catalogue.json, desbloquéalos e informa del progreso con sdk.achievements.
- [Servidores en tiempo real](https://www.playdrop.ai/es/create/learn/game-servers): Ejecuta un servidor Colyseus 0.17 alojado con base de datos MongoDB, conéctate desde el navegador con el SDK, prueba con dos jugadores y conoce los límites.
