> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PlayFab エラーの処理

> PlayFab Services C/C++ SDK から返される同期、非同期、トークン、スロットリング、ネットワークエラーを、一般的な HRESULT コードと共に処理します。

PlayFab Services SDK の非同期 API 呼び出しが失敗する可能性があるポイントは、いくつかあります。これらのエラーの処理方法は、操作がどのように、いつ失敗するかによって異なります。

GDK 内の他のほとんどの非同期呼び出しと同様に、PlayFab API は次の一般的な呼び出しパターンに従います:

1. **PF\*Async(...)** 呼び出しで非同期操作を開始します。
2. (オプション) **XAsyncGetStatus(...)** 呼び出しで非同期操作のステータスを追跡します。非同期操作の完了を待つために使用できます。
3. **PF\*GetResultSize(...)** で結果ペイロードのバイト単位のサイズを取得します。
4. **PF\*GetResult(...)** で非同期操作の結果を取得します。

これらの各呼び出しは異なる理由で失敗する可能性があります。以下のセクションでは、最も一般的に発生する障害の種類について詳しく説明します。

## 同期障害

同期障害とは、最初の **PF\*Async** 呼び出しがエラーを返した場合のことです。この種の障害は通常、プログラミングエラー (無効な呼び出しパターン、無効な引数など) を示しています。これらの種類のエラーは開発中に解決する必要があります。他のほとんどの同期障害は致命的で、簡単に処理することはできません (例: E\_OUTOFMEMORY)。

## 非同期障害

非同期障害とは、**XAsyncGetStatus**、**PF\*GetResultSize**、または **PF\*GetResult** のいずれかが失敗した場合のことです。非同期障害の範囲はより広くなります。無効な引数によるエラーに加えて、非同期障害は以下のセクションで詳しく説明されるいくつかのカテゴリに分類されます。

### トークン検証障害

PlayFab サービス呼び出しを開始する前に、SDK はクライアント側で検証を行い、必要な認証トークンが利用可能でまだ有効であることを確認します。このチェックが失敗すると、以下のいずれかのエラーが返されます:

* `E_PF_NOENTITYTOKEN (0x89235411)`:
  指定された PFEntityHandle に関連付けられた EntityToken が期限切れであることを示します。この状況の処理方法の詳細については、[トークン期限切れの処理](/services/playfab/sdks/c/relogin) を参照してください。

* `E_PF_NOSECRETKEY (0x89235412)`
  指定された PFEntityHandle に関連付けられた SecretKey がないことを示します。SecretKey がないということは、通常、無効なエンティティタイプでリクエストを行おうとしたことを意味します。SecretKey を必要とする API は、Title Entity からのみ呼び出すことができます。SecretKey API はサーバーまたは管理者シナリオを対象としており、GDK では利用できないことに注意してください。

### PlayFab サービス障害

SDK が PlayFab サービスリクエストを正常に行った場合でも、サービスはエラーを返す可能性があります。PlayFab サービスエラーには2つの大きなタイプがあります: 任意の PlayFab API から返される可能性のある *global* エラーと、API 固有の *specific* エラーです。以下は *global* 障害の完全なリストです:

* `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 メソッドエラーコード](/services/playfab/api-references/global-api-method-error-codes) を参照してください。

#### スロットリング障害

サービス障害のカテゴリの1つはスロットリングエラーであり、HTTP 429 ステータスコードで示されます。PlayFab サービスがスロットリングエラーを返す場合、クライアントが特定の期間内にエンドポイントを頻繁に呼び出しすぎていることを意味します。SDK はスロットリングエラーを受け取ると、小さなバックオフの後にリクエストを自動的に再試行します。設定された再試行ウィンドウ内でもリクエストが成功しない場合、エラーがタイトルに渡されます。SDK の再試行設定は、**PFSetHttpRetrySettings** を呼び出すことで構成できます。

### ネットワーク障害

基になるネットワークスタックがエラーを返した場合、そのエラーはクライアントに渡されます。ネットワーク障害によってはさまざまなエラーが発生する可能性があります。ほとんどのネットワークエラーは `E_HC_NO_NETWORK (0x89235006)` になります。

## 追加のエラー詳細とトレース

HRESULT に加えて、PlayFab サービスは *errorDetails* 文字列を返すことがあります。この文字列はエンドクライアントには公開されませんが、開発とデバッグ中に役立つ場合があります。返された *errorDetails* 文字列を確認するために詳細なトレースを有効にする方法については、[トレースガイド](/services/playfab/sdks/c/tracing) を参照してください。

## リファレンス

\[Microsoft Game Development Kit におけるエラー処理]\[/gaming/gdk/\_content/gc/system/overviews/error-handling]


## Related topics

- [HTTP 構成](/ja-jp/services/playfab/sdks/c/http-config.md)
- [Lobby and Matchmaking C++ SDK エラーの処理](/ja-jp/services/playfab/multiplayer/lobby/lobby-and-matchmaking-client-sdk-errors.md)
- [SDK エラー処理のベスト プラクティス](/ja-jp/services/playfab/live-service-management/service-gateway/automation/cloudscript/sdk-error-handling-best-practices.md)
- [複数の PlayFab ログインの処理](/ja-jp/services/playfab/identity/player-identity/login/multiple-logins.md)
- [PlayFab Multiplayer C++ SDK エラー コード](/ja-jp/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayererrors.md)
