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

# 处理离线游戏的最佳实践

> XBOX 主机游戏应如何检测连接丢失、支持离线模式,以及优雅地处理 XBOX Live 和 XBOX 网络断开场景。

<Note>本文仅适用于 XBOX 主机,不适用于其他平台(例如 PC)。</Note>

XBOX 被设计为一种联网设备,最佳体验(例如多人游戏和视频流)需要网络连接。
然而,XBOX 主机也支持多种离线游戏场景。

游戏必须能够稳健地应对连接故障。
对于具备离线游戏体验的游戏,应让玩家能够充分享受这些体验。
对于设计为"始终在线"的游戏,当网络连接丢失时,应优雅地将用户返回到离线状态。

全球越来越多的消费者可以访问互联网。
然而,世界上仍有一些地方的网络连接不稳定,并且有时会出现路由器故障、光纤中断、服务器崩溃或无线服务中断等情况。

为支持最广泛的消费者和体验,XBOX 允许出现常见情况——即互联网连接偶尔丢失或完全不可用。
您的游戏会收到连接故障的通知,并可自由选择如何响应——例如继续完整游戏、降级为离线模式或直接结束游戏。

## 正常在线操作

一般而言,XBOX 主机以完全联网状态运行,用户拥有稳定的互联网连接,并可完整访问 XBOX 网络(也称为 XBOX Live)以及第三方服务。
此联网状态使 XBOX 服务能够定期验证主机状态、提供更新以及执行其他有益于您的游戏和用户的后台服务。

我们建议您假设用户在大多数情况下都拥有在线连接。

## 离线游戏原则

在某些情况下,在线连接不可用。

对于离线游戏,XBOX 的设计遵循以下原则:

* 最重要的是,即使存在连接问题也要让用户继续游戏。

* 即使用户完全没有连接,也要让用户继续游戏。

* 为用户提供简单且可预测的离线游戏,同时仍保持始终联网体验的精神。

## 离线模式

有两种高级*连接丢失*场景:

* 互联网服务完全丢失

* 一项或多项在线服务丢失

在每种模式下,都可能出现各种情况。
下面将说明这些场景,并给出会影响游戏体验的常见离线场景示例。

## 离线场景:游戏启动时无互联网服务

游戏可将自身声明为以下三种类型之一:

* *需要 XBOX 网络*:所有游戏模式都需要互联网连接。

* *需要 XBOX Live 金会员*:所有游戏模式都需要互联网连接和 XBOX Live 金会员资格。

* *不需要 XBOX 网络*:游戏至少有一种不需要互联网连接的游戏模式。从技术上讲,此类型不会在应用程序清单中显式声明。未声明为前两种类型之一的应用被视为"不需要 XBOX 网络",即支持离线。

当用户启动游戏而主机处于离线状态时,系统会检查应用程序清单中的游戏连接声明。
如果游戏需要连接(即前两种情况),系统会自动向用户显示消息且不启动该标题。

如果主机处于离线状态,系统只会启动至少有一种游戏模式不需要连接的标题。
换句话说,系统不会启动"需要 XBOX 网络"或"需要 XBOX Live 金会员"的标题。

## 离线场景:游戏过程中连接丢失

如果连接丢失时游戏已在运行,则系统将通知标题。
如果游戏未使用在线服务,则继续会话而不中断。
如果游戏正在使用在线服务,则切换到不再需要这些服务的模式,或通知玩家游戏会话因离线状态而结束。

声明为"需要 XBOX 网络"或"需要 XBOX Live 金会员"的标题,当主机在一段时间内失去所有网络连接时,将由系统自动挂起,并且系统将自动向用户提供错误消息。

与涉及游戏挂起的任何其他场景一样,您应该保存状态,以便用户不会丢失数据,并可在重新获得连接后快速返回该状态。

## 离线场景:单个 XBOX 服务停止运行时

在其他情况下,即使互联网连接正常,特定的在线服务也可能不可用。

