> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Utilisation des API des services Xbox

> Initialisez GRTS, créez une XTaskQueue, configurez le traçage HttpClient et appelez XblInitialize pour commencer à utiliser les API C de XSAPI pour XBOX Live dans votre titre.

## Initialiser Gaming Runtime Services

Les XSAPI dépendent de Gaming Runtime Services (GRTS). Avant d'appeler une XSAPI, initialisez GRTS comme suit.

```cpp theme={null}
#include <XGameRuntimeInit.h>
...
HRESULT hr = XGameRuntimeInitialize();
```

## Créer une XTaskQueue (facultatif)

La plupart des XSAPI sont des API asynchrones qui nécessitent l'utilisation d'une file d'attente de tâches. Il s'agit d'une API qui permet de mettre en file d'attente le travail et les rappels d'achèvement des tâches. Pour en savoir plus sur `XTaskQueue` et les différents modes de distribution, consultez [Conception de la file d'attente de tâches asynchrones](https://docs.xbox.com/fr/build/core-features/common/async/async-task-queue-design.md).

Par exemple, le code suivant crée une file d'attente de tâches à l'aide d'un pool de threads système.

```cpp theme={null}
#include <XTaskQueue.h>
...
XTaskQueueHandle queue = nullptr;

HRESULT hr = XTaskQueueCreate(
    XTaskQueueDispatchMode::ThreadPool,
    XTaskQueueDispatchMode::ThreadPool,
    &queue)
```

Veillez à restituer au système le handle de la file d'attente de tâches obtenu lorsque vous n'en avez plus besoin.

```cpp theme={null}
XTaskQueueCloseHandle(queue);
queue = nullptr;
```

Si vous choisissez de ne pas créer votre propre file d'attente de tâches, veillez à transmettre `nullptr` lorsqu'un handle de file d'attente est requis. Lorsque `nullptr` est utilisé, le système de tâches utilise `ThreadPool` par défaut. Ce comportement peut être remplacé en appelant [XTaskQueueSetCurrentProcessTaskQueue](https://docs.xbox.com/fr/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue.md).

## Configurer le traçage HttpClient (facultatif)

Pour afficher des informations de débogage supplémentaires à l'exécution, veillez à configurer la fonctionnalité de traçage de `HttpClient`.

Le code suivant définit le niveau de traçage de `HttpClient` et active la sortie des informations du débogueur.

```cpp theme={null}
HCSettingsSetTraceLevel(HCTraceLevel::Verbose);
HCTraceSetTraceToDebugger(true);
```

## Initialiser XSAPI

*Initialisez XSAPI* avant d'appeler une XSAPI.

```cpp theme={null}
#include <xsapi-c/services-c.h>
...
XblInitArgs xblArgs = {};
xblArgs.queue = queue; // TODO: Only include this line if you've chosen to create your own XTaskQueue. Otherwise, by default, this line isn't needed.
xblArgs.scid = "00000000-0000-0000-0000-000000000000"; // TODO: Add your scid here.

HRESULT hr = XblInitialize(&xblArgs);
if (FAILED(hr))
{
    // TODO: Handle failure.
}
```

## Connecter l'utilisateur au réseau XBOX

La plupart des XSAPI exigent que l'utilisateur se connecte d'abord au réseau XBOX.
Pour connecter un utilisateur au réseau XBOX, consultez l'exemple de code de l'[API XUserAddAsync](https://docs.xbox.com/fr/build/core-features/common/user/xuser_howto_best_practice_signing_in.md).

## Créer un objet XboxLiveContext

Un objet `XboxLiveContext` représente le contexte de service associé à un utilisateur particulier.

La plupart des XSAPI vous demandent de transmettre un `XboxLiveContextHandle` qui représente le contexte de l'utilisateur appelant.
Pour créer un contexte XBOX Live (réseau), utilisez l'[API XblContextCreateHandle](https://docs.xbox.com/fr/reference/live/xsapi-c/xbox_live_context_c/functions/xblcontextcreatehandle.md) et transmettez l'objet `XUserHandle` obtenu à l'étape précédente.

## Effectuer un appel de service aux services XBOX

Maintenant que vous disposez d'un objet `XboxLiveContext` associé à l'objet `XUserHandle` de l'utilisateur connecté, vous pouvez effectuer des appels de service aux services XBOX.

Par exemple, pour récupérer la liste d'amis de l'utilisateur, vous pouvez procéder comme suit :

```cpp theme={null}
#include <xsapi-c/services-c.h>
...
auto asyncBlock = std::make_unique<XAsyncBlock>(); 
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.

    XblSocialRelationshipResultHandle relationshipResult{ nullptr };
    HRESULT hr = XblSocialGetSocialRelationshipsResult(asyncBlock, &state.socialResultHandle);

    // Use the result in the game.

    XblSocialRelationshipResultCloseHandle(relationshipResult);
};

HRESULT hr = XblSocialGetSocialRelationshipsAsync(
    xboxLiveContext,
    xboxUserId,
    socialRelationshipFilter,
    0,
    0,
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    // The call succeeded. Release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*.
    asyncBlock.release();
}
// End of code example.
```

## Nettoyage de XSAPI

Il n'est nécessaire d'appeler `XblCleanupAsync()` dans aucun scénario.

Dans un scénario d'arrêt de l'application, il n'existe actuellement aucune API `XblCleanup()` synchrone que vous puissiez appeler. Par nature, l'arrêt d'une application doit être géré de manière synchrone et immédiate. Par conséquent, on s'appuie sur le nettoyage normal au niveau du système d'exploitation, qui a lieu lors de l'arrêt du processus de l'application, et celui-ci suffit dans cette situation.

Dans un scénario où l'application est suspendue, XSAPI se charge de libérer puis de restaurer les ressources système nécessaires à son fonctionnement afin de maintenir ses fonctionnalités après la reprise.

`XblCleanupAsync()` peut néanmoins être utilisée dans les cas où votre jeu choisit délibérément de libérer les ressources allouées à XSAPI.


## Related topics

- [API des services XBOX](https://docs.xbox.com/fr/services/xbox-services/fundamentals/xbox-services-api/index.md)
- [Utilisation côté client des privilèges utilisateur des services XBOX](https://docs.xbox.com/fr/services/xbox-services/fundamentals/identity/privileges/concepts/live-user-privileges-client.md)
- [Authentification des services XBOX](https://docs.xbox.com/fr/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/live-xbox-live-authentication.md)
- [Gestion côté serveur des privilèges utilisateur des services Xbox](https://docs.xbox.com/fr/services/xbox-services/fundamentals/identity/privileges/concepts/live-user-privileges-server.md)
- [Utilisation des wrappers C# pour les API GDK dans votre projet Unity](https://docs.xbox.com/fr/build/gdk-and-engines/unity/unity-api-wrappers.md)
