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

Fournit et initialise de façon asynchrone un handle de fournisseur XGameSave.

## Syntaxe

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

### Paramètres

*requestingUser*   \_In\_\
Type : XUserHandle

Handle vers un utilisateur XBOX Live.

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

ID de configuration de service (SCID).

*syncOnDemand*   \_In\_\
Type : bool

Lorsque la valeur est true, syncOnDemand ne télécharge les données depuis le service que si nécessaire. Ne fonctionne pas si l'appareil est hors connexion.
La valeur true peut entraîner l'affichage d'une interface de progression de la synchronisation.

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

Contient les informations de l'appel asynchrone. Cela inclut le contexte d'appel et un appel à la fonction
[XGameSaveInitializeProviderResult](/fr/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult).

### Valeur de retour

Type : HRESULT

Résultat de la fonction.

## Remarques

Cette fonction doit être appelée avec succès avant toute utilisation des autres API XGameSave.

<Note>Pour fonctionner, l'API XGameSave exige que l'ID de titre et l'ID de configuration de service (SCID) de votre titre soient</Note>
correctement configurés. Pour plus d'informations sur ces ID requis, consultez [Configuration de sandbox pour le développement
XBOX Live](/fr/services/xbox-services/fundamentals/sandboxes/live-setting-up-sandboxes). Votre jeu doit être activé pour XBOX Live dans Partner Center.

Si vous ne configurez pas correctement votre SCID et votre ID de titre, vos appels à l'API XSaveGame échoueront avec le code d'erreur suivant :

E\_GS\_NO\_ACCESS - 0x80830002 - L'opération a échoué, car le titre n'a pas accès aux espaces de stockage des conteneurs.

Le **XGameSaveProviderHandle** résultant est obtenu à partir de la fonction
[XGameSaveInitializeProviderResult](/fr/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult). Il s'agit du handle que vous utiliserez pour
accéder à votre **XGameSaveProvider**.

Lorsque cette API est appelée avec *syncOnDemand* défini sur true, elle se comporte de la même façon du point de vue de l'appelant, mais elle entraîne
certaines différences de comportement dans le reste de l'API. Le **XGameSaveProvider** *SyncOnDemand* ne télécharge les données depuis
le service que si nécessaire, mais cela présente l'inconvénient que toute opération sur un conteneur peut alors être retardée,
et ce retard peut entraîner l'affichage d'une interface de progression de la synchronisation pour l'utilisateur. L'utilisation de l'une des méthodes suivantes peut
forcer une synchronisation :

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

Un autre inconvénient est que, si l'appareil est hors connexion ou rencontre des problèmes de connectivité, l'accès au conteneur est
impossible.

\##Exemple

```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); 
    } 
} 
```

Les jeux ne peuvent pas combiner l'utilisation de XGameSaveFiles et celle de XGameSave. Les jeux doivent choisir le système de sauvegarde dans le cloud
qu'ils souhaitent utiliser. Si le jeu utilise XGameSaveFiles et appelle ensuite XGameSaveInitializeProvider, l'appel échoue
avec E\_GS\_PROVIDER\_MISMATCH. De même, si le jeu utilisait XGameSave et appelle ensuite XGameSaveFilesGetFolderWithUiAsync,
cet appel échoue également avec E\_GS\_PROVIDER\_MISMATCH.

## Configuration requise

**En-tête :** XGameSave.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Documentation conceptuelle

* [Objectifs de conception et améliorations de la programmation asynchrone](/fr/build/core-features/common/async/async-whitepaper)
* [Outils Game Saves](/fr/build/core-features/common/game-save/game-saves-tools)

## Voir aussi

[XGameSave](/fr/reference/system/xgamesave/xgamesave_members)\
[XGameSaveInitializeProviderResult](/fr/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult)\
[XGameSaveInitializeProvider](/fr/reference/system/xgamesave/functions/xgamesaveinitializeprovider)\
[Débogage des sauvegardes de jeu](/fr/build/core-features/common/game-save/game-saves-debugging)


## Related topics

- [XGameSaveInitializeProviderAsync](/reference/system/xgamesave/functions/xgamesaveinitializeproviderasync.md)
- [XGameSaveInitializeProviderResult](/reference/system/xgamesave/functions/xgamesaveinitializeproviderresult.md)
- [XGameSaveInitializeProvider](/reference/system/xgamesave/functions/xgamesaveinitializeprovider.md)
