> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Noções básicas sobre o fluxo de sincronização do Game Saves

> Conheça o fluxo de sincronização em seis etapas do Game Saves do XBOX: início do título, verificação de conexão, propriedade dos dados, sincronização com a nuvem, loop de jogo e fim da sessão.

Este artigo descreve o fluxo de sincronização em seis partes do Game Saves. Embora o comportamento possa variar um pouco dependendo da API do Game Saves específica que você usa, o fluxo geral de um salvamento iniciado pelo usuário é o mesmo. As etapas são as seguintes.

1. [Início do título](/pt-BR/build/core-features/common/game-save/game-saves-syncing#title-start)
2. [Verificação de conexão](/pt-BR/build/core-features/common/game-save/game-saves-syncing#connection-check)
3. [Verificação de propriedade dos dados](/pt-BR/build/core-features/common/game-save/game-saves-syncing#data-ownership-check)
4. [Sincronizando dados com a nuvem](/pt-BR/build/core-features/common/game-save/game-saves-syncing#syncing-data-with-the-cloud)
5. [Loop de jogo](/pt-BR/build/core-features/common/game-save/game-saves-syncing#gameplay-loop)
6. [Fim da sessão](/pt-BR/build/core-features/common/game-save/game-saves-syncing#session-end)

## Início do título

Quando o título é iniciado, a primeira etapa é determinar o usuário para o qual o Game Saves está sendo gerenciado. Se o usuário tiver uma sessão de jogo ativa em outro dispositivo, uma caixa de diálogo do sistema solicitará que o usuário troque de dispositivo. Se o usuário trocar, o outro dispositivo sincronizará seus dados locais mais recentes do Game Saves com o novo dispositivo. Se você quiser que os dados sejam locais e vinculados ao dispositivo, poderá usar um provedor somente de máquina. Essa opção passa um identificador de usuário `null` para as APIs do Game Saves.

Depois que o título seleciona o usuário, ele inicializa o Game Saves com o identificador desse usuário. Durante a inicialização, o Game Saves se conecta à rede XBOX para preparar o espaço de armazenamento do usuário.

| API | Função de inicialização do provedor do Game Saves |
| - | - |
| `XGameSave` | `XGameSaveInitializeProvider()` |
| `XGameSaveFiles` | `XGameSaveFilesGetFolderWithUIAsync()` |

Caixa de diálogo do sistema relevante:

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/signed-into-another-device.png?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=b333cb6234262d4b20d1b00cfa7119f7" alt="Parece que você entrou em outro dispositivo." width="792" height="1026" data-path="images/gdk/features/common/signed-into-another-device.png" />

Para obter informações sobre modelos de usuário e gerenciamento de usuários, consulte [Modelos de usuário](/pt-BR/build/core-features/common/game-save/game-saves-developer-guide#user-models).

Para obter informações sobre armazenamento, consulte [Sistemas de armazenamento do Game Saves](/pt-BR/build/core-features/common/game-save/game-saves-storage-systems).

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-1-title-start.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=e73bde01a012a367ec751c0f00a760c5" alt="Fluxograma da primeira etapa do processo de sincronização." width="663" height="1258" data-path="images/gdk/features/common/sync-flow-1-title-start.jpg" />

## Verificação de conexão

Em seguida, o título determina se pode se conectar à rede XBOX para confirmar que a sincronização com a nuvem é possível. Se o título não conseguir se conectar, o usuário terá a opção de tentar novamente ou retomar o título no modo offline. O Game Saves pode ser executado no modo offline.

Caixas de diálogo do sistema relevantes: <img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-failed-network-dialogue.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=2d1a2c71ac69baac7aa3863e5308554d" alt="Não foi possível sincronizar seus dados com a nuvem agora." width="1006" height="559" data-path="images/gdk/features/common/sync-failed-network-dialogue.jpg" />

<img src="https://mintlify.s3.us-west-1.amazonaws.com/microsoft-4404708b/pt-BR/build/core-features/common/game-save/game-saves-dialogues#we-couldnt-get-your-latest-saved-data" alt="Não foi possível obter seus dados salvos mais recentes." />

### Comportamento offline

| Acesso à rede XBOX | Padrão de sincronização de dados |
| - | - |
| Sim | Fluxo normal de sincronização com a nuvem. Continue para a verificação de propriedade dos dados. |
| Não | Modo offline: o título salva os dados no armazenamento local do Game Saves do usuário, mas a sessão atual não é sincronizada com a nuvem. |

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-2-connection-check.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=abc4d0abd4bcce59bce850fb348d19fb" alt="Fluxograma da etapa de verificação de conexão do processo de sincronização." width="598" height="444" data-path="images/gdk/features/common/sync-flow-2-connection-check.jpg" />

## Verificação de propriedade dos dados

Depois que a conexão é confirmada, o título determina se o dispositivo tem o direito de modificar os dados. Se tiver, ele poderá adquirir um bloqueio para o título. Para que um título obtenha e libere um bloqueio, ele precisa de acesso aos serviços XBOX.

O título verifica se há outro dispositivo que mantém um bloqueio sobre os dados do usuário. Esse dispositivo ainda pode manter um bloqueio pelos seguintes motivos.

* Estar desconectado da rede XBOX, o que impede o dispositivo de chamar `WebReleaseLock`.
* O outro dispositivo está carregando um Game Save grande e não consegue chamar `WebReleaseLock`.

Se outro dispositivo mantiver o bloqueio, o usuário terá as seguintes opções.

* Adquirir à força o bloqueio do outro dispositivo, fazendo com que o outro dispositivo perca os dados da sessão.
* Tentar adquirir o bloqueio normalmente outra vez.
* Cancelar a aquisição do bloqueio.

Se o usuário cancelar a aquisição do bloqueio, o título será iniciado no modo offline.

Para mais cenários de perda de conexão e de bloqueio, consulte [Cenários de perda de conexão e de bloqueio](/pt-BR/build/core-features/common/game-save/game-saves-syncing#connection-loss-and-lock-scenarios).

Caixas de diálogo do sistema relevantes:

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/lock-contention-dialogue.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=38894f740f55a181c2137b3c9b84cb18" alt="Seu outro console XBOX está demorando muito para sincronizar com a nuvem" width="639" height="563" data-path="images/gdk/features/common/lock-contention-dialogue.jpg" />

Para obter detalhes sobre como monitorar a aquisição de bloqueios pela rede XBOX, consulte [Inspecionando o tráfego de rede do Game Saves](/pt-BR/build/core-features/common/game-save/game-saves-tools#inspecting-game-saves-network-traffic).

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-3-data-ownership-check.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=b21137181a92b3e1afaad2618bea46ae" alt="Fluxograma da verificação de propriedade dos dados no processo de sincronização." width="846" height="1092" data-path="images/gdk/features/common/sync-flow-3-data-ownership-check.jpg" />

## Sincronizando dados com a nuvem

Depois que o título adquire o bloqueio sobre os dados do usuário, ele sincroniza esses dados com a nuvem. Em seguida, o título determina se executa uma das seguintes ações:

* Carregar os dados locais do Game Saves.
* Baixar os dados da nuvem e atualizar os dados locais do Game Saves.
* Não executar nenhuma ação.
* Resolver quaisquer conflitos de dados.

O título determina isso comparando dois carimbos de data/hora.

* **Hora do salvamento local**: quando este dispositivo gravou um salvamento pela última vez
* **Hora do salvamento na nuvem**: quando a cópia na nuvem foi atualizada pela última vez

### Os quatro resultados da sincronização

| Local vs. nuvem | Ação | O que significa |
| - | - | - |
| Nenhum foi alterado | Não fazer nada | Os dados são iguais nos dois locais. Nenhum progresso novo. |
| Somente o local foi alterado | Carregar local>nuvem | O usuário jogou offline. Envie os dados de jogo salvo locais mais recentes para a nuvem. |
| Somente a nuvem foi alterada | Baixar nuvem>local | O usuário jogou em outro dispositivo. Obtenha os dados de jogo salvo do usuário na nuvem. |
| Ambos foram alterados | Conflito>perguntar ao usuário | Cada local mostra um progresso que o outro dispositivo não tem. O usuário resolve. |

<Note>
  Se ocorrer o download da nuvem, uma caixa de diálogo de sincronização será exibida, [Sincronizando dados para ...](/pt-BR/build/core-features/common/game-save/game-saves-dialogues#syncing-data). Se o usuário cancelar o Game Saves usando essa caixa de diálogo, o título continuará no modo offline.
</Note>

### Estados de alteração e de salvamento

Este cenário pressupõe que o usuário está jogando em dois dispositivos, o Dispositivo A e o Dispositivo B.

**Local alterado**

O usuário fez progresso enquanto estava offline no Dispositivo A. Por exemplo, o usuário subiu para o nível 126 no Dispositivo A sem conexão com a internet.

**Nuvem alterada**

Houve progresso carregado do Dispositivo B desde a última vez que o usuário sincronizou o Dispositivo A. Por exemplo, o usuário subiu para o nível 99 no Dispositivo B e carregou os dados para a nuvem.

**Ambos alterados**

O usuário jogou offline no Dispositivo A. O usuário também jogou no Dispositivo B desde a última vez que sincronizou o Dispositivo A. Por exemplo, o Dispositivo A está no nível 126. A nuvem está no nível 99.

Se houver um conflito, o sistema solicitará que o usuário o resolva por meio de uma caixa de diálogo: [Qual você deseja usar?](/pt-BR/build/core-features/common/game-save/game-saves-dialogues#which-one-do-you-want-to-use)

### Atomicidade

O Game Saves é atômico no nível do contêiner (pasta). Se a pasta na nuvem incluir um blob que a pasta local correspondente não contém, o sistema tratará as duas pastas como separadas. Essa diferença cria um conflito.

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-4-sync-data-with-cloud.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=2e20d3966826e47b9b79c5bf30cc9227" alt="Fluxograma da sincronização com a nuvem no processo de sincronização." width="930" height="1119" data-path="images/gdk/features/common/sync-flow-4-sync-data-with-cloud.jpg" />

## Loop de jogo

O *loop de jogo* é a parte ativa da sessão de jogo. Ele começa depois que o título termina de sincronizar os dados salvos com a nuvem.

Durante a sessão de jogo ativa, o título lê e grava os dados salvos localmente. Todos os dados criados ou atualizados nesse período permanecem no armazenamento local do Game Saves até que o sistema execute uma sincronização com a nuvem.

O loop de jogo termina quando a sessão de jogo do usuário termina, se uma das condições a seguir for verdadeira para o console ou o PC. Uma sessão termina quando um console ou PC dispara uma alteração de estado, como suspensão, encerramento, saída ou outro evento do sistema.

### Sincronização periódica com a nuvem

A cada 30 minutos de jogo, o título tenta sincronizar automaticamente com a nuvem. Esse comportamento se baseia nos cenários a seguir.

| API do Game Saves | Ação | Quando |
| - | - | - |
| `XGameSaveFiles`, salvamentos na nuvem sem código | Carregar local>nuvem | 30 minutos decorridos desde que o jogo gravou na área de salvamento designada. |
| `XGameSave` | Carregar local>nuvem | A cada 30 minutos de jogo. |

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-5-gameplay-loop.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=3a0165fb65cfb429d4455e018b4fd95f" alt="Fluxograma das interações do loop de jogo com o Game Saves." width="714" height="977" data-path="images/gdk/features/common/sync-flow-5-gameplay-loop.jpg" />

## Fim da sessão

Depois que a sessão de jogo termina, o título carrega os novos dados para a nuvem. O dispositivo tenta carregar os dados para a nuvem quando tem uma conexão. Depois que os dados são carregados, o bloqueio é liberado.

Para ver a liberação do bloqueio na rede XBOX para fins de depuração, consulte [Inspecionando o tráfego de rede do Game Saves](/pt-BR/build/core-features/common/game-save/game-saves-tools#inspecting-game-saves-network-traffic).

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-6-session-end.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=fb2ca714223c6846bcf37775a7d98c6f" alt="Fluxograma do comportamento de fim de sessão no processo de sincronização." width="1384" height="587" data-path="images/gdk/features/common/sync-flow-6-session-end.jpg" />

## Cenários de perda de conexão e de bloqueio

Os dados gravados durante a perda de conexão são armazenados no armazenamento local do Game Saves e carregados depois que a conexão é restabelecida. No entanto, se o usuário tentar usar outro dispositivo, o dispositivo atual não conseguirá liberar o bloqueio porque a conexão foi perdida. O usuário pode forçar a transferência do bloqueio para outro dispositivo. Dependendo de quando essas transferências de bloqueio ocorrem, um título pode apresentar comportamentos diferentes.

### Perda de conexão antes do início do título

> **Quando:** o usuário inicia um título sem conexão.

O título oferece ao usuário a opção de iniciar no modo offline porque não há conexão. Quando o dispositivo se reconecta à rede XBOX e a nuvem contém dados mais recentes, o título trata os dados locais como desatualizados. Nesse caso, o título encerra a sessão de jogo terminando o aplicativo com uma operação de suspensão.

Caixa de diálogo do sistema relevante: [Precisamos fechar este jogo ou aplicativo](/pt-BR/build/core-features/common/game-save/game-saves-dialogues#we-need-to-close-this-game-or-app)

### Perda de conexão durante o loop de jogo

> **Quando:** o usuário está em uma sessão de jogo ativa e o título ainda mantém o bloqueio. Em algum momento, a conexão é perdida. O título então permite que o jogo continue durante essa perda.

| Dispositivo offline | Estado do bloqueio na reconexão | Ação do título na reconexão | Experiência do usuário/interface do usuário |
| - | - | - | - |
| Console | Ainda mantém o bloqueio | Continua salvando localmente. | Os salvamentos vão para o armazenamento local. |
| Console | Bloqueio obtido por outro dispositivo | O título é encerrado. | Saída para a tela Página Inicial. |
| PC | Ainda mantém o bloqueio | Continua salvando localmente. | Os salvamentos vão para o armazenamento local. |
| PC | Bloqueio obtido por outro dispositivo | O jogo é retomado normalmente. A resolução de conflitos é feita na próxima sincronização. | O jogo é retomado. |

### Perda de conexão antes do fim da sessão (encerramento ou suspensão)

> **Quando:** o jogador sai do título ou o suspende enquanto o dispositivo está desconectado. O dispositivo ainda tem dados locais não sincronizados.

| Dispositivo offline | Momento da perda de conexão | Estado do bloqueio na reconexão | Ação do dispositivo na reconexão |
| - | - | - | - |
| Console | Antes do encerramento | Ainda mantém o bloqueio | Os dados são carregados e o bloqueio é liberado. |
| Console | Antes do encerramento | Bloqueio obtido por outro dispositivo | Os dados passam pela resolução de mesclagem no próximo início do título. |
| Console | Antes da suspensão | Ainda mantém o bloqueio | Os dados são carregados e o bloqueio é liberado. |
| Console | Antes da suspensão | Bloqueio obtido por outro dispositivo | O título é encerrado e os dados passam pela resolução de mesclagem no próximo início do título. |
| PC | Antes do encerramento | Ainda mantém o bloqueio | Os dados são carregados e o bloqueio é liberado. |
| PC | Antes do encerramento | Bloqueio obtido por outro dispositivo | Os dados passam pela resolução de mesclagem no próximo início do título. |
| PC | Antes da suspensão | Ainda mantém o bloqueio | Os dados são carregados e o bloqueio é liberado. |
| PC | Antes da suspensão | Bloqueio obtido por outro dispositivo | Os dados passam pela resolução de mesclagem no próximo início do título. |

## Perda de energia

A perda de energia age de forma semelhante à perda de conexão. A principal diferença é que todas as operações de salvamento que estavam ativas são perdidas.


## Related topics

- [Guias gerais de portabilidade](/pt-BR/paths/porting/guides.md)
- [Guia de programação do Direct3D 12](/pt-BR/build/gdk-and-engines/guides/directx-12-programming-guide.md)
- [Visão geral do Unity](/pt-BR/paths/unity/overview.md)
- [Visão geral do XBOX Series X|S](/pt-BR/paths/series-xs/overview.md)
- [Visão geral do Unreal Engine](/pt-BR/paths/unreal/overview.md)
