> ## 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.

# SDK 错误处理最佳实践

> 跨不同语言的管理、服务器和客户端 SDK,检测、检查和处理由 PlayFab API 返回的错误的最佳实践。

本教程介绍如何使用 PlayFab SDK 访问、识别和处理 API 错误。

此处描述的做法同样适用于管理、服务器和客户端 SDK,但具体模式*高度*依赖于你所选择的语言。

简而言之,你所选择的模式将适用于任何 SDK(管理/服务器/客户端),但实现细节将特定于*你*的编程语言和环境。

## 捕获和访问错误

PlayFab SDK 通常通过返回一个错误对象来报告错误。以下代码片段展示了如何检测并访问该错误。

```csharp theme={null}
PlayFabClientAPI.LoginWithEmailAddress(new LoginWithEmailAddressRequest() {
    Email = "doesnotexist@mail.com",
    Password = "nevercorrect",
}, result => {
    // success
}, error => {
    // 'error' object is our point of access to error data
});
```

一般来说,如果错误对象已定义(不为 null),则表示发生了错误。然后我们可以进一步检查该错误。

## 检查错误

检查错误最常见的方法是通过错误代码识别它。如[全局 API 方法错误代码](/services/playfab/api-references/global-api-method-error-codes)中所述,每个生成的错误都包含可读的和数字的错误代码。

<Note>
  代码*本身*就足以识别并相应地处理错误。
</Note>

我们以 [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress) API 方法为例。根据该方法[文档](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress)所述,执行时可能会引发以下内部错误:

* `InvalidTitleId 1004`
* `AccountNotFound 1001`
* `InvalidEmailOrPassword 1142`
* `RequestViewConstraintParamsNotAllowed 1303`

以下方法演示了如何检查和识别此类错误。

```csharp theme={null}
PlayFabClientAPI.LoginWithEmailAddress(new LoginWithEmailAddressRequest() {
    Email = "doesnotexist@mail.com",
    Password = "nevercorrect",
}, result => {
    // success
}, error => {
    // General purpose logging: GenerateErrorReport gives a bunch of information about the error
    Debug.Log(error.GenerateErrorReport());

    // Recognize and handle the error
    switch (error.Error) {
        case PlayFabErrorCode.InvalidTitleId:
            // Handle invalid title id error
            break;
        case PlayFabErrorCode.AccountNotFound:
            // Handle account not found error
            break;
        case PlayFabErrorCode.InvalidEmailOrPassword:
            // Handle invalid email or password error
            break;
        case PlayFabErrorCode.RequestViewConstraintParamsNotAllowed:
            // Handle not allowed view params error
            break;
        default:
            // Handle unexpected error
            break;
    }
});
```

## 处理错误

一旦识别出错误,处理/恢复策略取决于错误的类型和性质。诸如*无效参数*之类的错误,即使重试也永远不会成功。必须先修正请求,该 API 调用才能成功。

有一部分错误可以应用重试策略。*可重试的*错误类型在[全局 API 方法错误代码](/services/playfab/api-references/global-api-method-error-codes)中进行了描述。

请务必在应用重试策略时满足以下要求:

* 每次重试时,重试之间的延迟应*呈指数增长*。这可以*增加*成功调用的机会,并防止你的游戏对 PlayFab 服务器发送过多请求(否则会导致*更多*被拒绝的调用)。

* 你应*有选择性地*应用此重试策略,仅将其用于值得重试的错误代码。

请参阅我们的[全局 API 方法错误代码](/services/playfab/api-references/global-api-method-error-codes)教程,以获取可安全重试的错误代码列表。


## Related topics

- [调用 XBOX 服务的最佳实践](/zh-CN/services/xbox-services/develop/best-practices/live-best-practices-calling-xbl.md)
- [限流最佳实践](/zh-CN/services/playfab/live-service-management/service-gateway/throttling/best-practices.md)
- [处理离线游戏的最佳实践](/zh-CN/services/xbox-services/develop/best-practices/live-best-practices-offline-play.md)
- [最佳实践](/zh-CN/services/xbox-services/develop/best-practices/index.md)
- [Insights 最佳实践](/zh-CN/services/playfab/data-analytics/legacy/insights/best-practices.md)
