> ## 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.

# Modo sin conexión de Game Saves

> Use el modo sin conexión de PlayFab Game Saves para permitir que los jugadores continúen su progreso sin conectividad y sincronizar los guardados en la nube cuando vuelva la red.

Game Saves está diseñado para funcionar tanto en línea como sin conexión, lo que permite a los jugadores seguir jugando incluso cuando la conectividad de red no está disponible. El sistema funciona en dos modos distintos según la disponibilidad de la red y las elecciones del usuario.

### Modos de conexión

#### Modo conectado a la nube

Cuando la red está disponible y `PFGameSaveFilesAddUserWithUiAsync()` se completa correctamente, el sistema funciona en modo conectado a la nube. En este modo:

* Todas las API funcionan normalmente con sincronización completa en la nube
* Las cargas de datos de guardado funcionan según lo esperado
* La información de cuota de almacenamiento está disponible
* La supervisión del dispositivo activo funciona correctamente

#### Modo sin conexión (no conectado a la nube)

Cuando la red no está disponible o el usuario elige jugar sin conexión, el sistema entra en modo sin conexión con funcionalidad limitada. Puede comprobar el estado de conexión actual mediante `PFGameSaveFilesIsConnectedToCloud()` para determinar en qué modo está funcionando el sistema.

### Control de errores de red durante la sincronización inicial

Cuando se llama a `PFGameSaveFilesAddUserWithUiAsync()` sin conectividad de red, se desencadena una `PFGameSaveFilesUiSyncFailedCallback`. La devolución de llamada de `XAsyncBlock` no se activa mientras el sistema espera la respuesta del usuario: la operación asincrónica se pausa hasta que el usuario selecciona una acción terminal.

```cpp theme={null}
// Handle sync failure callback
void MyPFGameSaveFilesUiSyncFailedCallback(PFLocalUserHandle localUserHandle, PFGameSaveFilesSyncState syncState, HRESULT error, void* context)
{
    // Tell the user something like this:
    std::cout << "We couldn't sync your data with the cloud just now" << std::endl;
    std::cout << "Try syncing again or use this game offline" << std::endl;
    std::cout << "[Try Again]" << std::endl;
    std::cout << "[Use Offline]" << std::endl;

    // if user chooses [Try Again], call PFGameSaveFilesSetUiSyncFailedResponse(localUserHandle, PFGameSaveFilesUiSyncFailedUserAction::Retry);
    // if user chooses [Use Offline], call PFGameSaveFilesSetUiSyncFailedResponse(localUserHandle, PFGameSaveFilesUiSyncFailedUserAction::UseOffline);

    // These API calls can happen inside or outside of this callback
}
```

**Opciones de respuesta del usuario:**

* **Reintentar (`Retry`)**: Reintenta la llamada de red. Si el reintento también falla, esta devolución de llamada se activa de nuevo y el usuario debe responder otra vez. La devolución de llamada de `XAsyncBlock` permanece diferida durante cada bucle de reintento.
* **Usar sin conexión (`UseOffline`)**: La devolución de llamada de `XAsyncBlock` se activa con `S_OK`, pero el sistema entra en modo sin conexión (detectable con `PFGameSaveFilesIsConnectedToCloud()`).
* **Cancelar**: La devolución de llamada de `XAsyncBlock` se activa con `E_PF_GAMESAVE_USER_CANCELLED`.

### Comportamiento de las API en modo sin conexión

En el modo sin conexión, las API se comportan de manera diferente:

#### API que funcionan normalmente

* `PFGameSaveFilesGetFolder()`: devuelve la ruta de la carpeta de guardado local

#### API con funcionalidad limitada

* `PFGameSaveFilesUploadWithUiAsync()`: devuelve `S_OK` inmediatamente, pero la finalización asincrónica devuelve `E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUD`
* `PFGameSaveFilesGetRemainingQuota()`: devuelve `E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUD`
* `PFGameSaveFilesSetActiveDeviceChangedCallback()`: se puede establecer, pero nunca se desencadenará

#### Volver al modo en línea

* Llame de nuevo a `PFGameSaveFilesAddUserWithUiAsync()` para intentar la reconexión
* No es necesario reinicializar completamente el sistema de Game Saves
* Volverá a mostrar la interfaz de usuario de error si la red sigue sin estar disponible
* Use `PFGameSaveFilesIsConnectedToCloud()` para comprobar el estado de la conexión después de los intentos de reintento

### Escenarios adicionales de estado de conexión

La API `PFGameSaveFilesIsConnectedToCloud()` es particularmente útil porque la desconexión puede producirse de varias maneras:

* **Red no disponible durante la sincronización**: El usuario elige explícitamente jugar sin conexión
* **Cambio de dispositivo activo**: Otro dispositivo toma el control como dispositivo activo, lo que pone automáticamente este dispositivo en modo sin conexión

Use esta API antes de intentar operaciones en la nube para proporcionar comentarios adecuados al usuario.

### Procedimientos recomendados para la compatibilidad sin conexión

1. **Implemente siempre las devoluciones de llamada de error de sincronización** para controlar correctamente los problemas de red
2. **Compruebe el estado de la conexión con regularidad** mediante `PFGameSaveFilesIsConnectedToCloud()` antes de intentar operaciones en la nube
3. **Informe a los jugadores** cuando funcionen en modo sin conexión para que entiendan que los guardados no se sincronizarán
4. **Proporcione opciones de reintento** cuando se restaure la conectividad de red
5. **Los guardados locales siempre funcionan**: los jugadores pueden seguir jugando independientemente del estado de la red
6. **Supervise las desconexiones**: recuerde que los dispositivos pueden desconectarse cuando otro dispositivo se convierte en el activo

### Comportamiento de la carga en modo conectado

Incluso en modo conectado, las cargas pueden fallar debido a problemas de red o límites de frecuencia. Cuando esto sucede, la devolución de llamada de `XAsyncBlock` no se activa inmediatamente: la operación asincrónica se pausa mientras el sistema espera la respuesta del usuario a través de la [máquina de estados de devoluciones de llamada de la interfaz de usuario](/services/playfab/player-progression/game-saves/ui-callbacks#how-the-state-machine-works):

1. La `PFGameSaveFilesUiSyncFailedCallback` se activa con los detalles del error.
2. La devolución de llamada de `XAsyncBlock` aún no se activa: la operación se pausa mientras el sistema espera una respuesta.
3. Si el usuario selecciona `Retry`, la carga se reintenta. Si vuelve a fallar, la devolución de llamada se activa de nuevo y el usuario debe responder otra vez.
4. Si el usuario selecciona `Cancel`, la devolución de llamada de `XAsyncBlock` se activa con `E_PF_GAMESAVE_USER_CANCELLED`.
5. Si un reintento se realiza correctamente, la devolución de llamada de `XAsyncBlock` se activa con `S_OK`.

El juego puede llamar de nuevo a `PFGameSaveFilesUploadWithUiAsync()` más adelante cuando se restaure la red.


## Related topics

- [Inicio rápido de Game Saves](/es/services/playfab/player-progression/game-saves/quickstart.md)
- [Devoluciones de llamada de la interfaz de usuario de Game Saves](/es/services/playfab/player-progression/game-saves/ui-callbacks.md)
- [Tutoriales y ejemplos de Game Saves](/es/build/core-features/common/game-save/game-saves-walkthroughs-and-samples.md)
- [Descripción del flujo de sincronización de Game Saves](/es/build/core-features/common/game-save/game-saves-syncing.md)
- [Información general de Game Saves](/es/build/core-features/common/game-save/game-saves-overview.md)
