다음을 통해 공유


초대 받기

이 항목을 사용하여 Xbox 서비스 타이틀에 게임 초대를 추가할 수 있습니다. 멀티플레이어 초대를 받으려면 게임이 멀티플레이어 프로토콜 및 게임 초대 콜백에 등록됩니다. 게임은 로컬 사용자에 대한 초대를받은 다음 해당 사용자를 멀티플레이어 세션에 참여시킵니다.

필수 조건

Windows PC에서 게임 초대 알림을 받으려면 Xbox Game Bar를 설치하세요. Xbox Game Bar 앱은 기본적으로 Windows 10, OS 버전 1903 이상에 설치됩니다. Windows 키+G를 선택하여 Xbox Game Bar 앱을 시작하여 올바르게 설치되었는지 확인합니다.

참고 항목

Xbox Game Bar가 Windows PC에 설치되어 있지 않은 경우 Microsoft Store에서 설치할 수 있습니다.

멀티플레이어 프로토콜 등록

멀티플레이어 프로토콜 등록은 사용자가 멀티플레이어 게임 초대를 수락할 때 게임을 시작하는 방법을 시스템에 알려줍니다. 멀티플레이어 프로토콜을 등록하려면 다음 코드와 같이 MicrosoftGame.config 파일에 MultiplayerProtocol 요소를 추가해야 합니다.

    <MultiplayerProtocol>true</MultiplayerProtocol>

패키지에 여러 실행 파일이있는 경우 다음 코드와 같이 Executable 속성을 사용하여 멀티플레이어 프로토콜을 처리하는 실행 파일을 지정할 수 있습니다.

    <MultiplayerProtocol Executable="MyExecutableForMultiplayer.exe">true</MultiplayerProtocol>

멀티플레이어 게임 초대 콜백 등록

멀티플레이어 게임 초대 콜백을 받으려면 다음 코드와 같이 XGameInviteRegisterForEvent API를 사용하여 게임 초대 콜백에 등록해야 합니다.

게임 초대 콜백 등록 및 등록 취소에 대한 자세한 내용은 XGameInviteRegisterForEventXGameInviteUnregisterForEvent를 참조하세요.

플랫 C

#include <XTaskQueue.h>
#include <XGameInvite.h>  
  
XTaskQueueHandle g_taskQueue;  
XTaskQueueRegistrationToken g_gameInviteEventToken;  
  
void OnGameInvite(void* context, const char* inviteUri)  
{  
    if (inviteUri != nullptr)
    {
        std::string inviteString(inviteUri);
        auto pos = inviteString.find("handle=");
        auto handleId = inviteString.substr(pos + 7, 36);
        // Now call XblMultiplayerManagerJoinLobby
    }
}  
  
void InitializeGame()  
{  
    XGameInviteRegisterForEvent(g_taskQueue, nullptr, OnGameInvite, &g_gameInviteEventToken);  
}  
  
void ShutdownGame()  
{  
    XGameInviteUnregisterForEvent(g_gameInviteEventToken);  
}  

"일시 중지된 상태에서 수락된 초대" 시나리오를 올바르게 처리하려면 타이틀에 XGameInviteRegisterForEvent 콜백에서 위 샘플 코드의 OnGameInvite() 처리기 메서드로 전달된 inviteUri을(를) 저장해야 합니다. 그런 다음 타이틀은 inviteUri에 제공된 세부 정보를 사용하여 게임이 세션에서 작동을 진행하기 전에 게임이 완전히 재개되면 알리는 RegisterAppStateChangeNotification을(를) 기다려야 합니다.

RegisterAppStateChangeNotification에 대한 자세한 내용은 Xbox 게임 수명 주기(NDA 항목)권한 부여 필요를 참조하세요.

XGameInviteEventCallback에서 inviteUrl 구문 분석

게임이 XGameInviteEventCallback 이벤트를 수신하면 inviteUrl 문자열에 액세스할 수 있습니다. inviteUrl은 다음 형식 중 하나입니다.

게임 초대를 수락하려면

사용자가 게임 초대를 수락하면 게임은 다음 코드와 같이 inviteUri이(가) 포함된 게임 초대 콜백을 받습니다.

    "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="

URI는 항상 "ms-xbl-multiplayer//"로 시작하고 다음 핸들을 따릅니다.

  • inviteHandleAccept은(는) 사용자가 게임 초대를 수락했기 때문에 콜백이 시작되었음을 나타냅니다.
  • handle은(는) 멀티 플레이어 세션에 참여하는 데 사용하는 초대 핸들입니다.
  • invitedXuid은(는) 멀티 플레이어 세션에 초대되는 Xbox 서비스 사용자의 ID입니다.
  • senderXuid은(는) 게임 초대를 보낸 Xbox 서비스 사용자의 ID입니다.
  • context은(는) 발신자가 포함했을지도 모르는 추가 (선택적) 컨텍스트입니다.

진행 중인 게임 세션에 참가하는 방법

사용자가 멀티플레이어 세션에 참여하려고 하면 게임은 다음 코드와 같이 inviteUri이 포함된 초대 콜백을 수신합니다.

    "ms-xbl-multiplayer://activityHandleJoin?&handle=%s&joinerXuid=%s&joineeXuid=%s"

URI는 항상 "ms-xbl-multiplayer//"로 시작하고 다음 핸들을 따릅니다.

  • activityHandleJoin은(는) 사용자가 게임 초대를 수락했기 때문에 콜백이 시작되었음을 나타냅니다.
  • handle은(는) 멀티 플레이어 세션에 참여하는 데 사용하는 활동 핸들입니다.
  • joinerXuid은(는) 멀티 플레이어 세션에 참가하려는 Xbox 서비스 사용자의 ID입니다.
  • joineeXuid은(는) 현재 멀티 플레이어 세션에 있는 Xbox 서비스 사용자의 ID입니다.

handleId로 멀티플레이어 게임 세션에 참여

멀티플레이어 관리자 사용

멀티플레이어 관리자를 사용하는 경우 XblMultiplayerManagerJoinLobby API를 사용하고 inviteUrl에서 추출된 handleId을(를) 전달하여 사용자를 멀티플레이어 세션에 참여시킬 수 있습니다. 다음 코드와 같이 invitedXuidxblUserHandle을(를) 사용할 수도 있습니다.

플랫 C

HRESULT hr = XblMultiplayerManagerJoinLobby(handleId, xblUserHandle);

멀티플레이어 API 직접 사용

멀티플레이어 API를 사용하는 경우 다음 단계를 사용하여 타이틀에 대한 멀티플레이어 세션 및 초대를 구성합니다.

  1. XblMultiplayerGetSessionByHandleAsync API를 사용하여 멀티플레이어 세션 문서를 가져와서 handleId에 전달합니다.
  2. XblMultiplayerSessionJoin API를 사용하여 로컬 사용자를 멀티플레이어 세션 문서에 참여시킵니다.
  3. XblMultiplayerWriteSessionByHandleAsync API를 사용하여이 변경 사항을 커밋하도록 서비스에 멀티플레이어 세션 문서를 작성합니다.

참고 항목

XGameInvite API
멀티플레이어 관리자를 사용하여 프로토콜 정품 인증을 처리하고 게임 시작