SDK 错误处理最佳做法

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

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

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

捕获和访问错误

PlayFab SDK 通常通过返回错误对象来报告错误。 以下片段介绍如何检测和访问错误。

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 方法错误代码中所述,每个生成的错误都包含用户可读的数字错误代码。

注意

通过错误代码本身足以相应地识别和处理错误。

我们以 LoginWithEmailAddress API 方法为例。 如此方法的文档中所述,在执行时可能会引发以下内部错误:

  • InvalidTitleId 1004
  • AccountNotFound 1001
  • InvalidEmailOrPassword 1142
  • RequestViewConstraintParamsNotAllowed 1303

以下方法说明如何检查和识别这类错误。

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 方法错误代码中介绍了可重试的错误类型。

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

  • 对于每次重试,重试之间的延迟应呈指数级增加。 这会增加成功调用的可能性,并防止游戏向 PlayFab 服务器发送垃圾邮件(这会导致更多拒绝的调用)。

  • 应该选择性地应用此重试策略,只将它用于值得重试的代码。

请参阅我们的全局 API 方法错误代码教程以获取可安全重试的代码的列表。