Salvamentos na nuvem para jogos do PlayDrop
Salve e carregue o progresso com sdk.me.appData e sdk.me.updateAppData, para convidados e jogadores logados, com as regras de gravação, prévias e modo offline.
Os salvamentos na nuvem guardam o progresso de cada jogador no seu jogo no PlayDrop, para que ele acompanhe o jogador do site aos apps. É armazenado um objeto JSON por jogador e por jogo; não é preciso servidor nem sala multijogador.
Leia e grave
Depois de init(), sdk.me.appData é o snapshot salvo: { data, seq, ts_event, ts_arrival }, ou null antes do primeiro salvamento. Leia seu objeto em data. Grave o objeto inteiro com updateAppData, que retorna o snapshot salvo e atualiza 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 gravação substitui todo o objeto salvo: mantenha todos os campos de que você ainda precisa.
- Execute as gravações em sequência, como acima, para que um salvamento antigo nunca chegue depois de um mais recente, e mantenha a fila funcionando depois de uma falha.
- Mostre "Salvo" só depois que a promise for resolvida. Alterar
appData.datana memória não salva nada. appDatanão tem métodosget,setousave.
Quando salvar
Salve em checkpoints, no fim das fases e nas compras, e não a cada quadro. Nunca salve durante prévias ou capturas: só grave quando sdk.host.phase for play. Mantenha o salvamento pequeno e versionado com um campo seu, como saveVersion: 2, para que uma versão futura do jogo possa migrá-lo.
Convidados e jogadores logados
Você não precisa verificar sdk.me.isLoggedIn antes de salvar: os convidados do PlayDrop também mantêm seus salvamentos. Um jogador sem nenhuma sessão mantém o salvamento na memória durante aquela visita, então uma gravação resolvida não prova que o salvamento chegou à nuvem. Use isLoggedIn só para recursos que exigem uma conta real, como compras e multijogador hospedado.
Offline
No navegador, os salvamentos precisam de conexão e não há fila offline: continue o jogo quando houver falha e tente de novo no próximo checkpoint. Hosts que anunciam suporte a dados no dispositivo, como os apps do PlayDrop que funcionam offline, guardam os salvamentos no dispositivo e os sincronizam quando há conexão.
O que os salvamentos não são
Os salvamentos são privados de um jogador e de um jogo. Eles são separados dos placares e das conquistas, que têm suas próprias APIs e aparecem no PlayDrop. Estados compartilhados entre jogadores, como uma partida ou um mundo, ficam em um servidor de jogo, nas coleções MongoDB do seu jogo.
Teste
Os salvamentos pertencem a um jogo enviado. Envie uma versão privada pelo menos uma vez e depois teste pela url do recibo ou pelo frame Dev local descrito em publicar pelo seu app de IA.