次の方法で共有


招待を受け取る

このトピックを使用して、ゲームへの招待を Xbox サービス タイトルに追加します。 マルチプレイヤーの招待を受け取るには、ゲームをマルチプレイヤー プロトコルとゲームへの招待コールバックに登録します。 ゲームでは、ローカル ユーザーに対する招待を受け取った後、そのユーザーをマルチプレイヤー セッションに参加させます。

前提条件

Windows PC でゲーム招待通知を受信するには、Xbox Game Bar をインストールします。 Xbox Game Bar アプリは、Windows 10 の OS バージョン 1903 以降に既定でインストールされています。 Windows Key+G キーを押して Xbox Game Bar アプリを起動し、正常にインストールされていることを確認します。

注意

Xbox Game Bar が Windows PC にインストールされていない場合、Microsoft Store からインストールできます。

マルチプレイヤー プロトコルに登録する

マルチプレイヤー プロトコルに登録すると、ユーザーがマルチプレイヤー ゲームへの招待を受け入れたときに、ゲームを起動する方法がシステムに通知されます。 次のコードに示すように、マルチプレイヤー プロトコルに登録するには、MultiplayerProtocol 要素を MicrosoftGame.config ファイルに追加する必要があります。

    <MultiplayerProtocol>true</MultiplayerProtocol>

次のコードに示すように、パッケージに複数の実行可能ファイルがある場合は、Executable 属性を使用して、マルチプレイヤー プロトコルを処理する実行可能ファイルを指定できます。

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

マルチプレイヤー ゲームへの招待コールバックに登録する

次のコードに示すように、マルチプレイヤー ゲームの招待のコールバックを受信するには、XGameInviteRegisterForEvent API を使用して、ゲームの招待コールバックを登録する必要があります。

ゲームの招待のコールバックを登録および登録解除する方法の詳細については、XGameInviteRegisterForEvent および XGameInviteUnregisterForEvent を参照してください。

フラット 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 を保存する必要があります。 次に、タイトルは、ゲームが完全に再開されたときに通知される RegisterAppStateChangeNotification を待機する必要があります。その後、タイトルは、inviteUri で提供される詳細を使用してセッションでの動作に進みます。

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 を使用してマルチプレイヤー ゲーム セッションに参加する

Multiplayer Manager を使用する

Multiplayer Manager を使用している場合、XblMultiplayerManagerJoinLobby API を使用し、inviteUrl から抽出された handleId を渡すことによって、マルチプレイヤー セッションにユーザーを参加させることができます。 次のコードに示すように、invitedXuidxblUserHandle を使用することもできます。

フラット C

HRESULT hr = XblMultiplayerManagerJoinLobby(handleId, xblUserHandle);

Multiplayer API を直接使用する

マルチプレイヤー API を使用している場合は、次の手順を使用して、マルチプレイヤー セッションおよびタイトルへの招待を構成します。

  1. XblMultiplayerGetSessionByHandleAsync API を使用してマルチプレイヤー セッション ドキュメントをフェッチし、handleId に渡します。
  2. XblMultiplayerSessionJoin API を使用して、ローカル ユーザーをマルチプレイヤー セッション ドキュメントに参加させます。
  3. サービスのマルチプレイヤー セッション ドキュメントを記述し、XblMultiplayerWriteSessionByHandleAsync API を使用して、この変更をコミットします。

関連項目

XGameInvite API
Multiplayer Manager を使用した、ゲームを開始するためのプロトコル アクティベーションの処理