マルチプレイヤーの FAQ とトラブルシューティング
タイトルにマルチプレイヤー アクティビティ (MPA) サービスとマルチプレイヤー セッション ディレクトリ (MPSD) サービスを混在させることはできますか?
いいえ。タイトルで MPA 呼び出しと MPSD 呼び出しを混在させる方法はありません。 タイトルでは、機能要件に基づいて使用するサービスを選択する必要があります。
サービスからマルチプレイヤー セッション ディレクトリ (MPSD) API にアクセスするにはどうすればよいですか?
詳細については、「サービス間マルチプレイヤー セッション管理」を参照してください。
タイトルで複数のセッションの変更をサブスクライブできますか?
はい、タイトルは 1 接続あたり最大 10 個のセッションに関する変更の受信をサブスクライブできます。
ネットワーク接続を失ったか、プレイヤーがコンソールの電源をオフにした場合、そのプレイヤーはすぐに削除されますか?
Web ソケット接続では、マルチプレイヤー セッション ディレクトリ (MPSD) はクライアントの切断を迅速に検出し、そのクライアントを非アクティブに設定することができます。 セッション メンバーは、非アクティブ削除のタイムアウトが経過するとすぐに削除されます。 詳細については、トピック「マルチプレイヤー セッションの高度なトピック」の「セッション タイムアウト」セクションを参照してください。
使用するサービス構成 ID (SCID)、セッション テンプレート、サンド ボックスはどのように決定すればいいですか?
タイトルの最初の登録に関わっていなかった場合は、この情報が作成されたときに、この情報に直接アクセスすることはできません。 この情報を入手するには、担当のデベロッパー アカウント マネージャー (DAM) にお問い合わせください。
自分のタイトルとして比較できるリクエストの本文の例はありますか ?
「MultiplayerSessionRequest (JSON)」の要求の構造を参照してください。
MPSD を呼び出す際に HTTP 403 状態コードが表示される場合はどうすればよいですか?
通常、これはアクセス許可またはスコープの問題です。 Fiddler トレースを収集して情報を取得し、一般的な 403 メッセージの HttpResponse
本文の一部として返されたメッセージを確認します。
- 「要求されたサービス構成にアクセスできません」。
- サンドボックスにアクセスできるアカウントを使用していることを確認します。
- 適切なサンドボックス内にいることを確認します。
- 証明書認証を使用していてこのエラーが発生する場合は、担当の DAM に問い合わせてください。
- 「要求されたセッションにアクセスできません。 呼び出し元のユーザーにはマルチプレイヤー権限が必要であり、プライベート セッションはセッション メンバーによってのみ読み取り可能です」。
- おそらく可視性がプライベートのセッションにアクセスしようとしているため、セッションを表示できません。 可視性がプライベートに設定されている場合、そのセッションのメンバーだけがセッション ドキュメントを読み取ることができます。
注意
新しいセッションに登録するには、プレイヤーに Xbox Live Gold アカウントが必要です。 ゴールド アカウント権限がない場合、新しいセッションの登録を要求すると HTTP/403 が返されます。
- 「認証プリンシパルにサーバーが含まれていない場合、要求本文に既存メンバーの参照を含めることはできません」。
- プレイヤーの代わりに別のプレイヤーをセッションに参加させることはできません。 招待のみ可能です。 プレイヤーを招待するには、インデックスを
reserve_<number>
に設定します。
- プレイヤーの代わりに別のプレイヤーをセッションに参加させることはできません。 招待のみ可能です。 プレイヤーを招待するには、インデックスを
MPSD を呼び出す際に HTTP 404 状態コードが表示される場合はどうすればよいですか?
Fiddler トレースを収集して詳しい情報を入手した後、以下の手順を実行します。
- 一般的な 404 メッセージの
HttpResponse
本文の一部として返されたメッセージを確認します。次に例を示します。- "要求されたサービス構成が無効であるか、セッションに対して構成されていません。" 正しい SCID を使用していることを確認します。
- "要求されたセッションが見つかりませんでした。" セッションが作成されていること、およびセッションを取得する前にセッション テンプレートが正しいことを確認します。
PUT
呼び出しを使用してセッションを作成できます。
- 使用している URI を確認します。
- コンソールを再起動し、別のユーザーとしてログインします。
- ゲーム デベロッパー フォーラムでエラー コードまたは他の解決策を調べます。
- セッションが、空になったために削除されたのではないことを確認します。 プレイヤーのタイムアウトが理由でセッションが空になることがあります。これが発生するのは、通常、すべてのセッションのメンバーが準備完了や非アクティブなどのタイムアウトが適用される状態になっているためです。 詳細については、トピック「マルチプレイヤー セッションの高度なトピック」の「セッションのユーザーの状態」セクションを参照してください。
XblMultiplayerWriteSessionByHandleAsync または XblMultiplayerGetSessionByHandleAsync を呼び出すときに HTTP 404 状態コードが表示されるのはなぜですか?
タイトルがハンドル ID を含む参加プロトコルのアクティブ化に応答してハンドルを使用して MPSD セッションにアクセスする場合、プロトコルのアクティブ化のハンドル ID が以下の理由のいずれかのために古くなっている可能性があります。
- タイトルが参加を開始した Xbox のシェルの UI ビューが古くなっている可能性があります。 プレイヤーのプロファイル カードなどの一部の UI ビューは、開かれている間、参加ハンドルを自動的に更新しません。 HTTP 404 状態コードの受信を避けるには、参加する前に、タイトルでビューを閉じ、再度開いてデータを更新します。
- タイトルが参加させようとしているプレイヤーが、タイトルが Xbox シェル UI からの参加操作を選択した後でアクティビティ セッションを切り替えた可能性があります。 このケースはまれです。
いずれの場合でも、タイトル コードでは、参加するプレイヤーに参加が失敗したことを示すエラー メッセージを示す必要があります。
MPSD を呼び出すと HTTP 412 状態コードが表示されるのはなぜですか?
既にセッションが存在する場合、次のような要求をすると HTTP 412 が返されます。
PUT /serviceconfigs/00000000-0000-0000-0000-000000000000/sessiontemplates/quick/sessions/foo HTTP/1.1
Content-Type: application/json
If-None-Match: *
セッションの ETag が If-Match
ヘッダーと一致しない場合、次のような要求をすると HTTP 412 が返されます。
PUT /serviceconfigs/00000000-0000-0000-0000-000000000000/sessiontemplates/quick/sessions/foo HTTP/1.1
Content-Type: application/json
If-Match: 9555A7DE-8B91-40E4-8CFB-0629312C9C7D
詳細については、トピック「マルチプレイヤー セッション ディレクトリの概要」の「セッション更新の同期」セクションを参照してください。
MPSD を呼び出すと HTTP 400、405、409、503 や同様の状態コードが表示されるのはなぜですか?
Fiddler トレースを収集して情報を取得し、HttpResponse
本文の一部として返されたメッセージを確認します。 この情報でエラーを特定して解決できるはずです。 解決しない場合は、開発者フォーラムでソリューションを検索します。
また、Xbox Services API (XSAPI) を使用している場合は、「Xbox サービス API のトラブルシューティング」で説明されているように、応答本文を取得できます。 または、コードで HCTraceSetClientCallback を使用して、タイトル UI に出力を送信することができます。
タイトルのセッションテンプレートで何を変更できますか、または変更する必要がありますか?
セッション テンプレートはセッションのパターンなので、テンプレートで既に設定されている定数を上書きすることはできません。 ただし、新しいプロパティを追加することは可能です。 詳細については、「マルチプレイヤー セッション テンプレート」と「マルチプレイヤー セッション ディレクトリの概要」を参照してください。
セッションが初期化されていないことを示すエラーが表示されるのはなぜですか?
次に示すのは、表示されるエラー メッセージの例です。
400 - \[ResponseBody\]: This session is configured for managed initialization requiring at least 2 members to start.
このリクエストには、initialize
フィールドが true
に設定した十分なセッション メンバー予約が含まれていないため、セッションを作成できません。 コードが XblMultiplayerSessionAddMemberReservation または XblMultiplayerSessionJoin を使用して initializeRequested
パラメーターを使用して、メンバーにこのフィールドを設定できます。
初期化がセッション テンプレートで指定されている場合、マッチメイキングのサービス品質 (QoS) に合格するのに十分な数のメンバー予約に対して "initialize": true
が設定されていることを確認します。 詳細については、「ターゲット セッションの初期化と QoS」を参照してください。
セッションが作成されず、HTTP 204 状態コードが表示されるのはなぜですか?
この状態コードは、セッションを作成したときにプレイヤーがセッションに追加されていないことを示します。 セッション作成時にセッションにプレイヤーが存在せず、空セッション タイムアウトが 0 (既定) の場合、セッションは作成されません。
セッションの作成時に、少なくとも 1 人のプレイヤーを必ず追加します。 専用サーバー シナリオの場合は、マッチを作成しようとしているプレイヤーまたはマッチを作成する必要があるプレイヤーを取得して、そのプレイヤーをそのマッチの初期プレイヤーにします。 または、空セッション タイムアウトを変更または削除してもかまいません。詳細については、トピック「マルチプレイヤー セッションの高度なトピック」の「セッション タイムアウト」セクションを参照してください。
どのようなときに MPSD をポーリングする必要がありますか?
タイトルは MPSD のポーリングを避ける必要があります。 タイトルは、MPSD セッションの変更を検出する必要がある場合は、セッション変更イベントをサブスクライブする必要があります。 詳細については、トピック「マルチプレイヤー タスク」の「MPSD セッション変更通知のサブスクライブ」セクションを参照してください。
XblMultiplayerQuerySessionsAsync を使用して、セッションの参照またはマッチメイキングを実装できますか?
XblMultiplayerQuerySessionsAsync メソッドは、低い呼び出し頻度でのデバッグを目的としています。 サービスの制限により、この API からのセッション結果はリアルタイムではなく、より高い頻度で呼び出されると不完全になる可能性があります。
セッション参照機能を実装するには、「マルチプレイヤー セッションの参照」の「検索ハンドル」セクションを参照してください。 マッチメイキングの実装については、「SmartMatch マッチメイキングの使用」を参照してください。
セッションに予約または招待されたプレイヤーがセッションに参加しないとどうなりますか?
これは、ゲームセッションの準備ができたことをプレイヤーに通知するときにタイトルが実行中かどうかによって異なります。
プレーヤーがタイトル内にいて、タイトル UI からのゲーム セッションの通知を受け入れない場合、タイトルから、XblMultiplayerSessionLeave メソッドを使用して、ゲームセッションからプレイヤーを削除する必要があります。
タイトルが制限されているか実行されていない場合、シェルは、スロットが使用可能であることをプレイヤーに知らせる通知を示します。 プレイヤーがシステムからの通知を拒否または無視すると、MPSD はそのプレイヤーをゲーム セッションから削除します。
作成したセッションがマッチメイキングによって見つからないのはどうしてでしょうか?
Xbox One では、セッションを作成しただけでは、マッチメイキングは新しいセッションを検索しません。 マッチ チケットを作成して、マッチメイキング サービスへのセッションの公開を開始する必要があります。 詳細については、「マッチメイキングの概要」を参照してください。
ゲーム セッションに空きプレイヤー スロットがあり、ゲーム セッションが途中参加をサポートしている場合、開始したセッションをプレイヤーが見つけられないのはなぜですか?
ゲームセッションが開始されると、マッチメイキング サービスではアドバタイズされなくなります。 セッション内でプレイヤー スロットを使用できるようになって、アービター (ホスト) が新しい対戦相手を惹き付けるには、監視側は、XblMatchmakingCreateMatchTicketAsync 方式を使用して、進行中のセッション用に新しいマッチチケットを作成する必要があります。 チケットは再びセッションをアドバタイズし、より多くのプレイヤーを見つけます。 詳細については、「マッチメイキングの概要」を参照してください。
ゲーム セッションが開いている場合、ゲームに参加したばかりのプレイヤーは、予約を待たずに、単にセッションに参加してプレイを開始できますか?
はい。 これは、タイトルで複数のセッションを使用してゲーム セッション内でプレイヤーのサブグループを追跡する場合に特に便利です。 参加プレイヤーは自分のグループを表すセッションに参加し、それよりも大きいゲーム セッションに参加する必要がある可能性があります。
大きなゲームセッションのタイトルが再生されているときに、セッションメンバー全員にゲームの招待通知が表示されないのはなぜですか?
タイトルは、参加機能を使用してセッションにプレイヤーを追加すると、常に XblMultiplayerSessionMember の InitializeRequested
メンバーを true
に設定します。 これにより、MPSD は、ユーザーが初期化ステージからゲームを移す前に、残りのセッションメンバーを待つよう伝えられます。 それ以外の場合、プレイヤーは参加する時間が非常に短くなり、セッション変更の通知を見逃す可能性があります。