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

# XGameSaveInitializeProvider

> XGameSaveInitializeProvider

# XGameSaveInitializeProvider

Proporciona e inicializa un identificador de proveedor de XGameSave.

## Sintaxis

```cpp theme={null}
HRESULT XGameSaveInitializeProvider(  
         XUserHandle requestingUser,  
         const char* configurationId,  
         bool syncOnDemand,  
         XGameSaveProviderHandle* provider  
)  
```

### Parámetros

*requestingUser*   \_In\_\
Tipo: XUserHandle

Identificador de un usuario de XBOX Live.

*configurationId*   \_In\_z\_\
Tipo: char\*

Identificador de configuración de servicio (SCID).

*syncOnDemand*   \_In\_\
Tipo: bool

Cuando es true, syncOnDemand solo descarga datos del servicio si es necesario. No funciona si el dispositivo está sin conexión.
Establecerlo en true puede hacer que se muestre la interfaz de usuario de progreso de sincronización.

*provider*   \_Outptr\_result\_nullonfailure\_\
Tipo: XGameSaveProviderHandle\*

Identificador del proveedor de XGameSave que se va a crear.

### Valor devuelto

Tipo: HRESULT

Resultado de la función.

#### Errores comunes

* E\_GS\_USER\_CANCELED
* E\_GS\_USER\_NOT\_REGISTERED\_IN\_SERVICE
* E\_GS\_NO\_ACCESS
* E\_GS\_NO\_SERVICE\_CONFIGURATION

Los errores devueltos con más frecuencia son E\_OUTOFMEMORY, E\_INVALIDARG,

## Comentarios

<Note>No es seguro llamar a esta función en un subproceso sensible al tiempo. Para obtener más información, consulte [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads).</Note>

Se debe llamar correctamente a esta función antes de usar otras API de XGameSave. Esta función no debe
llamarse en el subproceso de interfaz de usuario del juego, ya que puede bloquearse y, potencialmente, mostrar la interfaz de usuario al usuario mientras sincroniza
las partidas guardadas del jugador. Si necesita realizar la inicialización desde el subproceso de interfaz de usuario, considere la posibilidad de llamar a
[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync).

<Note>La API XGameSave requiere que el título tenga su identificador de título y su identificador de configuración de servicio (SCID)</Note>
configurados correctamente para funcionar. Para obtener más información sobre estos identificadores necesarios, consulte [Configuración de sandboxes para el desarrollo de XBOX
Live](/services/xbox-services/fundamentals/sandboxes/live-setting-up-sandboxes). El juego debe estar habilitado para XBOX Live en Partner Center.

Si no configura correctamente el SCID y el identificador de título, las llamadas a la API XSaveGame producirán el siguiente código de error:

E\_GS\_NO\_ACCESS - 0x80830002 - Error en la operación porque el título no tiene acceso a los espacios de almacenamiento de contenedores.

Cuando se llama a esta API con *syncOnDemand* establecido en true, se comporta igual desde la perspectiva del autor de la llamada, pero provoca
algunas diferencias de comportamiento en el resto de la API. El **XGameSaveProvider** con *SyncOnDemand* solo descargará datos del
servicio si es necesario, pero esto también tiene el inconveniente de que cualquier operación de contenedor puede retrasarse en este caso,
y este retraso puede hacer que se muestre alguna experiencia de usuario para indicar el progreso de la sincronización. El uso de cualquiera de los métodos siguientes puede
forzar una sincronización:

* [XGameSaveCreateUpdate](/reference/system/xgamesave/functions/xgamesavecreateupdate)
* [XGameSaveEnumeratorBlobInfo](/reference/system/xgamesave/functions/xgamesaveenumerateblobinfo)
* [XGameSaveEnumerateBlobInfoByName](/reference/system/xgamesave/functions/xgamesaveenumerateblobinfobyname)
* [XGameSaveEnumerateContainerInfo](/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfo)
* [XGameSaveEnumerateContainerInfoByName](/reference/system/xgamesave/functions/xgamesaveenumeratecontainerinfobyname)

Otro inconveniente sería que, si el dispositivo está sin conexión o tiene problemas de conectividad, el acceso al contenedor es
imposible. Existe una versión asincrónica de esta función denominada
[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)

```cpp theme={null}
// SYNC Init - should not be called on time sensitive thread 
//             as this will block until the operation is complete 
void Sample::_InitializeSync() 
{ 
    HRESULT hr; 
    XGameSaveProviderHandle provider = nullptr; 
    hr = XGameSaveInitializeProvider(this->_xalUser, "SERVICE_CONFIG_ID-DEADBEEF0123", false, &provider); 
    if (SUCCEEDED(hr)) 
    { 
        this->_provider = provider; 
    } 
    else 
    { 
        _HandleInitializeErrors(this->_xalUser, hr); 
    } 
} 
 
// handle initialization errors  
void Sample::_HandleInitializeErrors(XUserHandle userContext, HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_USER_CANCELED: 
        printf("User %p canceled initialization hr=0x%08x\n", userContext, hr); 
        break; 
    case E_GS_USER_NOT_REGISTERED_IN_SERVICE: 
        printf("User %p has no service registration\n", userContext); 
        break; 
    /* NOTE These should only be seen if there is a configuration issue */ 
    case E_GS_NO_ACCESS: 
    case E_GS_NO_SERVICE_CONFIGURATION: 
        printf("Problems with Service Configuration registration\n"); 
        break; 
    case S_OK: 
        break; 
    default: 
        printf("Unknown initialization error for User %p hr=0x%08X\n", userContext, hr); 
    } 
} 
```

Los juegos no pueden combinar el uso de XGameSaveFiles con el uso de XGameSave. Los juegos deben elegir qué sistema de guardado en la nube
quieren usar. Si el juego usa XGameSaveFiles y más adelante llama a XGameSaveInitializeProvider, se producirá un error
E\_GS\_PROVIDER\_MISMATCH. Del mismo modo, si el juego usaba XGameSave y más adelante llama a XGameSaveFilesGetFolderWithUiAsync,
también se producirá un error E\_GS\_PROVIDER\_MISMATCH.

## Requisitos

**Encabezado:** XGameSave.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Documentación conceptual

* [Herramientas de partidas guardadas](/build/core-features/common/game-save/game-saves-tools)
* [Subprocesos sensibles al tiempo](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## Consulte también

[XGameSave](/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync)\
[Depuración de partidas guardadas](/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveInitializeProviderAsync](/es/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync.md)
- [XGameSaveCloseProvider](/es/reference/system/xgamesave/functions/xgamesavecloseprovider.md)
- [Herramientas de Game Saves](/es/build/core-features/common/game-save/game-saves-tools.md)
- [Tutoriales y ejemplos de Game Saves](/es/build/core-features/common/game-save/game-saves-walkthroughs-and-samples.md)
- [Información general de la API XGameSave](/es/build/core-features/common/game-save/xgamesave.md)
