连接模式
已连接云端模式
当网络可用且PFGameSaveFilesAddUserWithUiAsync() 成功完成时,系统运行于已连接云端模式。在此模式下:
- 所有 API 均正常工作,支持完整的云端同步
- 存档数据可按预期上传
- 存储配额信息可用
- 活动设备监控可正常工作
离线模式(未连接云端)
当网络不可用或用户选择离线游玩时,系统进入离线模式,功能受限。你可以使用PFGameSaveFilesIsConnectedToCloud() 检查当前连接状态,以判断系统所处的模式。
处理初次同步时的网络故障
当在无网络连接时调用PFGameSaveFilesAddUserWithUiAsync(),会触发 PFGameSaveFilesUiSyncFailedCallback。系统在等待用户响应期间不会触发 XAsyncBlock 回调——异步操作会一直暂停,直到用户选择了一个最终动作。
- 再试一次(
Retry):重新发起网络调用。如果重试仍失败,此回调会再次触发,用户须再次响应。在每次重试循环中XAsyncBlock回调都会保持延迟。 - 使用离线模式(
UseOffline):XAsyncBlock回调以S_OK触发,但系统进入离线模式(可通过PFGameSaveFilesIsConnectedToCloud()检测)。 - 取消:
XAsyncBlock回调以E_PF_GAMESAVE_USER_CANCELLED触发。
离线模式下的 API 行为
在离线模式下,各 API 的行为有所不同:正常工作的 API
PFGameSaveFilesGetFolder()—— 返回本地存档文件夹路径
功能受限的 API
PFGameSaveFilesUploadWithUiAsync()—— 立即返回S_OK,但异步完成时返回E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUDPFGameSaveFilesGetRemainingQuota()—— 返回E_PF_GAMESAVE_DISCONNECTED_FROM_CLOUDPFGameSaveFilesSetActiveDeviceChangedCallback()—— 可以设置,但永远不会触发
恢复在线模式
- 再次调用
PFGameSaveFilesAddUserWithUiAsync()以尝试重新连接 - 无需完全重新初始化 Game Saves 系统
- 如果网络仍不可用,会再次显示失败 UI
- 重试后使用
PFGameSaveFilesIsConnectedToCloud()验证连接状态
其他连接状态场景
PFGameSaveFilesIsConnectedToCloud() API 特别有用,因为断开连接可能以多种方式发生:
- 同步期间网络不可用:用户明确选择离线游玩
- 活动设备变更:另一台设备接管成为活动设备,会自动将当前设备置于离线模式
离线支持最佳实践
- 始终实现同步失败回调,以妥善处理网络问题
- 在尝试云端操作前,定期使用
PFGameSaveFilesIsConnectedToCloud()检查连接状态 - 在离线模式下运行时告知玩家,让他们了解存档不会同步
- 在网络恢复时提供重试选项
- 本地存档始终可用——不论网络状态如何,玩家都可以继续游玩
- 监控断开事件——请记住,当另一台设备成为活动设备时,本设备可能被断开
已连接模式下的上传行为
即使在已连接模式下,上传也可能因网络问题或速率限制而失败。发生此情况时,XAsyncBlock 回调不会立即触发——系统会在通过 UI 回调状态机 等待用户响应期间暂停异步操作:
PFGameSaveFilesUiSyncFailedCallback会带着错误详情触发。XAsyncBlock回调尚未触发——操作会在系统等待响应期间暂停。- 如果用户选择
Retry,将重试上传。如果再次失败,回调会再次触发,用户须再次响应。 - 如果用户选择
Cancel,XAsyncBlock回调会以E_PF_GAMESAVE_USER_CANCELLED触发。 - 如果重试成功,
XAsyncBlock回调会以S_OK触发。
PFGameSaveFilesUploadWithUiAsync()。