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

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

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

チケット作成時のエラー

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

注意

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

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

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

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

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

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

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

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

注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

すべての場合において、ユーザーがまだマッチメイキングを実行したい場合は、タイトルは別のチケットを送信するだけです。

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

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

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

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

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