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

# Cómo usar las API de servicios XBOX (XSAPI)

> Inicialice GRTS, cree un XTaskQueue, configure el seguimiento de HttpClient y llame a XblInitialize para empezar a usar las API de C de XSAPI para XBOX Live en su título.

## Inicializar Gaming Runtime Services

Las XSAPI dependen de Gaming Runtime Services (GRTS). Antes de llamar a cualquier XSAPI, inicialice GRTS, como se muestra a continuación.

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

## Crear un XTaskQueue (opcional)

La mayoría de las XSAPI son API asincrónicas y requieren el uso de una cola de tareas. Es una API para poner en cola el trabajo y para las devoluciones de llamada de finalización de tareas. Para obtener más información sobre `XTaskQueue` y los diferentes modos de distribución, consulte [Diseño de la cola de tareas asincrónicas](/build/core-features/common/async/async-task-queue-design).

Por ejemplo, el código siguiente crea una cola de tareas usando un grupo de subprocesos del sistema.

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

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

Asegúrese de devolver al sistema el identificador de cola de tareas adquirido cuando ya no sea necesario.

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

Si decide no crear su propia cola de tareas, asegúrese de pasar `nullptr` cuando se necesite un identificador de cola. Cuando se usa `nullptr`, el sistema de tareas usa `ThreadPool` de forma predeterminada. Esto puede invalidarse llamando a [XTaskQueueSetCurrentProcessTaskQueue](/reference/system/xtaskqueue/functions/xtaskqueuesetcurrentprocesstaskqueue).

## Configurar el seguimiento de HttpClient (opcional)

Para ver información de depuración adicional en tiempo de ejecución, asegúrese de configurar la funcionalidad de seguimiento de `HttpClient`.

El código siguiente establece el nivel de seguimiento de `HttpClient` y habilita la salida de información para el depurador.

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

## Inicializar XSAPI

*Inicialice XSAPI* antes de llamar a cualquier 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.
}
```

## Iniciar sesión del usuario en la red de XBOX

La mayoría de las XSAPI requieren que el usuario inicie sesión primero en la red de XBOX (también conocida como XBOX Live).
Para que un usuario inicie sesión en la red de XBOX, consulte el ejemplo de código de la [API XUserAddAsync](/build/core-features/common/user/xuser_howto_best_practice_signing_in).

## Crear un objeto XboxLiveContext

Un objeto `XboxLiveContext` representa el contexto de servicio asociado a un usuario determinado.

La mayoría de las XSAPI requieren que pase un `XboxLiveContextHandle` que representa el contexto del usuario que realiza la llamada.
Para crear un contexto de XBOX Live (red), use la [API XblContextCreateHandle](/reference/live/xsapi-c/xbox_live_context_c/functions/xblcontextcreatehandle) y pase el objeto `XUserHandle` adquirido en el paso anterior.

## Realizar una llamada de servicio a los servicios XBOX

Ahora que tiene un objeto `XboxLiveContext` asociado al objeto `XUserHandle` del usuario que ha iniciado sesión, puede realizar llamadas de servicio a los servicios XBOX.

Por ejemplo, para recuperar la lista de amigos del usuario, puede hacer lo siguiente:

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

## Limpieza de XSAPI

No es necesario llamar a `XblCleanupAsync()` en ningún escenario.

En un escenario de terminación de la aplicación, actualmente no existe ninguna API `XblCleanup()` sincrónica a la que pueda llamar. La terminación de la aplicación, por la naturaleza de su ciclo de vida, debe controlarse de forma sincrónica e inmediata. Como resultado, se confía en la limpieza normal a nivel del sistema operativo, que se produce con la terminación del proceso de la aplicación, y esta es suficiente para esta situación.

En un escenario en el que la aplicación se suspende, XSAPI se encarga de liberar y, después, restaurar los recursos del sistema necesarios para su funcionamiento, con el fin de mantener la funcionalidad tras la reanudación.

`XblCleanupAsync()` todavía puede usarse en los casos en que su juego decida liberar deliberadamente los recursos asignados a XSAPI.


## Related topics

- [API de servicios XBOX](/es/services/xbox-services/fundamentals/xbox-services-api/index.md)
- [Información general sobre la API de servicios XBOX](/es/services/xbox-services/fundamentals/xbox-services-api/live-introduction-to-xbox-live-apis.md)
- [Limitación de velocidad específica](/es/services/xbox-services/develop/best-practices/live-fine-grained-rate-limiting.md)
- [Información general sobre los servicios XBOX](/es/services/xbox-services/fundamentals/live-xbl-overview.md)
- [Procedimientos recomendados para llamar a los servicios XBOX](/es/services/xbox-services/develop/best-practices/live-best-practices-calling-xbl.md)
