Pular para o conteúdo principal
O PlayFab Game Saves emite eventos do PlayStream que você pode usar para acompanhar como os jogadores salvam, sincronizam e gerenciam os dados do jogo. Use esses eventos para monitorar a atividade de salvamento, detectar conflitos e entender os padrões de uso entre dispositivos na sua base de jogadores. Todos os eventos do Game Saves são emitidos para entidades title_player_account no namespace playfab.gamesave.

Eventos

gamesave_version_finalized

Emitido sempre que uma versão de jogo salvo é finalizada. Todos os arquivos foram carregados e a versão está completa. Este evento é o principal sinal para acompanhar a atividade de salvamento. Conflict (objeto aninhado, presente somente durante a resolução de conflitos):

gamesave_version_marked_known_good

Emitido quando uma versão de jogo salvo é marcada explicitamente como “válida conhecida”. Uma versão válida conhecida serve como ponto de restauração confiável: é a versão para a qual o sistema reverte se um jogador ou o título precisar se recuperar de um estado de salvamento incorreto.

Cenários

Cenário: uso padrão entre dispositivos

Um fluxo típico entre dispositivos consiste em um jogador salvar em um dispositivo e retomar em outro. No PlayStream, esse padrão aparece como uma sequência de eventos gamesave_version_finalized com números de Version crescentes. O que você vê:
  • Um evento gamesave_version_finalized sempre que o jogador salva, com DeviceType e PlayerIdentityProvider indicando qual dispositivo e qual provedor de identidade foram usados.
  • NewFileCount e NewFilesSizeBytes mostram quantos dados mudaram em comparação com a versão anterior. Uma versão em que NewFileCount é 0 significa que o jogador finalizou uma versão sem conteúdo de arquivo novo (por exemplo, uma atualização somente de metadados).
  • Conflict é null e IsGeneratedByRollback é false em salvamentos normais.
O que observar:
  • Frequência de salvamento por jogador: acompanhe a taxa de eventos de finalização para entender o engajamento dos jogadores e o comportamento de salvamento.
  • Tamanhos dos salvamentos ao longo do tempo: monitore TotalSizeBytes e NewFilesSizeBytes para identificar um crescimento inesperado dos dados salvos que possa afetar os custos de armazenamento ou os tempos de sincronização.
  • Distribuição de dispositivos: agregue DeviceType para entender a partir de quais plataformas seus jogadores salvam com mais frequência.

Cenário: resolução de conflitos

Os conflitos ocorrem quando dois dispositivos finalizam uma versão de jogo salvo com base na mesma versão base. Por exemplo, um jogador pode jogar offline no console e no PC ao mesmo tempo, e ambos os dispositivos tentam sincronizar quando voltam a ficar online. O que você vê:
  • Durante a resolução de conflitos, o cliente sempre carrega seus arquivos locais em um novo manifesto e finaliza o manifesto. Esse processo produz um único evento gamesave_version_finalized com um objeto Conflict não nulo. A versão existente na nuvem (já finalizada em um evento anterior) não produz um novo evento.
  • Conflict.IsWinner informa se as alterações locais do jogador venceram o conflito:
    • true: o jogador escolheu keep local. O novo manifesto se torna a versão canônica, e a versão anterior na nuvem é substituída.
    • false: o jogador escolheu keep remote. O novo manifesto é preservado como ponto de reversão (contendo os dados locais rejeitados), enquanto a versão existente na nuvem permanece canônica.
  • Conflict.ConflictingVersion aponta para a versão existente na nuvem que estava em conflito.
O que observar:
  • Taxa de conflitos: filtre os eventos gamesave_version_finalized em que Conflict está presente. Uma taxa de conflitos crescente pode indicar que os jogadores trocam de dispositivo com frequência sem sincronizar ou que a cadência de salvamento do seu título causa colisões de versão desnecessárias.
  • Preferência entre local e remoto: compare a proporção de IsWinner = true (manteve o local) e IsWinner = false (manteve o remoto) para entender como os jogadores resolvem os conflitos. Uma forte tendência para um dos lados pode indicar um problema de UX no prompt de conflito.
  • Padrões de conflito entre dispositivos: use DeviceType e PlayerIdentityProvider nos eventos de conflito para entender quais combinações de plataformas são mais propensas a conflitos.

Cenário: versão válida conhecida e reversão

O mecanismo de “válida conhecida” permite marcar uma versão específica como ponto de restauração confiável. Se o salvamento de um jogador for corrompido ou ele precisar se recuperar, o sistema poderá reverter para a versão válida conhecida mais recente e criar uma nova versão a partir dela. O que você vê:
  • Um evento gamesave_version_marked_known_good quando você designa uma versão como ponto de restauração, com o número de Version e o carimbo de data/hora MarkedAt.
  • Se ocorrer uma reversão, o sistema emitirá um novo evento gamesave_version_finalized com IsGeneratedByRollback = true. O conteúdo dessa nova versão se baseia na versão válida conhecida, mas ela recebe um novo número de versão incrementado.
  • A versão gerada pela reversão também pode ter dados de Conflict se a reversão tiver sido disparada como parte de uma resolução de conflito.
O que observar:
  • Frequência de reversões: acompanhe os eventos gamesave_version_finalized em que IsGeneratedByRollback = true. Reversões frequentes em um título podem indicar problemas de corrupção de salvamentos ou na lógica de salvamento do título.
  • Atualidade da versão válida conhecida: compare a Version em gamesave_version_marked_known_good com a Version finalizada mais recente do mesmo jogador. Uma grande diferença significa que o jogador perderia um progresso significativo se fosse necessária uma reversão.
  • Correlação entre reversão e conflito: se as versões geradas por reversão aparecerem com frequência junto com dados de conflito, esse padrão pode sugerir que sua estratégia de resolução de conflitos está disparando reversões como efeito colateral.
Última modificação em 8 de outubro de 2026