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

# XGameSaveInitializeProviderAsync

> XGameSaveInitializeProviderAsync

# XGameSaveInitializeProviderAsync

Proporciona e inicializa de forma asincrónica un identificador de proveedor de XGameSave.

## Sintaxis

```cpp theme={null}
HRESULT XGameSaveInitializeProviderAsync(  
         XUserHandle requestingUser,  
         const char* configurationId,  
         bool syncOnDemand,  
         XAsyncBlock* async  
)  
```

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

*async*   \_In\_\
Tipo: [XAsyncBlock\*](/reference/system/xasync/structs/xasyncblock)

Contiene la información de la llamada asincrónica. Esto incluye el contexto de llamada y una llamada a la función
[XGameSaveInitializeProviderResult](/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult).

### Valor devuelto

Tipo: HRESULT

Resultado de la función.

## Comentarios

Se debe llamar correctamente a esta función antes de usar otras API de XGameSave.

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

El **XGameSaveProviderHandle** resultante se obtiene de la función
[XGameSaveInitializeProviderResult](/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult). Este es el identificador que usará para
acceder a su **XGameSaveProvider**.

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.

\##Ejemplo

```cpp theme={null}
// ASYNC Init - can be kicked off from a time sensitive thread 
//              work and callback will happen from platform provided threads 
void Sample::_InitializeAsync() 
{ 
    HRESULT hr; 
  
    struct InitContext 
    { 
        Sample* self; 
        XAsyncBlock async; 
    }; 
  
    InitContext* ctx = new InitContext{}; 
    if (ctx) 
    { 
        ctx->self = this; 
        ctx->async.context = ctx; 
        ctx->async.callback = [](XAsyncBlock* async) 
        { 
            auto ctx = reinterpret_cast<InitContext*>(async->context); 
            auto self = ctx->self; 
            XGameSaveProviderHandle provider = nullptr; 
            HRESULT hr = XGameSaveInitializeProviderResult(async, &provider); 
            if (SUCCEEDED(hr)) 
            { 
                self->_provider = provider; 
            } 
            else 
            { 
                self->_HandleInitializeErrors(self->_xalUser, hr); 
            } 
            delete ctx; 
        }; 
    } 
    else 
    { 
        hr = E_OUTOFMEMORY; 
    } 
  
    if (SUCCEEDED(hr)) 
    { 
        hr = XGameSaveInitializeProviderAsync(this->_xalUser, "SERVICE_CONFIG_ID-DEADBEEF0123", false, &ctx->async); 
    } 
    if (FAILED(hr)) 
    { 
        // if we didn't setup the async we need to cleanup our tracking context 
        delete ctx; 
        _HandleInitializeErrors(this->_xalUser, 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

* [Objetivos de diseño y mejoras de la programación asincrónica](/build/core-features/common/async/async-whitepaper)
* [Herramientas de partidas guardadas](/build/core-features/common/game-save/game-saves-tools)

## Consulte también

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


## Related topics

- [XGameSaveInitializeProvider](/es/reference/system/xgamesave/functions/xgamesaveinitializeprovider.md)
- [XGameSaveInitializeProviderResult](/es/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult.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)
