> ## 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 已到期。如需如何處理此情況的詳細資訊，請參閱[處理權杖到期](/zh-TW/services/playfab/sdks/c/relogin)。

* `E_PF_NOSECRETKEY (0x89235412)`
  表示所提供的 PFEntityHandle 沒有相關聯的 SecretKey。缺少 SecretKey 通常表示您嘗試使用無效的實體類型提出要求。需要 SecretKey 的 API 只能由遊戲實體呼叫。請注意，SecretKey API 適用於伺服器或系統管理案例，在 GDK 中無法使用。

### PlayFab 服務失敗

即使 SDK 成功提出 PlayFab 服務要求，服務仍可能傳回錯誤。PlayFab 服務錯誤大致分為兩種類型：*全域*錯誤，可能由任何 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 服務全域 API 方法錯誤碼](/zh-TW/services/playfab/api-references/global-api-method-error-codes)。

#### 節流失敗

服務失敗的其中一個類別是節流錯誤，以 HTTP 429 狀態碼表示。當 PlayFab 服務傳回節流錯誤時，表示用戶端在特定時間內呼叫端點的頻率過高。當 SDK 收到節流錯誤時，會在短暫的退避之後自動重試要求。如果要求在設定的重試時間範圍內仍未成功，錯誤就會傳遞給遊戲。您可以呼叫 **PFSetHttpRetrySettings** 來設定 SDK 重試設定。

### 網路失敗

如果基礎網路堆疊傳回錯誤，該錯誤會傳遞給用戶端。視網路失敗情況而定，可能會發生各種錯誤。大多數網路錯誤都會產生 `E_HC_NO_NETWORK (0x89235006)`。

## 其他錯誤詳細資料和追蹤

除了 HRESULT 之外，PlayFab 服務有時還會傳回 *errorDetails* 字串。此字串不會向終端用戶端公開，但在開發和偵錯期間可能很有用。若要了解如何啟用詳細追蹤以查看傳回的 *errorDetails* 字串，請參閱[追蹤指南](/zh-TW/services/playfab/sdks/c/tracing)。

## 參考

\[Microsoft Game Development Kit 中的錯誤處理]\[/gaming/gdk/\_content/gc/system/overviews/error-handling]


## Related topics

- [HTTP 設定](/zh-TW/services/playfab/sdks/c/http-config.md)
- [PlayFab Party 版本資訊](/zh-TW/services/playfab/multiplayer/networking/release-notes.md)
- [PlayFab Multiplayer C++ SDK 版本資訊](/zh-TW/services/playfab/multiplayer/lobby/lobby-matchmaking-sdks/lobby-and-matchmaking-release-notes.md)
- [PlayFab SDK 產品](/zh-TW/services/playfab/sdks/sdk-products.md)
- [從 PlayFab 獨立 SDK v1 移轉至 Unified SDK v2](/zh-TW/services/playfab/sdks/unified-sdk/migrating-from-v1.md)
