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.
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.
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.dataen memoria no guarda nada. appDatano tiene métodosget,setnisave.
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 y los logros, 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, 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.