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

# 了解 Game Saves 同步流程

> 逐步了解 XBOX Game Saves 的六個步驟同步流程：遊戲啟動、連線檢查、資料擁有權、雲端同步、遊戲迴圈與工作階段結束。

本文說明 Game Saves 的六部分同步流程。雖然行為可能會因您使用的特定 Game Saves API 而略有不同，但使用者起始的存檔的一般流程是相同的。步驟如下。

1. [遊戲啟動](/zh-TW/build/core-features/common/game-save/game-saves-syncing#title-start)
2. [連線檢查](/zh-TW/build/core-features/common/game-save/game-saves-syncing#connection-check)
3. [資料擁有權檢查](/zh-TW/build/core-features/common/game-save/game-saves-syncing#data-ownership-check)
4. [與雲端同步資料](/zh-TW/build/core-features/common/game-save/game-saves-syncing#syncing-data-with-the-cloud)
5. [遊戲迴圈](/zh-TW/build/core-features/common/game-save/game-saves-syncing#gameplay-loop)
6. [工作階段結束](/zh-TW/build/core-features/common/game-save/game-saves-syncing#session-end)

## 遊戲啟動

遊戲啟動時，第一個步驟是判斷要為哪位使用者管理 Game Saves。如果使用者在另一部裝置上有作用中的遊戲工作階段，系統對話方塊會要求使用者切換裝置。如果使用者切換，另一部裝置會將其最新的本機 Game Saves 資料同步到新裝置。如果您希望資料保留在本機並繫結到裝置，可以使用僅限機器的提供者。此選項會將 `null` 使用者控制代碼傳入 Game Saves API。

遊戲選取使用者之後，會使用該使用者的控制代碼初始化 Game Saves。在初始化期間，Game Saves 會連線到 XBOX 網路，以準備使用者的儲存空間。

| API | Game Saves 提供者初始化函式 |
| - | - |
| `XGameSave` | `XGameSaveInitializeProvider()` |
| `XGameSaveFiles` | `XGameSaveFilesGetFolderWithUIAsync()` |

相關的系統對話方塊：

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/signed-into-another-device.png?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=b333cb6234262d4b20d1b00cfa7119f7" alt="您似乎已在另一部裝置上登入。" width="792" height="1026" data-path="images/gdk/features/common/signed-into-another-device.png" />

如需使用者模型與使用者管理的資訊，請參閱[使用者模型](/zh-TW/build/core-features/common/game-save/game-saves-developer-guide#user-models)。

如需儲存空間的資訊，請參閱 [Game Saves 儲存系統](/zh-TW/build/core-features/common/game-save/game-saves-storage-systems)。

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-1-title-start.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=e73bde01a012a367ec751c0f00a760c5" alt="同步程序第一個步驟的流程圖。" width="663" height="1258" data-path="images/gdk/features/common/sync-flow-1-title-start.jpg" />

## 連線檢查

接著，遊戲會判斷是否能連線到 XBOX 網路，以確認是否可以同步到雲端。如果遊戲無法連線，使用者會看到重試或以離線模式繼續遊戲的選項。Game Saves 可以在離線模式下執行。

相關的系統對話方塊：<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-failed-network-dialogue.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=2d1a2c71ac69baac7aa3863e5308554d" alt="我們目前無法將您的資料與雲端同步。" width="1006" height="559" data-path="images/gdk/features/common/sync-failed-network-dialogue.jpg" />

<img src="https://mintlify.s3.us-west-1.amazonaws.com/microsoft-4404708b/zh-TW/build/core-features/common/game-save/game-saves-dialogues#we-couldnt-get-your-latest-saved-data" alt="我們無法取得您最新的存檔資料。" />

### 離線行為

| XBOX 網路存取 | 資料同步模式 |
| - | - |
| 是 | 一般雲端同步流程。繼續進行資料擁有權檢查。 |
| 否 | 離線模式：遊戲會將資料儲存到使用者的本機 Game Saves 儲存空間，但目前的工作階段不會與雲端同步。 |

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-2-connection-check.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=abc4d0abd4bcce59bce850fb348d19fb" alt="同步程序中連線檢查步驟的流程圖。" width="598" height="444" data-path="images/gdk/features/common/sync-flow-2-connection-check.jpg" />

## 資料擁有權檢查

確認連線之後，遊戲會判斷裝置是否有權修改資料。如果有，裝置就可以取得遊戲的鎖定。若要取得與釋放鎖定，遊戲需要存取 XBOX services。

遊戲會檢查是否有另一部裝置持有使用者資料的鎖定。該裝置可能因為下列原因而仍保留鎖定。

* 與 XBOX 網路中斷連線，使裝置無法呼叫 `WebReleaseLock`。
* 另一部裝置正在上傳大型 Game Save，因此無法呼叫 `WebReleaseLock`。

如果另一部裝置持有鎖定，使用者有下列選項。

* 強制從另一部裝置取得鎖定，導致另一部裝置遺失工作階段資料。
* 再次嘗試以一般方式取得鎖定。
* 取消取得鎖定。

如果使用者取消取得鎖定，遊戲會以離線模式啟動。

如需更多連線中斷與鎖定案例，請參閱[連線中斷與鎖定案例](/zh-TW/build/core-features/common/game-save/game-saves-syncing#connection-loss-and-lock-scenarios)。

相關的系統對話方塊：

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/lock-contention-dialogue.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=38894f740f55a181c2137b3c9b84cb18" alt="您的另一部 XBOX 主機需要很長的時間才能同步到雲端" width="639" height="563" data-path="images/gdk/features/common/lock-contention-dialogue.jpg" />

如需透過 XBOX 網路監視鎖定取得的詳細資料，請參閱[檢查 Game Saves 網路流量](/zh-TW/build/core-features/common/game-save/game-saves-tools#inspecting-game-saves-network-traffic)。

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-3-data-ownership-check.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=b21137181a92b3e1afaad2618bea46ae" alt="同步程序中資料擁有權檢查的流程圖。" width="846" height="1092" data-path="images/gdk/features/common/sync-flow-3-data-ownership-check.jpg" />

## 與雲端同步資料

遊戲取得使用者資料的鎖定之後，會將該資料與雲端同步。接著，遊戲會判斷要執行下列哪一個動作：

* 上傳本機 Game Saves 資料。
* 下載雲端資料並更新本機 Game Saves 資料。
* 不採取任何動作。
* 解決任何資料衝突。

遊戲會比較兩個時間戳記來做出判斷。

* **本機存檔時間**：此裝置上次寫入存檔的時間
* **雲端存檔時間**：雲端複本上次更新的時間

### 四種同步結果

| 本機與雲端 | 動作 | 意義 |
| - | - | - |
| 兩者皆未變更 | 不執行任何動作 | 兩個位置的資料相符。沒有新的進度。 |
| 僅本機變更 | 上傳本機>雲端 | 使用者離線遊玩。將較新的本機遊戲存檔資料傳送到雲端。 |
| 僅雲端變更 | 下載雲端>本機 | 使用者在另一部裝置上遊玩。從雲端取得其遊戲存檔資料。 |
| 兩者皆變更 | 衝突>提示使用者 | 每個位置都顯示有進度，而另一部裝置沒有。由使用者解決。 |

<Note>
  如果發生從雲端下載，會出現同步對話方塊[正在同步...的資料](/zh-TW/build/core-features/common/game-save/game-saves-dialogues#syncing-data)。如果使用者使用此對話方塊取消 Game Saves，遊戲會以離線模式繼續。
</Note>

### 變更與存檔狀態

此案例假設使用者在兩部裝置 (裝置 A 與裝置 B) 上遊玩。

**本機已變更**

使用者在裝置 A 上離線時取得進度。例如，使用者在沒有網際網路連線的情況下，在裝置 A 上升到 126 級。

**雲端已變更**

自使用者上次同步裝置 A 以來，已從裝置 B 上傳進度。例如，使用者在裝置 B 上升到 99 級並上傳到雲端。

**兩者皆已變更**

使用者在裝置 A 上離線遊玩。自上次同步裝置 A 以來，使用者也在裝置 B 上遊玩。例如，裝置 A 為 126 級，雲端為 99 級。

如果發生衝突，系統會以對話方塊提示使用者解決：[您要使用哪一個？](/zh-TW/build/core-features/common/game-save/game-saves-dialogues#which-one-do-you-want-to-use)

### 不可部分完成性

Game Saves 在容器 (資料夾) 層級是不可部分完成的。如果雲端資料夾包含對應本機資料夾未包含的 Blob，系統會將這兩個資料夾視為不同。此差異會造成衝突。

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-4-sync-data-with-cloud.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=2e20d3966826e47b9b79c5bf30cc9227" alt="同步程序中雲端同步的流程圖。" width="930" height="1119" data-path="images/gdk/features/common/sync-flow-4-sync-data-with-cloud.jpg" />

## 遊戲迴圈

*遊戲迴圈*是遊戲工作階段的作用中部分。它會在遊戲完成將存檔資料與雲端同步之後開始。

在作用中的遊戲工作階段期間，遊戲會在本機讀取與寫入存檔資料。在此期間建立或更新的所有資料都會保留在 Game Saves 本機儲存空間中，直到系統執行雲端同步為止。

如果主機或 PC 符合下列其中一個條件，遊戲迴圈會在使用者的遊戲工作階段結束時結束。當主機或 PC 觸發狀態變更 (例如暫停、終止、登出或其他系統事件) 時，工作階段即結束。

### 定期同步到雲端

每經過 30 分鐘的遊戲時間，遊戲就會嘗試自動同步到雲端。此行為以下列案例為依據。

| Game Saves API | 動作 | 時機 |
| - | - | - |
| `XGameSaveFiles`、無程式碼雲端存檔 | 上傳本機>雲端 | 自遊戲寫入指定的存檔區域後已經過 30 分鐘。 |
| `XGameSave` | 上傳本機>雲端 | 每 30 分鐘的遊戲時間。 |

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-5-gameplay-loop.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=3a0165fb65cfb429d4455e018b4fd95f" alt="遊戲迴圈與 Game Saves 互動的流程圖。" width="714" height="977" data-path="images/gdk/features/common/sync-flow-5-gameplay-loop.jpg" />

## 工作階段結束

遊戲工作階段結束後，遊戲會將新資料上傳到雲端。裝置有連線時，會嘗試將資料上傳到雲端。資料上傳之後，鎖定即會釋放。

若要在 XBOX 網路上查看鎖定釋放以進行偵錯，請參閱[檢查 Game Saves 網路流量](/zh-TW/build/core-features/common/game-save/game-saves-tools#inspecting-game-saves-network-traffic)。

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/sync-flow-6-session-end.jpg?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=fb2ca714223c6846bcf37775a7d98c6f" alt="同步程序中工作階段結束行為的流程圖。" width="1384" height="587" data-path="images/gdk/features/common/sync-flow-6-session-end.jpg" />

## 連線中斷與鎖定案例

連線中斷期間寫入的資料會儲存在 Game Saves 本機儲存空間中，並在連線恢復後上傳。不過，如果使用者嘗試使用另一部裝置，目前的裝置會因為連線中斷而無法釋放鎖定。使用者可以強制將鎖定轉移到另一部裝置。視這些鎖定轉移發生的時間而定，遊戲可能會有不同的行為。

### 遊戲啟動前連線中斷

> **時機**：使用者在沒有連線的情況下啟動遊戲。

由於沒有連線，遊戲會提供使用者以離線模式啟動的選項。當裝置重新連線到 XBOX 網路，且雲端包含較新的資料時，遊戲會將本機資料視為過時。在此情況下，遊戲會透過暫停作業終止應用程式來結束遊戲工作階段。

相關的系統對話方塊：[我們需要關閉此遊戲或應用程式](/zh-TW/build/core-features/common/game-save/game-saves-dialogues#we-need-to-close-this-game-or-app)

### 遊戲迴圈期間連線中斷

> **時機**：使用者處於作用中的遊戲工作階段，且遊戲仍持有鎖定。在某個時間點，連線中斷。遊戲接著允許在連線中斷期間繼續遊玩。

| 離線裝置 | 重新連線時的鎖定狀態 | 重新連線時的遊戲動作 | 使用者體驗/UI |
| - | - | - | - |
| 主機 | 仍持有鎖定 | 繼續在本機儲存。 | 存檔會進入本機儲存空間。 |
| 主機 | 鎖定已被另一部裝置取得 | 遊戲終止。 | 結束並回到主畫面。 |
| PC | 仍持有鎖定 | 繼續在本機儲存。 | 存檔會進入本機儲存空間。 |
| PC | 鎖定已被另一部裝置取得 | 遊戲照常繼續。衝突會在下次同步時解決。 | 遊戲繼續。 |

### 工作階段結束前連線中斷 (終止或暫停)

> **時機**：玩家在裝置中斷連線時結束/暫停遊戲。裝置仍有未同步的本機資料。

| 離線裝置 | 連線中斷時間 | 重新連線時的鎖定狀態 | 重新連線時的裝置動作 |
| - | - | - | - |
| 主機 | 終止之前 | 仍持有鎖定 | 資料已上傳且鎖定已釋放。 |
| 主機 | 終止之前 | 鎖定已被另一部裝置取得 | 資料會在下次遊戲啟動時進行合併解決。 |
| 主機 | 暫停之前 | 仍持有鎖定 | 資料已上傳且鎖定已釋放。 |
| 主機 | 暫停之前 | 鎖定已被另一部裝置取得 | 遊戲終止，資料會在下次遊戲啟動時進行合併解決。 |
| PC | 終止之前 | 仍持有鎖定 | 資料已上傳且鎖定已釋放。 |
| PC | 終止之前 | 鎖定已被另一部裝置取得 | 資料會在下次遊戲啟動時進行合併解決。 |
| PC | 暫停之前 | 仍持有鎖定 | 資料已上傳且鎖定已釋放。 |
| PC | 暫停之前 | 鎖定已被另一部裝置取得 | 資料會在下次遊戲啟動時進行合併解決。 |

## 電源中斷

電源中斷的行為與連線中斷類似。主要差異在於任何進行中的存檔作業都會遺失。


## Related topics

- [理解游戏存档同步流程](/zh-CN/build/core-features/common/game-save/game-saves-syncing.md)
- [游戏存档概述](/zh-CN/build/core-features/common/game-save/game-saves-overview.md)
- [XGameSave API 概述](/zh-CN/build/core-features/common/game-save/xgamesave.md)
- [XGameSaveFiles API 概述](/zh-CN/build/core-features/common/game-save/xgamesavefiles.md)
- [游戏存档调试](/zh-CN/build/core-features/common/game-save/game-saves-debugging.md)
