标题启动
当标题启动时,第一步是确定为其管理游戏存档的用户。如果该用户在另一台设备上有活动的游戏会话,系统对话框会要求用户切换设备。如果用户切换,另一台设备会将其最新的本地游戏存档数据同步到新设备。如果你希望数据是本地的并绑定到设备,可以使用仅机器的提供程序。此选项将null 用户句柄传递到游戏存档 API 中。
标题选择用户后,它会使用该用户的句柄初始化游戏存档。在初始化期间,游戏存档会连接到 XBOX 网络以准备用户的存储空间。
相关系统对话框:
有关用户模型和用户管理的信息,请参阅用户模型。
有关存储的信息,请参阅游戏存档存储系统。
连接检查
接下来,标题确定它是否可以连接到 XBOX 网络,以确认是否可以同步到云端。如果标题无法连接,用户可选择重试或在离线模式下恢复标题。游戏存档可以在离线模式下运行。 相关系统对话框:
离线行为
数据所有权检查
在连接确认之后,标题会确定设备是否有权修改数据。如果设备有权修改,它可以获取标题的锁。要使标题获取和释放锁,标题需要访问 XBOX services。 标题会检查是否有另一台设备持有用户数据的锁。这另一台设备可能仍持有锁,原因如下。- 与 XBOX 网络断开连接,使该设备无法调用
WebReleaseLock。 - 另一台设备正在上传大型游戏存档,无法调用
WebReleaseLock。
- 强制从另一台设备获取锁,会导致另一台设备丢失会话数据。
- 尝试再次正常获取锁。
- 取消获取锁。
与云同步数据
标题获取用户数据的锁后,会将该数据与云端同步。然后标题决定它执行以下操作之一:- 上传本地游戏存档数据。
- 下载云端数据并更新本地游戏存档数据。
- 不采取任何操作。
- 解决任何数据冲突。
- 本地保存时间:此设备上次写入存档的时间
- 云端保存时间:云端副本上次更新的时间
四种同步结果
如果从云端下载,会出现同步对话框:正在同步 … 的数据。如果用户使用此对话框取消游戏存档,则标题继续以离线模式运行。
已更改和保存状态
此场景假设用户在两台设备(设备 A 和设备 B)上进行游玩。 本地已更改 用户在设备 A 上离线时取得了进度。例如,用户在设备 A 上没有互联网连接的情况下升到了 126 级。 云端已更改 自用户上次同步设备 A 以来,进度已从设备 B 上传。例如,用户在设备 B 上升到 99 级并上传到了云端。 两者都已更改 用户在设备 A 上离线游玩。自上次同步设备 A 以来,用户也在设备 B 上进行了游玩。例如,设备 A 是 126 级。云端是 99 级。 如果存在冲突,系统会用对话框提示用户解决冲突:你想使用哪一个?原子性
游戏存档在容器(文件夹)级别是原子的。如果云端文件夹包含匹配的本地文件夹中不包含的 blob,则系统将这两个文件夹视为独立的。此差异会造成冲突。游戏循环
游戏循环是游戏会话的活动部分。它在标题完成与云端同步存档数据后开始。 在活动游戏会话期间,标题在本地读取和写入存档数据。在此期间创建或更新的所有数据都保留在游戏存档本地存储中,直到系统执行云同步。 当满足以下主机或 PC 条件之一时,游戏循环在用户的游戏会话结束时结束。当主机或 PC 触发状态更改(如挂起、终止、注销或其他系统事件)时,会话结束。定期同步到云端
每 30 分钟游玩时间,标题尝试自动同步到云端。此行为基于以下场景。会话结束
游戏会话结束后,标题将新数据上传到云端。当设备有连接时,设备会尝试将数据上传到云端。数据上传后,锁被释放。 有关调试查看 XBOX 网络上的锁释放,请参阅检查游戏存档网络流量。连接丢失和锁场景
在连接丢失期间写入的数据存储在游戏存档本地存储中,并在连接恢复后上传。但是,如果用户尝试使用另一台设备,则当前设备因连接丢失而无法释放锁。用户能够强制将锁转移到另一台设备。根据这些锁转移发生的时间,标题可能会经历不同的行为。标题启动前连接丢失
时机: 用户在没有连接的情况下启动标题。由于没有连接,标题为用户提供以离线模式启动的选项。当设备重新连接到 XBOX 网络并且云端包含较新的数据时,标题会将本地数据视为过时。在这种情况下,标题会通过挂起操作终止应用来结束游戏会话。 相关系统对话框:我们需要关闭此游戏或应用
游戏循环期间连接丢失
时机: 用户处于活动游戏会话中,且标题仍持有锁。在某个时刻,连接丢失。然后标题允许在此丢失期间继续游玩。
会话结束(终止或挂起)前连接丢失
时机: 玩家在设备断开连接时退出/挂起标题。设备仍有未同步的本地数据。
