次の方法で共有


一般的なエラー ケースを処理する

PlayFab のマッチメイキングは、マッチメイキングに出入りするためのシンプルなインターフェースを提供します。 ただし、プランによっては、まだ複数のポイント数が表示されない場合があります。 より一般的なエラー ケースと、タイトルの処理方法を以下に示します。

このページは、PlayFab のマッチメイキングの一般的な流れを理解していることを前提としています。 詳細については、マッチメイキングの一般的な使い方に関する「マッチメイキングのクイックスタート」を参照してください。

チケット作成時のエラー

チケットの作成はいくつかの理由で失敗する可能性があります。 ほとんどの場合、PlayFab エラー コードは送信リクエストに関して無効なものを識別します。 これを修正すると、正常に送信できます。

注意

エラーMatchmakingAttributeInvalidMatchmakingPlayerAttributesInvalidは、属性の書式設定に問題があることを示します。 チケットで属性を渡す方法の詳細については、「チケットで属性を指定する」を参照してください。

他のエラー コードは要求が有効であることを示しますが、要求以外の状況によってチケットが受け入れられないようになる場合があります。 具体的には、以下のようになります。

  1. MatchmakingRateLimitExceeded - チケットが頻繁に送信されていることを示しています。 詳細については、以下のセクションを参照してください。
  2. MatchmakingTicketMembershipLimitExceeded - ユーザーがすでに別のアクティブなチケットに参加していることを示します。 ユーザーは同時に 2 つのゲームをプレイできないため、キュー内に一度に複数のチケット持つことはできません。 詳細については、この状況の修正に関する以下のセクションを参照してください。

HTTP エラーコード 503 を受け取った場合は、少し待ってから要求を再試行します。

呼び出しは、MatchmakingRateLimitExceeded を返します。

他の PlayFab 機能と同様に、PlayFab マッチメイキングは、ゲーム マネージャーの内部で設定された制限に従って、呼び出しの数を制限します。 MatchmakingRateLimitExceededエラーを受信すると、タイトルがこの呼び出しのタイプの制限を超えたことを示します。

マッチメイキングにおいて、このエラーは、GetMatchmakingTicketをポーリングしてチケットがマッチしたかどうかを確認するときに最も頻繁に発生します。

このエラーを回避するには、制限を増やすか、呼び出しの頻度を減らします。

注意

応答の HTTP ステータス コードは 429 ですが、要求自体は有効であるため、再試行できます。

チケットを作成または参加すると、MatchmakingTicketMembershipLimitExceeded が返される

PlayFab のマッチメイキングでは、ユーザーが 2 つのマッチを入力して、どちらのチケットを優先するかを決定しなければならないケースを回避するために、キューごとに 1 つのチケットにしか入力できません。 選択しなかったマッチについては、プレイヤーの数が少なくなるため、マッチメイキングの再入力が必要になります。 ユーザーがチケットをキャンセルもマッチもしていない状態で、別のチケットを作成または参加しようとしている場合、エラー MatchmakingTicketMembershipLimitExceeded が返されます。

しかし、クラッシュや再起動、その他の予期しないエラーによって、タイトルやサーバーがチケットを失ってしまうことがあります。 これが発生すると、ユーザーもタイトルも認識していないアクティブなチケットが残ります。

紛失したチケットは、期限切れになるまで、このユーザーに対して今後のチケットが送信されるのを防ぎます。 このようなエラーが発生した場合は、問題を解決するために、2 つの方法があります。

オプション 1: マッチメイキングからチケットを消去する

ユーザーのすべての既存のチケットをキャンセルします。 CancelAllMatchmakingTicketsForPlayer を呼び出すと、このタスクが実行されます。 その後、マッチメイキングでは進行中のチケットはなくなり、新しいチケットを作成する準備が整います。

オプション 2: 紛失したチケットを見つける

ユーザーの既存のチケットを見つけて、引き続き使用します。 ListMatchmakingTicketsForPlayer を呼び出すと、ユーザーがメンバーであるすべてのマッチメイキング チケット ID を返します。 指定された各 ticketId で GetMatchmakingTicket を呼び出すと、その状態を取得し、マッチが見つかるまで監視を続けることができます。

