> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Réception d'invitations

> Ajoutez la gestion des invitations de jeu multijoueur à votre titre des services XBOX en inscrivant le protocole multijoueur et les rappels d'événement d'invitation XGameActivation.

Utilisez cette rubrique pour ajouter des invitations de jeu à votre titre des services XBOX. Pour recevoir des invitations multijoueurs, votre jeu s'inscrit au protocole multijoueur et aux rappels d'invitation de jeu. Votre jeu reçoit les invitations destinées à l'utilisateur local, puis intègre cet utilisateur à la session multijoueur.

## Prérequis

Pour recevoir des notifications d'invitation de jeu sur un PC Windows, installez la XBOX Game Bar. L'application XBOX Game Bar est installée par défaut sur Windows 10, version 1903 ou ultérieure du système d'exploitation. Appuyez sur **Touche Windows**+**G** pour lancer l'application XBOX Game Bar et vérifier qu'elle est correctement installée.

> [!NOTE]
>
> Si la XBOX Game Bar n'est pas installée sur votre PC Windows, vous pouvez l'installer depuis le [Microsoft Store](https://www.microsoft.com/store/productId/9NZKPSTSNW4P).

## Inscription au protocole multijoueur

L'inscription au protocole multijoueur indique au système comment lancer votre jeu lorsque l'utilisateur accepte une invitation de jeu multijoueur. Pour inscrire le protocole multijoueur, vous devez ajouter un élément `MultiplayerProtocol` à votre fichier [MicrosoftGame.config](https://docs.xbox.com/fr/build/core-features/common/game-config/MicrosoftGameConfig-toc.md), comme indiqué dans le code suivant.

```xml theme={null}
    <MultiplayerProtocol>true</MultiplayerProtocol>
```

Si votre package contient plusieurs exécutables, vous pouvez spécifier l'exécutable qui gère le protocole multijoueur à l'aide de l'attribut `Executable`, comme indiqué dans le code suivant.

```xml theme={null}
    <MultiplayerProtocol Executable="MyExecutableForMultiplayer.exe">true</MultiplayerProtocol>
```

## Inscription aux rappels d'invitation de jeu multijoueur

> [!NOTE]
>
> Les API `XGameInviteRegisterForEvent` et `XGameInviteUnregisterForEvent` sont désormais dépréciées. Utilisez plutôt [XGameActivationRegisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationregisterforevent.md) et [XGameActivationUnregisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationunregisterforevent.md). Pour obtenir des conseils de migration, consultez [XGameActivation](https://docs.xbox.com/fr/reference/system/xgameactivation/xgameactivation_members.md#remarks).

Pour recevoir les rappels d'invitation de jeu multijoueur, vous devez vous inscrire aux rappels d'activation à l'aide de l'API [XGameActivationRegisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationregisterforevent.md), comme indiqué dans le code suivant.

Pour plus d'informations sur l'inscription et la désinscription des rappels d'activation, consultez [XGameActivationRegisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationregisterforevent.md) et [XGameActivationUnregisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationunregisterforevent.md).

### C plat

```cpp theme={null}
#include <XTaskQueue.h>
#include <XGameActivation.h>  
  
XTaskQueueHandle g_taskQueue;  
XTaskQueueRegistrationToken g_activationToken;  
  
void CALLBACK OnActivation(void* context, const XGameActivationInfo* activationInfo)  
{  
    if (activationInfo->type == XGameActivationType::AcceptedGameInvite)
    {
        if (activationInfo->inviteUri != nullptr)
        {
            std::string inviteString(activationInfo->inviteUri);
            auto pos = inviteString.find("handle=");
            auto handleId = inviteString.substr(pos + 7, 36);
            // Now call XblMultiplayerManagerJoinLobby
        }
    }
}  
  
void InitializeGame()  
{  
    XGameActivationRegisterForEvent(g_taskQueue, nullptr, OnActivation, &g_activationToken);  
}  
  
void ShutdownGame()  
{  
    XGameActivationUnregisterForEvent(g_activationToken, true);  
}  
```

Pour gérer correctement le scénario « invitation acceptée depuis un état suspendu », le titre doit stocker l'`inviteUri` transmis à la méthode de gestionnaire `OnActivation()` de l'exemple de code ci-dessus depuis le rappel [XGameActivationRegisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationregisterforevent.md). Le titre doit ensuite attendre la notification `RegisterAppStateChangeNotification`, qui signale que le jeu a entièrement repris, avant d'agir sur la session à l'aide des détails fournis dans l'`inviteUri`.

Pour plus d'informations sur `RegisterAppStateChangeNotification`, consultez [Cycle de vie des jeux XBOX (rubrique sous NDA)](https://docs.xbox.com/fr/build/console-features/console-workflows/xbox-game-life-cycle.md).

## Analyse de l'inviteUri à partir de XGameActivationCallback

Lorsque votre jeu reçoit l'événement [XGameActivationCallback](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationcallback.md) avec le type d'activation `AcceptedGameInvite`, vous pouvez accéder à la chaîne `inviteUri` à partir de la structure [XGameActivationInfo](https://docs.xbox.com/fr/reference/system/xgameactivation/structs/xgameactivationinfo.md). L'`inviteUri` présente l'un des formats suivants.

### Pour l'acceptation d'une invitation de jeu

Lorsque l'utilisateur accepte une invitation de jeu, le jeu reçoit le rappel d'invitation de jeu avec un `inviteUri`, comme indiqué dans le code suivant.

```cpp theme={null}
    "ms-xbl-multiplayer://inviteHandleAccept?handle=%s&invitedXuid=%s&senderXuid=%s&context=%s"
    
    // for example:
    // "ms-xbl-multiplayer://inviteHandleAccept?handle=00000000-0000-1234-5678-1234567890ab&invitedXuid=1234567890123456&senderXuid=6543210987654321&context="
```

L'URI commence toujours par "ms-xbl-multiplayer//", suivi des handles suivants.

* `inviteHandleAccept` indique que le rappel a été déclenché parce que l'utilisateur a accepté une invitation de jeu.
* `handle` est le handle d'invitation que vous utilisez pour rejoindre la session multijoueur.
* `invitedXuid` est l'ID de l'utilisateur des services XBOX invité à la session multijoueur.
* `senderXuid` est l'ID de l'utilisateur des services XBOX qui a envoyé l'invitation de jeu.
* `context` est le contexte supplémentaire (facultatif) que l'expéditeur a pu inclure.

### Pour rejoindre une session de jeu en cours

Lorsque l'utilisateur tente de rejoindre une session multijoueur, le jeu reçoit un rappel d'invitation avec un `inviteUri`, comme indiqué dans le code suivant.

```cpp theme={null}
    "ms-xbl-multiplayer://activityHandleJoin?&handle=%s&joinerXuid=%s&joineeXuid=%s"
```

L'URI commence toujours par "ms-xbl-multiplayer//", suivi des handles suivants.

* `activityHandleJoin` indique que le rappel a été déclenché parce que l'utilisateur a accepté une invitation de jeu.
* `handle` est le handle d'activité que vous utilisez pour rejoindre la session multijoueur.
* `joinerXuid` est l'ID de l'utilisateur des services XBOX qui tente de rejoindre la session multijoueur.
* `joineeXuid` est l'ID de l'utilisateur des services XBOX qui se trouve actuellement dans la session multijoueur.

## Rejoindre une session de jeu multijoueur avec handleId

### Utilisation de Multiplayer Manager

Si vous utilisez Multiplayer Manager, vous pouvez intégrer l'utilisateur à la session multijoueur à l'aide de l'API [XblMultiplayerManagerJoinLobby](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby.md) en lui transmettant le `handleId` extrait de l'`inviteUri`. Vous pouvez également utiliser le `xblUserHandle` correspondant à l'`invitedXuid`, comme indiqué dans le code suivant.

#### C plat

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerJoinLobby(handleId, xblUserHandle);
```

### Utilisation directe de l'API Multijoueur

Si vous utilisez l'API Multijoueur, procédez comme suit pour configurer les sessions multijoueurs et les invitations de votre titre.

1. Récupérez le document de session multijoueur à l'aide de l'API [XblMultiplayerGetSessionByHandleAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayergetsessionbyhandleasync.md) en lui transmettant le `handleId`.
2. Ajoutez l'utilisateur local au document de session multijoueur à l'aide de l'API [XblMultiplayerSessionJoin](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionjoin.md).
3. Écrivez le document de session multijoueur dans le service pour valider cette modification à l'aide de l'API [XblMultiplayerWriteSessionByHandleAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayerwritesessionbyhandleasync.md).

## Documentation de référence de l'API

* [Xgameactivation (sommaire de l'API)](https://docs.xbox.com/fr/reference/system/xgameactivation/xgameactivation_members.md)
  * Fonctions
    * [XGameActivationRegisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationregisterforevent.md)
    * [XGameActivationUnregisterForEvent](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationunregisterforevent.md)
    * [XGameActivationCallback](https://docs.xbox.com/fr/reference/system/xgameactivation/functions/xgameactivationcallback.md)
  * Structures
    * [XGameActivationInfo](https://docs.xbox.com/fr/reference/system/xgameactivation/structs/xgameactivationinfo.md)
* [multiplayer\_manager\_c (sommaire de l'API)](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_manager_c/multiplayer_manager_c_members.md)
  * Fonctions
    * [XblMultiplayerManagerJoinLobby](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby.md)
    * [XblMultiplayerGetSessionByHandleAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayergetsessionbyhandleasync.md)
    * [XblMultiplayerSessionJoin](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionjoin.md)
    * [XblMultiplayerWriteSessionByHandleAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayerwritesessionbyhandleasync.md)

## Voir aussi

[API XGameActivation](https://docs.xbox.com/fr/reference/system/xgameactivation/xgameactivation_members.md) [Gestion de l'activation de protocole pour démarrer une partie à l'aide de Multiplayer Manager](https://docs.xbox.com/fr/services/xbox-services/multiplayer/mpm/how-to/live-handle-protocol-activation.md)


## Related topics

- [Exemples de code pour Multiplayer Activity](https://docs.xbox.com/fr/services/xbox-services/multiplayer/mpa/how-to/live-mpa-client-how-to.md)
- [Exemples de code pour les invitations](https://docs.xbox.com/fr/services/xbox-services/multiplayer/invites/how-to/live-invites-howto-nav.md)
- [XGameActivation (contenu de l'API)](https://docs.xbox.com/fr/reference/system/xgameactivation/xgameactivation_members.md)
- [Invitations de lobby](https://docs.xbox.com/fr/services/playfab/multiplayer/lobby/lobby-invites.md)
- [Flux des invitations de jeu multijoueur](https://docs.xbox.com/fr/services/xbox-services/multiplayer/invites/concepts/live-multiplayer-invite-flows.md)
