一般的なエラーの場合の処理

PlayFab マッチメイキングは、マッチメイキングの入力や脱退を行うための簡単なインターフェイスを提供します。 これにもかかわらず、プランによっては、いくつかのポイントが表示されない場合があります。 次に示すように、一般的なエラーのケースの一部と、タイトルで処理する方法について説明します。

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

チケット作成時のエラー

チケットの作成は、いくつかの理由で失敗することがあります。 ほとんどの場合、PlayFab エラーコードは、申請要求について無効なものを特定します。 この問題を解決すると、正常に送信できるようになります。

注意

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

他のエラーコードは、要求が有効であることを示しますが、要求外の状況では、チケットの受け入れを防ぐことができます。 特に、次のようになります。

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

HTTP エラーコード503が表示された場合は、わずかな遅延後に要求を再試行してください。

MatchmakingRateLimitExceeded が返されます

他の PlayFab 機能と同様に、PlayFab マッチメイキングは、ゲームマネージャー内で構成されている制限に従って発信する通話の数を制限します。 エラーがMatchmakingRateLimitExceeded表示される場合は、タイトルがこの通話の種類の制限を超えていることを示します。

マッチメイキングでは、チケットが一致しているかどうかを確認するためにGetMatchmakingTicketをポーリングするときに最もよく発生します。

このエラーを回避するには、上限を増やすか、通話周波数を減らしてください。

注意

応答には、HTTP 状態コード429が含まれていますが、要求自体は有効であり、再試行することができます。

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

PlayFab マッチメイキングでは、ユーザーが2つの一致を入力し、優先するチケットを決定する必要がある場合を避けるために、ユーザーは1つのキューにつき一度に1つのチケットしか使用できません。 どちらの match も受け入れられない場合、プレーヤーは短いということになり、プレイヤーはマッチメイキングを再入力する必要があります。 このエラー MatchmakingTicketMembershipLimitExceededは、ユーザーが既に1つのチケットに含まれていて、それが取り消されない、または一致しない場合に返されます。

ただし、タイトルやサーバーで、クラッシュ、再起動、またはその他の予期しないエラーが発生したために、チケットの追跡が失われることがあります。 この場合、ユーザーとタイトルが認識していないアクティブなチケットのままになります。

この紛失したチケットは、有効期限が切れるまで、将来のチケットをこのユーザーに送信することを防止します。 この問題が発生した場合は、次の2つの方法で問題を解決できます。

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

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

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

ユーザーの既存のチケットを検索して使用を続行します。 ListMatchmakingTicketsForPlayerを呼び出すと、ユーザーがメンバーになっているすべてのマッチメイキングチケット id が返されます。 GetMatchmakingTicketを呼び出すことによって、その状態を取得し、一致するものが見つかるまで監視を続けることができます。

すべてのプレイヤーがマルチユーザーチケットに参加することはできません

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

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

チケットがキャンセルされる

チケットは、複数の理由でキャンセルされることがあります。 最も一般的なケースとして、ユーザーの取り消しとチケットの有効期限が切れますが、サーバーによってチケットを取り消すこともできます。 電話に通話GetMatchmakingTicketを発信したときに、チケットがキャンセルされると、そのCancellationReason理由がフィールドに表示されます。 要求、タイムアウト、内部は、ユーザーのキャンセル、チケットの有効期限、サーバーの取り消しにそれぞれ対応します。

いずれの場合も、ユーザーが引き続きマッチメイキングを実行する場合は、タイトルは別のチケットを送信する必要があります。

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

チケットをキャンセルしても成功するとは限りません。 ほとんどのエラーは自明ですが、このエラー MatchmakingTicketAlreadyCompletedは次の2つのいずれかの可能性を示しています。

  1. チケットは既にキャンセルされています。
  2. このチケットはすでに照合されています。

このエラーが表示された場合、タイトルは、これら2つのケースを区別するためにGetMatchmakingTicketを呼び出す必要があります。 最初のケースでは、チケットは既に目的の状態になっており、それ以上の操作は必要ありません。 2番目の例では、ユーザーの取り消しが遅れていて、既に対応付けられていることを示します。 この競合状態は、ユーザーによるキャンセルと検索された一致の間に避けられないため、タイトルで処理する必要があります。

タイトルには、これを解決するための2つのオプションがあります。この場合は、ユーザーの取り消し要求を無視するか、または対戦を許可して、プレイヤーが参加できないことを確認します。 どちらのオプションも最適な方法ではありませんが、このような状況が発生することを期待し、consciously にタイトルフローを作成することをお勧めします。 また、プレイヤーはどのような理由でも対戦に参加できない場合があるため、ここで説明した競合の条件に関係なく、タイトルはこのケースを処理する必要があります。