すべてのプレイヤーがマルチユーザー チケットに参加するわけではありません。

マルチユーザー チケットを作成するとき、招待されたプレイヤーの 1 人が失敗するか、または参加を拒否する可能性があります。 このような場合、作成されたチケットは期限が切れるまで WaitingForPlayers ステータスのままになります。 タイトルはこのような状況が時々起こることを予想し、UI 内で非常に短いタイムアウトを設定する必要があります。

タイムアウト後、タイトルはチケットをキャンセルし、すべてのプレイヤーがまだ一緒にゲームをプレイすることに同意していることを確認する必要があります。

GetMatch の戻り値が見つかりません

マッチが作成されると、マッチは一定期間有効になり、最終的には期限切れになります。マッチが時間内に取得されない場合、それらのユーザーは再びマッチされるためにチケットを再送信する必要があります。 これは、マッチが適切なタイミング (つまり、数分以内) に取得されるようにすると回避できます。

ここで説明するようにマッチメイキングとロビーを一緒に使用している場合は、ここでマッチがタイムアウトした後も、lobbyArrangementString が一定期間有効である可能性があります。 有効期限が切れる前に、GetMatch から情報を取得して使用してください。

チケットはキャンセルされました

チケットは複数の理由でキャンセルされることがあります。 最も一般的なケースは、ユーザーのキャンセルとチケットの有効期限切れですが、チケットはサーバーによってキャンセルされることもあります。 GetMatchmakingTicket を呼び出し、チケットがキャンセルされたことがわかった場合、その理由は CancellationReason フィールドに表示されます。 考えられる CancellationReason 応答と考えられる解決策を次に示します。

CancellationReason 説明 解決策
ユーザー ユーザーがマッチメイキング チケットを取り消しました 意図。 必要に応じて、新しいチケットを作成します。
サーバー サービスがサーバー API 経由でマッチメイキング チケットを取り消しました 意図。 必要に応じて、新しいチケットを作成します。
タイムアウト GiveUpAfterSeconds に到達してチケットの有効期限が切れました 新しいチケットでもう一度試し、必要に応じてチケット属性を調整します。
ServerAllocationFailed キューはサーバーを割り当てましたが、割り当て要求が失敗しました リージョンで使用可能なスタンバイ サーバーを確認し、新しいチケットでもう一度試します。
TicketUnmatchable チケット パラメーターとキューのルールの組み合わせにより、このチケットが一致しなくなります チケット属性またはキュー構成を調整して、互換性を持たせるようにします。
RetryRequired 内部の一時的なマッチメイキング エラー タイミングの問題が原因である可能性があるため、次の要求で解決する新しいチケットでもう一度試します。
内部 内部マッチメイキング サービス エラー 新しいチケットを使用してもう一度試します。

チケットをキャンセルすると、エラーが返されます。

チケットをキャンセルしても成功するとは限りません。 ほとんどのエラーは一目瞭然ですが、エラーMatchmakingTicketAlreadyCompletedは 2 つの可能性のうちの 1 つを示します。

  1. チケットはすでにキャンセルされました。
  2. チケットはすでにマッチングされています。

このエラーを受信する場合、これらの 2 つのケースを区別するために、タイトルはGetMatchmakingTicketを呼び出します。 最初のケースの場合、チケットはすでに目的の状態になっているため、それ以上のアクションは必要ありません。 2 番目のケースの場合、ユーザーのキャンセルが遅すぎたことと、すでにマッチが組まれたことを示します。 ユーザーのキャンセルとマッチが見つかるまでの競合状態は避けられず、タイトルで処理する必要があります。

タイトルには、この問題を解決するための 2 つのオプションがあります。ユーザーのキャンセル要求を無視してとにかくマッチに参加するか、プレイヤーが参加しないことを認識しながらマッチの開始を許可するかです。 どちらの選択肢も完璧ではありませんが、このような状況が発生することを予想し、それに応じたタイトルフローを意識的に作成することが重要です。 また、プレイヤーはさまざまな理由でマッチに参加できない可能性があるため、タイトルはここで言及されているマッチ状態に関係なく、このケースを処理する必要があることにも注意してください。