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

# Preguntas frecuentes sobre el control de errores de Game Saves

> Preguntas frecuentes sobre el control de errores de Game Saves que abarcan los errores transitorios, las entradas no válidas y cuándo el sistema pasa al modo sin conexión en lugar de devolver un error.

# Preguntas frecuentes sobre el control de errores de Game Saves

En este artículo se responden preguntas comunes sobre cómo Game Saves notifica los errores: qué errores son **transitorios** (vale la pena reintentar), cuáles significan que **ha pasado algo incorrecto** (corrija la llamada) y cuándo el sistema entra en **modo sin conexión** en lugar de devolver un error.

Game Saves se ejecuta de una de dos maneras según la plataforma, y el control de errores difiere ligeramente entre ellas:

* **Fuera de proceso**: el servicio integrado de la plataforma realiza la sincronización y muestra su propia interfaz de usuario del sistema. Game Saves siempre se ejecuta de esta manera en XBOX y Windows.
* **En proceso**: el SDK realiza la sincronización en la nube por sí mismo, en plataformas donde el servicio de la plataforma no está disponible (por ejemplo, Steam Deck). Su juego controla la interfaz de usuario mediante devoluciones de llamada.

## ¿Cuándo pasa Game Saves al modo sin conexión en lugar de devolver un error?

El modo sin conexión es un resultado **correcto**, no un error. La sincronización inicial (`PFGameSaveFilesAddUserWithUiAsync`) solo entra en modo sin conexión cuando el jugador elige explícitamente **Use Offline / Play offline** en un mensaje de error de sincronización (o cuando otro dispositivo pasa a ser el dispositivo activo). En ese caso, la operación asincrónica se completa con `S_OK` y `PFGameSaveFilesIsConnectedToCloud()` devuelve `false`. Sigue obteniendo una carpeta de guardado local utilizable.

En cambio, una **cancelación** deliberada por parte del jugador se completa con `E_PF_GAMESAVE_USER_CANCELLED` y **no** proporciona ninguna carpeta de guardado; trátelo como "no permitir jugar". Si su juego cancela la operación asincrónica por sí mismo con `XAsyncCancel`, se completa con `E_ABORT`, también sin carpeta de guardado; trate `E_ABORT` como su propia cancelación.

