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

Ajoute de façon asynchrone un utilisateur à une session de jeu en fonction d'un XUID provenant d'une invitation de jeu. Cette fonction ne doit être utilisée qu'en réponse
à une invitation de jeu.

## Syntaxe

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

### Paramètres

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

XUID de l'utilisateur à ajouter. Ce XUID doit être obtenu en analysant l'inviteUri reçu dans le rappel
du jeu qui a été inscrit avec [XGameInviteRegisterForEvent](/fr/reference/system/xgameinvite/functions/xgameinviteregisterforevent).

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

[XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock) permettant d'interroger l'état de l'appel et de récupérer les résultats de l'appel.

### Valeur de retour

Type : HRESULT

Code de réussite ou d'erreur HRESULT.
Pour obtenir la liste des codes d'erreur, consultez [Codes d'erreur](/fr/reference/errorcodes).

## Remarques

**XUserAddByIdWithUiAsync** démarre une opération asynchrone pour ajouter un utilisateur au jeu. Utilisez
[XUserAddByIdWithUiResult](/fr/reference/system/xuser/functions/xuseraddbyidwithuiresult) pour récupérer les résultats de l'opération.

Lors du traitement des invitations de jeu, il est toujours possible sur console que le XUID de la personne
spécifiée dans l'invitation de jeu ne corresponde pas à la personne déjà connectée au jeu. **XUserAddByIdWithUiAsync**
permet au jeu d'ajouter cet utilisateur à l'aide du XUID extrait de l'URI d'invitation.

Cette fonction tente d'ajouter l'utilisateur sans afficher d'interface utilisateur. La seule raison pour laquelle une interface utilisateur peut s'afficher est
que l'utilisateur doit résoudre un problème lié à son jeton. Sur console, l'affichage d'une interface utilisateur devrait être rare.

Si l'utilisateur n'est pas connecté sur l'appareil, **XUserAddByIdWithUiResult** retourne E\_GAMEUSER\_USER\_NOT\_FOUND.

Vous devez fermer une seule fois chaque handle XUserHandle que vous récupérez à partir d'une API XUsers en appelant
[XUserCloseHandle](/fr/reference/system/xuser/functions/xuserclosehandle).

Pour recevoir des invitations de jeu, les développeurs doivent s'abonner à [XGameInviteCallback](/fr/reference/system/xgameinvite/functions/xgameinviteeventcallback)
en appelant [XGameInviteRegisterForEvent](/fr/reference/system/xgameinvite/functions/xgameinviteregisterforevent). Lorsque ce rappel est appelé, les jeux doivent analyser l'inviteUri qu'ils reçoivent et déterminer le XUID de l'utilisateur qui reçoit cette invitation. À ce stade, le jeu peut vouloir obtenir
un XUserHandle pour la personne qui reçoit l'invitation. Le code suivant illustre ce fonctionnement.

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

## Configuration requise

**En-tête :** XUser.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** Windows, Steam Deck, consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[XUser](/fr/reference/system/xuser/xuser_members)\
[XUserCloseHandle](/fr/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)
- [XUserAddByIdWithUiResult](/reference/system/xuser/functions/xuseraddbyidwithuiresult.md)