例如,单个 XBOX 服务可能会短暂离线。
在这种情况下,对特定服务的调用将超时或向游戏报告错误。
您应正确处理服务离线状态,就像在 XBOX 360 或 Windows 上处理这些情况一样。

至少游戏不能崩溃或挂起。
如果没有该服务就无法继续游戏,则向用户报告该情况,并允许用户在游戏的其他不需要该服务的区域继续游戏。

在最佳情况下,继续游戏并缓存数据以供稍后发送(如果游戏正在向服务写入数据)或对数据作出合理的假设(如果游戏正在从服务读取数据)。

## 离线场景:第三方服务停止运行时

如果您的游戏依赖第三方在线服务,那么当该服务出现故障时,您的游戏也必须具备恢复能力。
如果服务失败,您的游戏不能崩溃或挂起。

如果游戏无法继续,您可以向用户报告服务错误。
理想情况下,应继续游戏,或允许用户在游戏中不需要在线服务的区域继续游戏。

## 离线场景:您的云服务停止运行时

XBOX 的一大亮点功能是云计算能力。
某些游戏可能完全依赖始终连接的服务,例如 Azure PlayFab Multiplayer Servers,该服务可访问额外的计算能力或始终可用的游戏服务器。
在能够增强玩家体验时,允许并鼓励使用这种始终连接模式。

如果您的游戏使用此模式,则我们建议您的游戏能够应对服务中断(数秒到最多一分钟),这些中断可能是由于互联网连接完全丢失或某个特定云服务丢失所致。
但是,游戏不必具备离线模式。
如果游戏确实需要连接而连接不可用,则通知用户并结束游戏会话。

## XBOX 要求

处理离线场景时最重要的要求是游戏稳定性。无论是完全丢失连接还是仅丢失特定的在线服务,您的游戏都不能挂起、崩溃或导致用户丢失状态。
您的游戏必须具备用于处理网络超时场景以及处理任何访问在线服务的 API 返回错误的稳健系统。

游戏不必支持离线游戏。
如果您的游戏因服务连接丢失而无法继续,则通知用户,结束游戏会话,并返回到主菜单或初始交互状态。

## 最佳实践

以下是处理离线情况的最佳实践:

* 设计游戏时假设用户在大多数情况下都拥有在线连接。

* 如果对您的游戏设计有意义,则考虑设计一些即使主机处于离线状态也能让用户享受愉悦体验的游戏模式。

* 服务可能会变得不可用。连接可能会失败。为可能超时的 API 或在在线服务停止或互联网连接丢失时报告失败条件的 API 构建稳健的错误处理。只要有可能,就应让用户继续游戏,尽管存在这些问题。

* 遵守 XBOX 要求 (XR)。不要挂起或崩溃。

* 收到 PLM 标题挂起通知后,保存状态,以便用户不会丢失数据,并可在恢复游戏时快速返回该状态。

* 在应用程序清单中适当地标记您的标题。仅当所有游戏模式都需要连接时,才将您的标题标记为"需要 XBOX 网络"。

* XBOX 游戏可以在所有游戏模式中使用并依赖在线服务。如果游戏因服务连接丢失而无法继续,则通知用户,结束游戏会话,并返回到主菜单或初始交互状态。

* 不要依赖 XBOX 帮助服务来提供与离线状态相关的错误消息和帮助。XBOX 帮助服务需要连接到 XBOX 服务。


## Related topics

- [最佳实践](/zh-CN/services/xbox-services/develop/best-practices/index.md)
- [调用 XBOX 服务的最佳实践](/zh-CN/services/xbox-services/develop/best-practices/live-best-practices-calling-xbl.md)
- [丰富在线状态最佳实践](/zh-CN/services/xbox-services/community/presence/concepts/live-presence-best-practices.md)
- [SDK 错误处理最佳实践](/zh-CN/services/playfab/live-service-management/service-gateway/automation/cloudscript/sdk-error-handling-best-practices.md)
- [现代游戏玩家代号的最佳实践和测试](/zh-CN/services/xbox-services/fundamentals/identity/user-profile/gamertags/live-modern-gamertags-best-practices-and-testing.md)
