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

# XUserAddByIdWithUiAsync

> XUserAddByIdWithUiAsync

# XUserAddByIdWithUiAsync

Agrega de forma asincrónica un usuario a una sesión de juego basándose en un XUID procedente de una invitación de juego. Esta función solo debe usarse en respuesta
a una invitación de juego.

## Sintaxis

```cpp theme={null}
HRESULT XUserAddByIdWithUiAsync(  
         uint64_t userId,  
         XAsyncBlock* async  
)  
```

### Parámetros

*userId*   \_In\_\
Tipo: uint64\_t

XUID del usuario que se va a agregar. Este XUID debe obtenerse analizando el inviteUri recibido en la devolución de llamada del juego
que se registró con [XGameInviteRegisterForEvent](/reference/system/xgameinvite/functions/xgameinviteregisterforevent).

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

Un [XAsyncBlock](/reference/system/xasync/structs/xasyncblock) para sondear el estado de la llamada y recuperar los resultados de la llamada.

### Valor devuelto

Tipo: HRESULT

Código de error o de operación correcta HRESULT.
Para obtener una lista de códigos de error, consulte [Códigos de error](/reference/errorcodes).

## Comentarios

**XUserAddByIdWithUiAsync** inicia una operación asincrónica para agregar un usuario al juego. Use
[XUserAddByIdWithUiResult](/reference/system/xuser/functions/xuseraddbyidwithuiresult) para recuperar los resultados de la operación.

Al trabajar con invitaciones de juego, en consola siempre existe la posibilidad de que el XUID de la persona
especificada en la invitación de juego no sea la persona que ya ha iniciado sesión en el juego. **XUserAddByIdWithUiAsync**
permite al juego agregar ese usuario mediante el XUID que se analiza a partir del URI de la invitación.

Esta función intentará agregar el usuario sin mostrar interfaz de usuario. La única razón por la que puede mostrarse una interfaz de usuario es
que el usuario necesite resolver un problema con su token. En consola, mostrar la interfaz de usuario debería ser poco frecuente.

Si el usuario no ha iniciado sesión en el dispositivo, **XUserAddByIdWithUiResult** devolverá E\_GAMEUSER\_USER\_NOT\_FOUND.

Debe cerrar cada identificador XUserHandle que recupere de una API de XUsers una sola vez llamando a
[XUserCloseHandle](/reference/system/xuser/functions/xuserclosehandle).

Para obtener invitaciones de juego, los desarrolladores deben suscribirse a [XGameInviteCallback](/reference/system/xgameinvite/functions/xgameinviteeventcallback)
llamando a [XGameInviteRegisterForEvent](/reference/system/xgameinvite/functions/xgameinviteregisterforevent). Cuando se invoca esta devolución de llamada, los juegos deben analizar el inviteUri que reciben y determinar el XUID del usuario que recibe esa invitación. En ese momento, es posible que el juego quiera obtener
un XUserHandle para la persona que recibe la invitación. El siguiente código muestra cómo funciona esto.

```cpp theme={null}
// Assumptions:
// 1. The game has previously registered for this callback using XGameInviteRegisterForEvent
// 2. The game has function: uint64_t GetXuidFromInviteUri(const char* inviteUri)
// 3. There is already a global task queue, g_GlobalQueue
 
void MyGameInviteEventCallback(void* context, const char* inviteUri)
{
   XAsyncBlock* asyncBlock = new XAsyncBlock();
   asyncBlock->queue = g_GlobalQueue;
   asyncBlock->callback = [](XAsyncBlock* ab)
   {
      XUserHandle userHandle;
      if(SUCCEEDED(XUserAddByIdWithUiResult(ab, &userHandle)))
      {
         // Copy this XUserHandle to some location that the game will use later or
         // Do whatever actions you want with this user

         XUserCloseHandle(userHandle);
      }
      else
      {
         // Since you didn't successfully add the user, setup your game state so that 
         // you are in a good place, likely a start menu
      }
      delete ab;
   }

   
   if(FAILED(XUserAddByIdWithUiAysnc(GetXuidFromInviteUri(inviteUri), asyncBlock)))
   {
      delete asyncBlock;
   }
}
```

## Requisitos

**Encabezado:** XUser.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, , Steam Deck,  consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

[XUser](/reference/system/xuser/xuser_members)\
[XUserCloseHandle](/reference/system/xuser/functions/xuserclosehandle)


## Related topics

- [PFAuthenticationLoginWithXUserRequest](/es/services/playfab/api-references/c/pfauthenticationtypes/structs/pfauthenticationloginwithxuserrequest.md)
- [XUser](/es/reference/system/xuser/xuser_members.md)
- [Contenedores de API de C# de Unity para el GDK](/es/build/gdk-and-engines/unity/unity-api-wrappers.md)
- [XUserAddByIdWithUiResult](/es/reference/system/xuser/functions/xuseraddbyidwithuiresult.md)
- [XUserFindControllerForUserWithUiResult](/es/reference/system/xuser/functions/xuserfindcontrollerforuserwithuiresult.md)