Para ver la tabla de decisiones completa y la referencia de códigos de error, consulte [Modo sin conexión de Game Saves](/es/services/playfab/player-progression/game-saves/offline#when-game-saves-enters-offline-mode-or-returns-an-error).

## ¿Puede `PFGameSaveFilesInitialize` fallar de forma transitoria?

**No.** `PFGameSaveFilesInitialize` solo valida sus argumentos y configura el estado; no accede a la red. Todos los errores que devuelve son deterministas:

* `E_INVALIDARG`: falta un argumento obligatorio o no es válido. En proceso, esto incluye un `saveFolder` que falta o no es válido (en esas plataformas se requiere una carpeta válida; en XBOX/GDK la ubicación es fija y el argumento se omite).
* `E_PF_GAMESAVE_ALREADY_INITIALIZED`: lo llamó dos veces sin una llamada intermedia a `PFGameSaveFilesUninitializeAsync`.

Si `Initialize` falla, reintentar no servirá de nada; corrija la entrada. Si se ejecuta correctamente una vez para una configuración determinada, no empezará a fallar más adelante por sí solo.

## ¿Puede `PFGameSaveFilesAddUserWithUiAsync` fallar de forma transitoria?

**Sí**: esta es la llamada que realiza la sincronización de red, por lo que puede encontrar errores transitorios (red no disponible, errores del servicio, actualización de token, falta de espacio en disco). Las llamadas HTTP se reintentan según la configuración de reintentos HTTP del título (`PFHttpRetrySettings`), pero no hay garantía de que un error transitorio se resuelva antes de que su juego lo vea.

Cuando esos reintentos no resuelven un error transitorio, este se muestra a través de la **interfaz de usuario de error de sincronización**, donde el jugador elige **Retry**, **Use Offline** o **Cancel**; o bien, en proceso y sin ninguna devolución de llamada de error de sincronización registrada, se devuelve como un HRESULT sin procesar. Por tanto, un error transitorio normalmente se resuelve en conexión, sin conexión o cancelación en lugar de un error sin procesar, **con una diferencia importante entre las dos rutas** (consulte la siguiente pregunta).

`PFGameSaveFilesAddUserWithUiAsync` también puede devolver errores **deterministas** que no son transitorios y no se pueden reintentar:

* `E_INVALIDARG`: identificador o async nulos, u opciones en conflicto.
* `E_PF_GAMESAVE_NOT_INITIALIZED`: se llamó antes de `Initialize`.
* `E_PF_GAMESAVE_USER_ALREADY_ADDED`: el usuario ya se agregó (y sigue conectado).

## ¿Necesito registrar devoluciones de llamada de la interfaz de usuario para obtener la opción sin conexión?

Esta es la diferencia clave entre las dos rutas:

* **En proceso: sí.** La reserva sin conexión ante un error de sincronización transitorio solo se produce si registró una devolución de llamada de error de sincronización (mediante `PFGameSaveFilesSetUiCallbacks`) antes de llamar a `PFGameSaveFilesAddUserWithUiAsync`. **Si no hay ninguna devolución de llamada registrada, un error transitorio completa la operación con el HRESULT de error sin procesar; no hay Retry ni Use Offline.** En plataformas sin interfaz de usuario integrada de Game Saves, es obligatorio registrar las devoluciones de llamada.
* **Fuera de proceso: no para los errores de sincronización habituales.** La interfaz de usuario del sistema integrada de la plataforma proporciona automáticamente las opciones **Try again** / **Play offline**, por lo que los errores de red habituales durante la sincronización ofrecen al jugador una opción sin conexión sin ninguna devolución de llamada del juego. Aun así, puede registrar devoluciones de llamada para proporcionar su propia interfaz de usuario.

Para obtener más información sobre las devoluciones de llamada y la interfaz de usuario del sistema integrada, consulte [Devoluciones de llamada de la interfaz de usuario de Game Saves](/es/services/playfab/player-progression/game-saves/ui-callbacks).

## ¿Hay errores que se produzcan *antes* de que aparezca cualquier interfaz de usuario?

**Solo fuera de proceso.** Antes de que pueda aparecer la interfaz de usuario de sincronización, `PFGameSaveFilesAddUserWithUiAsync` recopila la configuración del servicio y (opcionalmente) inicia la sesión del usuario. Los errores de configuración iniciales, por ejemplo, que el servicio de la plataforma no esté disponible momentáneamente o que el título no esté configurado para Game Saves, pueden completar la llamada con un HRESULT sin procesar antes de que se muestre cualquier cuadro de diálogo. Algunos de ellos son transitorios (reintente todo `PFGameSaveFilesAddUserWithUiAsync` un momento después); otros indican problemas de configuración (deterministas). Los errores de inicio de sesión o de token se controlan correctamente y no hacen fallar la llamada por sí solos.

En proceso, `AddUserWithUiAsync` no tiene esta categoría de configuración inicial: los errores se producen durante la sincronización y pasan por la interfaz de usuario de error de sincronización (sujeta al requisito de devolución de llamada anterior).

## ¿Se puede cancelar una carga?

**Sí.** `PFGameSaveFilesUploadWithUiAsync` muestra una interfaz de usuario (un indicador de progreso y un mensaje de error de sincronización si encuentra un error), y el jugador puede salir de cualquiera de ellos. Cuando lo hace, la operación se completa con `E_PF_GAMESAVE_USER_CANCELLED` (`0x800704C7`) y la partida guardada **no** se carga.

A diferencia de la sincronización inicial, una carga no tiene un resultado correcto **Use Offline**. Sus resultados finales son:

* **Correcto** (`S_OK`): se guardó en la nube.
* **Cancelado** (`E_PF_GAMESAVE_USER_CANCELLED`): el jugador salió.
* **Cancelado por su juego** (`E_ABORT`): su juego llamó a `XAsyncCancel` en la carga.
* **Error**: todo lo demás (por ejemplo, `E_PF_GAMESAVE_NETWORK_FAILURE` o `E_PF_GAMESAVE_DEVICE_NO_LONGER_ACTIVE`).

Una carga puede terminar igualmente con la sesión **sin conexión**. Se completa con `E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUD` y `PFGameSaveFilesIsConnectedToCloud()` devuelve `false` a continuación, cuando la sesión ya estaba sin conexión, cuando la nube tiene una partida guardada más reciente de otro dispositivo o cuando el jugador elige **Use Offline** en el mensaje de rebloqueo que sigue a una carga anterior que falló parcialmente. Consulte [Cuándo una carga deja la sesión sin conexión](/es/services/playfab/player-progression/game-saves/offline#when-an-upload-takes-the-session-offline).

Controle `E_PF_GAMESAVE_USER_CANCELLED` de forma distinta a los demás errores para poder diferenciar "el jugador canceló" de "la carga produjo un error". Es el mismo código de cancelación que usa la sincronización inicial, por lo que una sola comprobación abarca ambas operaciones.

## ¿Qué errores indican "ha pasado algo incorrecto" frente a un problema transitorio?

| Resultado | Significado | ¿Se puede reintentar? |
| - | - | - |
| `E_INVALIDARG` | Argumento incorrecto (puntero nulo, carpeta de guardado no válida o que falta, opciones en conflicto). | No: corrija la llamada. |
| `E_PF_GAMESAVE_NOT_INITIALIZED` / `E_PF_GAMESAVE_ALREADY_INITIALIZED` | Se llamó fuera de orden. | No: corrija la secuencia. |
| `E_PF_GAMESAVE_USER_ALREADY_ADDED` / `E_PF_GAMESAVE_USER_NOT_ADDED` | Estado incorrecto para esta llamada. | No: corrija la secuencia. |
| La interfaz de usuario de error de sincronización se activa durante `AddUserWithUiAsync` | Error transitorio de red o del servicio. | Sí: Retry o Use Offline. |
| `E_PF_GAMESAVE_NETWORK_FAILURE` (desde `PFGameSaveFilesUploadWithUiAsync`) | Error de carga transitorio; sigue conectado. | Sí: vuelva a intentarlo más tarde. |
| `E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUD` | Está en modo sin conexión. | No: eligió el modo sin conexión (o perdió el estado de dispositivo activo). |
| `E_PF_GAMESAVE_DISK_FULL` | No hay suficiente espacio en el disco local. | Después de que el jugador libere espacio. |
| `E_PF_GAMESAVE_OPERATION_IN_PROGRESS` | Ya se está ejecutando una operación en conflicto para este usuario: otra carga o un restablecimiento de la nube (para cargas y adición de usuarios), o cualquier carga, descarga o restablecimiento (para `PFGameSaveFilesResetCloudAsync`). | Sí: después de que se complete la operación en curso. |
| `E_PF_GAMESAVE_LOCAL_FILE_UNAVAILABLE` (desde `PFGameSaveFilesUploadWithUiAsync`) | No se pudo leer un archivo de guardado local (por ejemplo, todavía está abierto para escritura). | Sí: cuando el título deje de escribir el archivo. |
| `E_PF_GAMESAVE_USER_CANCELLED` | El jugador canceló en un mensaje de la interfaz de usuario. | No. |
| `E_ABORT` | Su juego canceló la operación asincrónica con `XAsyncCancel`. | Solo si su juego vuelve a iniciar la operación. |

Consulte la referencia completa de HRESULT en [Modo sin conexión de Game Saves](/es/services/playfab/player-progression/game-saves/offline#game-saves-error-codes).

## Recomendaciones

* Trate los errores de `PFGameSaveFilesInitialize` como **errores de código que debe corregir** (argumentos o configuración incorrectos), no como condiciones en tiempo de ejecución que deban reintentarse.
* **En proceso:** registre siempre sus devoluciones de llamada de la interfaz de usuario (como mínimo, la devolución de llamada de error de sincronización) antes de `PFGameSaveFilesAddUserWithUiAsync`, para que los errores transitorios ofrezcan al jugador Retry/Use Offline en lugar de un error definitivo.
* **Fuera de proceso:** esté preparado para un error sin procesar de `PFGameSaveFilesAddUserWithUiAsync` antes de cualquier interfaz de usuario (servicio o configuración). Reintente los transitorios; muestre los problemas de configuración como errores.
* Condicione el juego al resultado final: `S_OK` + conectado → jugar en línea; `S_OK` + no conectado → jugar sin conexión (advierta al jugador de que las partidas guardadas no se sincronizarán); cancelación o error sin carpeta → bloquear el juego.

## Contenido relacionado

* [Modo sin conexión de Game Saves](/es/services/playfab/player-progression/game-saves/offline)
* [Devoluciones de llamada de la interfaz de usuario de Game Saves](/es/services/playfab/player-progression/game-saves/ui-callbacks)
* [Conflictos de Game Saves](/es/services/playfab/player-progression/game-saves/conflicts)
* [Cambios de dispositivo activo en Game Saves](/es/services/playfab/player-progression/game-saves/activedevicechanges)


## Related topics

- [Preguntas frecuentes sobre los vuelos del XBOX Insider Program](/es/publishing/game-publishing/publishing-processes/managed-creators/publishing-processes-xbox-flighting-faq.md)
- [Preguntas frecuentes sobre Economy versión 2 (V2)](/es/services/playfab/economy-monetization/economy-v2/faq.md)
- [Información general de Game Saves](/es/build/core-features/common/game-save/game-saves-overview.md)
- [Preguntas más frecuentes sobre GameInput](/es/build/core-features/common/input/overviews/input-faq.md)
- [Preguntas frecuentes sobre XBOX Game Publisher Insights](/es/publishing/game-publishing/concepts/game-publisher-insights/game-publisher-insights-faq.md)
