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

Adiciona de forma assíncrona um usuário a uma sessão de jogo com base em um XUID de um convite de jogo. Esta função só deve ser usada em resposta
a um convite de jogo.

## Sintaxe

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

### Parâmetros

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

XUID do usuário a ser adicionado. Esse XUID deve ser obtido analisando o inviteUri recebido no
retorno de chamada do jogo que foi registrado com [XGameInviteRegisterForEvent](/pt-BR/reference/system/xgameinvite/functions/xgameinviteregisterforevent).

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

Um [XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock) para sondar o status da chamada e recuperar os resultados da chamada.

### Valor retornado

Tipo: HRESULT

Código de sucesso ou de erro HRESULT.
Para obter uma lista de códigos de erro, consulte [Códigos de erro](/pt-BR/reference/errorcodes).

## Comentários

**XUserAddByIdWithUiAsync** inicia uma operação assíncrona para adicionar um usuário ao jogo. Use
[XUserAddByIdWithUiResult](/pt-BR/reference/system/xuser/functions/xuseraddbyidwithuiresult) para recuperar os resultados da operação.

Ao lidar com convites de jogo, sempre existe a possibilidade, no console, de que o XUID da pessoa
especificada no convite de jogo não seja a pessoa que já está conectada ao jogo. **XUserAddByIdWithUiAsync**
permite que o jogo adicione esse usuário usando o XUID analisado do URI do convite.

Esta função tentará adicionar o usuário sem exibir a interface do usuário. O único motivo pelo qual a interface do usuário pode ser exibida é
que o usuário precisa resolver um problema com seu token. No console, a exibição da interface do usuário deve ser incomum.

Se o usuário não estiver conectado ao dispositivo, **XUserAddByIdWithUiResult** retornará E\_GAMEUSER\_USER\_NOT\_FOUND.

Você deve fechar cada identificador XUserHandle recuperado de uma API XUsers apenas uma vez, chamando
[XUserCloseHandle](/pt-BR/reference/system/xuser/functions/xuserclosehandle).

Para receber convites de jogo, os desenvolvedores devem assinar o [XGameInviteCallback](/pt-BR/reference/system/xgameinvite/functions/xgameinviteeventcallback)
chamando [XGameInviteRegisterForEvent](/pt-BR/reference/system/xgameinvite/functions/xgameinviteregisterforevent). Quando esse retorno de chamada for invocado, os jogos devem analisar o inviteUri recebido e determinar o XUID do usuário que está recebendo o convite. Nesse ponto, o jogo pode querer obter
um XUserHandle para a pessoa que está recebendo o convite. O código a seguir demonstra como isso funciona.

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

**Cabeçalho:** XUser.h

**Biblioteca:** xgameruntime.lib

**Plataformas com suporte:** Windows, , Steam Deck,  consoles da família XBOX One e consoles XBOX Series

## Confira também

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


## Related topics

- [XUserAddByIdWithUiAsync](/reference/system/xuser/functions/xuseraddbyidwithuiasync.md)
- [PFAuthenticationLoginWithXUserRequest](/services/playfab/api-references/c/pfauthenticationtypes/structs/pfauthenticationloginwithxuserrequest.md)
- [XUser](/reference/system/xuser/xuser_members.md)
