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 方法错误代码教程以获取可安全重试的代码的列表。