Skip to main content
在 PlayFab Services SDK 中,异步 API 调用有几个不同的失败点。处理这些错误的方式取决于操作失败的方式和时机。 与 GDK 中的大多数异步调用一样,PlayFab API 遵循相同的通用调用模式:
  1. PF*Async(…) 调用,启动异步操作。
  2. (可选) XAsyncGetStatus(…) 调用,用于跟踪异步操作的状态。可用于等待异步操作完成。
  3. PF*GetResultSize(…),用于检索结果有效负载的大小(以字节为单位)。
  4. PF*GetResult(…),用于检索异步操作的结果。
这些调用中的每一个都可能因不同原因而失败。以下部分详细介绍了最常遇到的故障类型。

同步失败

同步失败是指初始的 PF*Async 调用返回错误。此类失败通常表明存在编程错误——无效的调用模式、无效的参数等。这些类型的错误应该在开发期间解决。大多数其他同步失败是致命的,无法轻易处理(例如 E_OUTOFMEMORY)。

异步失败

异步失败是指 XAsyncGetStatusPF*GetResultSizePF*GetResult 中的任何一个失败。异步失败的范围更广。除了由于无效参数导致的错误之外,异步失败还分为下面几个部分中详细描述的几个类别。

令牌验证失败

在发起 PlayFab 服务调用之前,SDK 会进行客户端验证以确保所需的身份验证令牌可用且仍然有效。如果此检查失败,将返回以下错误之一:
  • E_PF_NOENTITYTOKEN (0x89235411): 表示与提供的 PFEntityHandle 关联的 EntityToken 已过期。有关如何处理这种情况的更多信息,请参阅处理令牌过期
  • E_PF_NOSECRETKEY (0x89235412) 表示提供的 PFEntityHandle 没有关联的 SecretKey。缺少 SecretKey 通常意味着你尝试使用无效的实体类型发出请求。需要 SecretKey 的 API 只能由游戏实体调用。请注意,SecretKey API 面向服务器或管理员场景,在 GDK 中不可用。

PlayFab 服务失败

如果 SDK 成功发出 PlayFab 服务请求,服务仍可能返回错误。有两大类 PlayFab 服务错误:global(可以从任何 PlayFab API 返回),specific(特定于 API)。以下是完整的 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 服务全局 API 方法错误代码

限流失败

一类服务失败是限流错误,由 HTTP 429 状态代码指示。当 PlayFab 服务返回限流错误时,意味着客户端在特定时间段内调用某个端点的频率过高。当 SDK 收到限流错误时,它将在小的回退后自动重试请求。如果请求在配置的重试窗口内仍未成功,则该错误将传递给游戏。SDK 重试设置可以通过调用 PFSetHttpRetrySettings 进行配置。

网络失败

如果底层网络堆栈返回错误,则该错误将传递给客户端。根据网络故障,可能会发生各种错误。大多数网络错误都会导致 E_HC_NO_NETWORK (0x89235006)

其他错误详情和跟踪

除了 HRESULT 之外,PlayFab 服务有时还会返回 errorDetails 字符串。此字符串不会暴露给最终客户端,但在开发和调试期间可能很有用。要了解如何启用详细跟踪以查看返回的 errorDetails 字符串,请参阅跟踪指南

参考

[Microsoft Game Development Kit 中的错误处理][/gaming/gdk/_content/gc/system/overviews/error-handling]
最后修改于 2026年8月25日