生命週期與儲存
平靜的體驗也需要妥善運作:快速啟動、無人觀看時休息、不遺失儲存資料,也不重複寫入。
交握程序
- 平台載入你的入口頁面,並在網址片段中加入
#zc_parent=…&zc_instance=…。 connect()每隔 250 毫秒傳送一次含有識別碼與版本的zc.ready,直到收到回應。- 平台會依據核准資料檢查你的識別碼、版本與通訊協定,並以環境資訊和專用連接埠回覆
zc.connected,否則便拒絕連線。 - 之後每次呼叫都會經由該連接埠傳送。若頁面重新載入,工作階段便會結束,訪客會從平台重新開始。
在 15 秒內就緒
先呼叫 loading.start(),訪客可以開始時立即呼叫 loading.ready()。之後再載入大型資源。若 15 秒後仍未就緒,平台會告知訪客發生問題。若無法啟動,請呼叫 loading.fail(message)。
生命週期命令
| 命令 | 應執行的動作 |
|---|---|
pause | 停止音效、動畫與輸入,並回報 paused。 |
resume | 從訪客離開的位置繼續,並回報 running。 |
visibility | 連線後傳送一次,之後每逢狀態變更都會傳送。當 visible 為 false 時,請像暫停一樣休息。 |
dispose | 停止計時器,並讓 SDK 完成待寫入的儲存資料。你一回覆就會移除框架,最久不超過一秒。 |
回報工作階段,不要自行計時
每當狀態改變時呼叫 session.report({state, mode}),執行期間每隔幾秒再回報一次。平台會在伺服器端依據這些回報計算時間。收到 paused 或連續 12 秒沒有收到回報時,就會停止計時。
修訂版本保障每次儲存
每次儲存都有修訂版本,每寫入一次就遞增一。請傳入你最近讀取的版本。若期間有其他分頁或裝置寫入,這次寫入會以 CONFLICT 失敗,不會覆寫對方的進度。
使用相同的要求識別碼重試
TIMEOUT 或 INTERNAL 錯誤不代表寫入失敗,只表示結果未知。請以相同的 requestId 再傳送相同資料。伺服器會回傳第一次的結果,避免重複寫入。若以相同識別碼搭配不同資料,會發生 IDEMPOTENCY_CONFLICT。
讓自動儲存掌握節奏
storage.createAutosave(save) 每個間隔最多呼叫你的函式一次:預設為 10 秒,可設為 10 秒至 5 分鐘。每當內容變更時呼叫 schedule()。暫停、隱藏或卸載時,以及完成遊玩或訪客離開前,SDK 都會立即寫入待儲存資料。連續三次失敗後,會透過 onError 回報 SAVE_UNCONFIRMED。若仍有較新的變更待儲存,請讓函式回傳 false。
通道關閉時
onDisconnect 只會觸發一次。保留訪客目前看到的內容,停止儲存,並溫和告知訪客可以重新開啟體驗以繼續使用。切勿自行嘗試重新連線。