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

# Procedimiento: práctica recomendada para iniciar la sesión de un usuario

> Procedimiento: práctica recomendada para iniciar la sesión de un usuario

## Ejemplo que muestra cómo obtener de forma silenciosa el usuario predeterminado

Un juego necesita establecer un usuario inicial. Este ejemplo muestra cómo lograrlo lo antes
posible. Normalmente querrás seguir este patrón si los menús de tu juego quieren
"saludar" al usuario con algo que lo identifique claramente y no quieres mostrar
la interfaz de usuario de inmediato.

```c++ theme={null}
HRESULT Identity_TrySignInDefaultUserSilently(_In_ XTaskQueueHandle asyncQueue)
{
    XAsyncBlock* asyncBlock = new XAsyncBlock();
    asyncBlock->queue = asyncQueue;
    asyncBlock->callback = Identity_TrySignInDefaultUserSilently_Callback;

    // Request to silently sign in the default user.
    HRESULT hr = XUserAddAsync(XUserAddOptions::AddDefaultUserSilently, asyncBlock);

    if (FAILED(hr))
    {
        delete asyncBlock;
    }

    return hr;
}

void CALLBACK Identity_TrySignInDefaultUserSilently_Callback(_In_ XAsyncBlock* asyncBlock)
{
    // NOTE: XUserAddResult will add a Ref to the passed-in XUserHandle.
    XUserHandle newUser = nullptr;
    HRESULT hr = XUserAddResult(asyncBlock, &newUser);

    if (SUCCEEDED(hr))
    {
        // TO DO: create Xbox services context and do something with that user.
        // ...
    }
    else 
    {
        // You are here because there's no default user or because of an error.
        // Display some UI, such as "Press A or Enter to continue," and try the sign-in with the UI flow.
    }

    delete asyncBlock;
}
```

## Ejemplo que muestra cómo obtener un usuario inicial

Al igual que en el ejemplo anterior, el juego necesita establecer un usuario inicial. En este caso,
el juego acepta que se muestre la interfaz de usuario en el momento en que solicita un usuario. La interfaz de usuario solo
se muestra si el sistema no puede determinar el usuario predeterminado.

```c++ theme={null}
HRESULT Identity_TrySignInDefaultUser(_In_ XTaskQueueHandle asyncQueue)
{
    XAsyncBlock* asyncBlock = new XAsyncBlock();
    asyncBlock->queue = asyncQueue;
    asyncBlock->callback = Identity_TrySignInDefaultUser_Callback;

    // Request to silently sign in the default user.
    HRESULT hr = XUserAddAsync(XUserAddOptions::AddDefaultUserAllowingUI, asyncBlock);

    if (FAILED(hr))
    {
        delete asyncBlock;
    }

    return hr;
}

void CALLBACK Identity_TrySignInDefaultUser_Callback(_In_ XAsyncBlock* asyncBlock)
{
    // NOTE: XUserAddResult will add a Ref to the passed-in XUserHandle.
    XUserHandle newUser = nullptr;
    HRESULT hr = XUserAddResult(asyncBlock, &newUser);

    if (SUCCEEDED(hr))
    {
        // TO DO: create Xbox services context and do something with that user.
        // ...
    }
    else
    {
        // You are probably here because someone canceled out of the UI flow to 
        // sign in or an expected error occurred.
        // Display some UI, such as "Press A or Enter to continue," and try the sign-in 
        // again with the UI flow.
    }

    delete asyncBlock;
}

```

## Consulte también

[Identidad del usuario y XUser](/build/core-features/common/user/player-identity-xuser)


## Related topics

- [Usuarios](/es/build/core-features/common/user/user-toc.md)
- [Identidad de usuario y XUser](/es/build/core-features/common/user/player-identity-xuser.md)
- [Identidad de usuario y API de XUser en el GDK](/es/build/core-features/common/user/index.md)
- [Conceptos básicos y prácticas recomendadas de inicio de sesión](/es/services/playfab/identity/player-identity/login/login-basics-best-practices.md)
- [XAG 123: Prácticas recomendadas de salud mental](/es/build/game-principles/accessibility/xag-deep-dives/xag-123-mental-health-best-practices.md)
