Conflitos do Game Save e unidades atômicas
Visão geral
Os conflitos de salvamento acontecem quando você modifica os mesmos dados do jogo em vários dispositivos. O sistema precisa decidir qual versão manter. Para projetar a estrutura dos seus dados salvos, você precisa entender como o sistema detecta e resolve conflitos.Quando os conflitos acontecem
Os conflitos acontecem durante a operação de sincronização (PFGameSaveFilesAddUserWithUiAsync) somente quando todas as condições a seguir são verdadeiras:
- Existem alterações locais: você modificou arquivos localmente desde a última sincronização.
- Existem alterações na nuvem: outro dispositivo carregou dados mais recentes desde a última sincronização.
- Mesma unidade atômica: ambas as alterações estão na mesma pasta de nível raiz.
Matriz de detecção de conflitos
O que é uma unidade atômica?
Alguns sistemas de sincronização de arquivos tratam os conflitos arquivo por arquivo. Se o mesmo arquivo precisar ser carregado e baixado, há um conflito. No Game Saves, cada subpasta de nível raiz é tratada como uma unidade atômica.Cada subpasta de nível raiz é uma unidade atômica.
- Manter a integridade dos dados: arquivos interdependentes permanecem consistentes juntos
- Fornecer isolamento: dados independentes em pastas separadas são sincronizados sem conflitos
- Minimizar conflitos: alterações em unidades atômicas diferentes em dispositivos diferentes são mescladas automaticamente
Exemplo de estrutura de salvamento
Cenários de conflito
Arquivos de nível raiz: caso especial
Todos os arquivos na raiz do salvamento compartilham uma única unidade atômica. O sistema agrupa todos os arquivos que você coloca diretamente na raiz do salvamento (fora de qualquer subpasta) como uma única unidade atômica. Se você modificar um arquivo de nível raiz localmente e outro dispositivo modificar um arquivo de nível raiz diferente, essa diferença dispara um conflito.Opções de escolha do usuário
Quando ocorrem conflitos, os jogadores escolhem entre:- Use Local Data (Keep Local): manter os dados salvos atuais do dispositivo.
- Use Cloud Data (Keep Cloud): baixar e usar os dados salvos na nuvem.
Importante: a resolução é tudo ou nada
⚠️ Importante: embora as unidades atômicas determinem quando um conflito é detectado, a escolha de resolução de conflito do usuário se aplica ao salvamento inteiro, e não por unidade atômica.
Exemplo: cenário de conflito misto
Por que isso importa
- Keep Local perde as alterações que existem apenas na nuvem: se você escolher “Keep Local” por causa de um conflito em SlotA, não receberá a atualização na nuvem em SlotC feita por outro dispositivo.
- Keep Cloud perde as alterações que existem apenas localmente: se você escolher “Keep Cloud”, o estado da nuvem sobrescreverá suas alterações locais em SlotB e SlotD.
- Reversão disponível: ambas as escolhas preservam o branch descartado para uma futura capacidade de reversão.
Resumo do design
Essa abordagem de tudo ou nada simplifica a experiência do jogador. Embora a resolução por unidade atômica mantenha tecnicamente a consistência dos dados (já que as unidades atômicas definem os limites de consistência), ela cria desafios de experiência do usuário:
- Os jogadores precisam entender o conceito de unidades atômicas e limites de pastas.
- Resultados mistos (algumas pastas locais, outras da nuvem) podem deixar os jogadores confusos sobre o estado final.
- Solicitar uma escolha para cada unidade atômica em conflito separadamente torna a resolução de conflitos excessiva.
Quando os conflitos não ocorrem
Exclusão em ambos os lados
Se ambos os dispositivos excluírem o mesmo arquivo (ou arquivos na mesma unidade atômica), nenhum conflito ocorre. O sistema reconhece que ambos os dispositivos concordam que o arquivo deve ser removido.Alterações em unidades atômicas diferentes
Se o Dispositivo A modificar arquivos emSlotA/ e o Dispositivo B modificar arquivos em SlotB/, nenhum conflito ocorre. A sincronização mescla automaticamente as duas alterações.
Práticas recomendadas
1. Projete a estrutura de pastas com cuidado
Use subpastas para unidades de salvamento independentes:- Dados de referência compartilhados: armazene os dados que qualquer slot de salvamento pode usar, como conteúdo desbloqueado ou conquistas, em sua própria subpasta, para que sejam sincronizados independentemente dos slots de salvamento individuais.
- Grandes coleções de ativos: se o seu jogo armazenar grandes conjuntos de arquivos atualizados de forma independente, como pacotes de conteúdo baixados ou níveis criados por usuários, considere dividi-los em várias subpastas raiz para que as atualizações de uma coleção não entrem em conflito com as de outra.
