PlayFab エラーの処理
PlayFab Services SDK 呼び出しの非同期 API 呼び出しが失敗する可能性がある点がいくつかあります。 これらのエラーの処理は、操作が失敗する方法とタイミングによって異なります。
GDK のほとんどの非同期呼び出しと同様に、PlayFab API も同じ一般的な呼び出しパターンに従います:
- PF*Async(...) 非同期操作を開始する呼び出し。
- (省略可能) XAsyncGetStatus(...) 非同期操作の状態を追跡する呼び出し。 非同期操作の完了を待機するために使用できます。
- PF*GetResultSize(...) 結果ペイロードのサイズをバイト単位で取得します。
- PF*GetResult(...) 非同期操作の結果を取得します。
これらの各呼び出しは、さまざまな理由で失敗する可能性があります。 次のセクションでは、最も一般的に発生するエラーの種類について詳しく説明します。
同期エラーは、最初 の PF*Async 呼び出しがエラーを返すときです。 この種類のエラーは、通常、プログラミング エラー (呼び出しパターンが無効、引数の無効化など) を示しています。 これらの種類のエラーは、開発中に解決する必要があります。 他のほとんどの同期エラーは致命的であり、簡単に処理することはできません (E_OUTOFMEMORYなど)。
非同期エラーは、XAsyncGetStatus 、PF*GetResultSize 、またはPF*GetResult のいずれかが失敗した場合です。 非同期エラーはより広範囲です。 無効な引数によるエラーに加えて、非同期エラーは、次のセクションで詳しく説明するいくつかのカテゴリに分類されます。
PlayFab サービス呼び出しを開始する前に、SDK はクライアント側の検証を行い、必要な認証トークンが使用可能であり、引き続き有効であることを確認します。 このチェックが失敗した場合は、次のいずれかのエラーが返されます。
E_PF_NOENTITYTOKEN (0x89235411)
: 指定された PFEntityHandle に関連付けられている EntityToken の有効期限が切れていることを示します。 この状況の処理方法の詳細については、「トークンの有効期限の処理」を参照してください。E_PF_NOSECRETKEY (0x89235412)
指定された PFEntityHandle に関連付けられた SecretKey がないことを示します。 SecretKey がないということは、通常、無効なエンティティ型で要求を行おうとしたことを意味します。 SecretKey を必要とする API は、タイトル エンティティによってのみ呼び出すことができます。 SecretKey API はサーバーまたは管理者のシナリオ向けであり、GDK では使用できないことに注意してください。
SDK が PlayFab サービス要求を正常に行った場合でも、サービスはエラーを返す可能性があります。 PlayFab サービスエラーには、大きく分けて2 種類あります。これらは、任意の PlayFab API から返される可能性があるグローバル、およびAPI 固有の固有エラーです。 グローバルエラーの一覧を次に示します。
E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)
E_PF_API_CONCURRENT_REQUEST_LIMIT_EXCEEDED (0x8923556b)
E_PF_CONCURRENT_EDIT_ERROR (0x8923549b)
E_PF_DATA_UPDATE_RATE_EXCEEDED (0x89235534)
E_PF_DOWNSTREAM_SERVICE_UNAVAILABLE (0x89235495)
E_PF_INVALID_API_ENDPOINT (0x89235499)
E_PF_OVER_LIMIT (0x892354ec)
E_PF_SERVICE_UNAVAILABLE (0x89235491)
E_PF_ACCOUNT_BANNED (0x89235423)
E_PF_ACCOUNT_DELETED (0x89235557)
E_PF_ACCOUNT_NOT_FOUND (0x89235422)
E_PF_API_REQUESTS_DISABLED_FOR_TITLE (0x8923553c)
E_PF_INVALID_CONTENT_TYPE (0x892354a6)
-
E_PF_INVALID_ENTITY_TYPE (0x8923558a)
: E_PF_INVALID_PARAMS (0x89235421)
E_PF_INVALID_REQUEST (0x89235468)
E_PF_INVALID_TITLE_ID (0x89235425)
E_PF_NOT_AUTHENTICATED (0x8923546b)
E_PF_NOT_AUTHORIZED (0x89235478)
E_PF_NOT_AUTHORIZED_BY_TITLE (0x892354d5)
E_PF_PROFILE_DOES_NOT_EXIST (0x8923553f)
E_PF_TITLE_DELETED (0x89235570)
E_PF_UNKNOWN_ERROR (0x89235448)
サービスエラーの再試行ガイダンスの詳細については、「PlayFab Service Global API メソッドのエラー コード」を参照してください。
サービスエラーの 1 つのカテゴリは、HTTP 429 状態コードで示される調整エラーです。 PlayFab サービスが調整エラーを返すと、クライアントが特定の期間にわたってエンドポイントを呼び出す頻度が高すぎることを意味します。 SDK で調整エラーが発生すると、小規模なバックオフ後に要求が自動的に再試行されます。 構成された再試行期間内に要求が成功しない場合は、エラーがタイトルに渡されます。 SDK の再試行設定は、PFSetHttpRetrySettings を呼び出すことによって構成できます。
基になるネットワーク スタックからエラーが返された場合、そのエラーはクライアントに渡されます。 ネットワーク障害の性質によって、さまざまなエラーが発生する可能性があります。 ほとんどのネットワーク エラーの結果は E_HC_NO_NETWORK (0x89235006)
です。
HRESULT に加えて、PlayFab サービスから errorDetails 文字列が返されることがあります。 この文字列はエンド クライアントには公開されませんが、開発およびデバッグ中に役立つ場合があります。 詳細トレースを有効にして、返された errorDetails 文字列を確認する方法については、「トレース ガイド 」を参照してください。
[Microsoft Game Development Kit でのエラー処理][/gaming/gdk/_content/gc/system/overviews/error-handling]