ライフサイクルと保存
穏やかな体験は、適切に動作する体験でもあります。すぐに始まり、見られていないときは休み、保存データを失わず、二重に書き込みません。
ハンドシェイク
- プラットフォームはハッシュに
#zc_parent=…&zc_instance=…を付けてエントリーを読み込みます。 connect()は応答があるまで、IDとバージョンを含むzc.readyを250ミリ秒ごとに送信します。- プラットフォームは承認内容とID、バージョン、プロトコルを照合し、コンテキストと専用ポートを含む
zc.connectedで応答するか、接続を拒否します。 - 以後、すべての呼び出しはそのポートを通ります。ページを再読み込みするとセッションは終了し、訪問者はプラットフォームから再開します。
15秒以内に準備を整える
まずloading.start()を呼び、訪問者が始められる状態になったらすぐにloading.ready()を呼びます。大きなアセットはその後に読み込みます。15秒以内に準備できない場合、プラットフォームは問題が起きていることを訪問者に知らせます。開始できない場合はloading.fail(message)を呼びます。
ライフサイクルの指示
| 指示 | 操作 |
|---|---|
pause | サウンド、アニメーション、入力を停止します。pausedを報告します。 |
resume | 訪問者が中断したところから続けます。runningを報告します。 |
visibility | 接続後に一度、その後は変更のたびに送信されます。visibleがfalseの場合は、一時停止中と同じように休止します。 |
dispose | タイマーを停止し、SDKに保存データをフラッシュさせます。応答後すぐ、遅くとも1秒後にフレームが削除されます。 |
時間を数えず、セッションを報告する
状態が変わるたびにsession.report({state, mode})を呼び、実行中は数秒ごとに繰り返します。プラットフォームはサーバー上で報告を基に時間を計測します。pausedを受信したとき、または12秒間何も受信しなかったときに計測を停止します。
リビジョンで保存を保護する
保存データにはリビジョンがあり、書き込むたびに1ずつ増えます。最後に確認したリビジョンを渡してください。別のタブや端末などで先に書き込まれていた場合、進行状況を上書きせずCONFLICTで失敗します。
同じリクエストIDで再試行する
TIMEOUTやINTERNALエラーは、書き込みに失敗したという意味ではなく、結果が不明という意味です。同じデータを同じrequestIdで再送してください。サーバーは二重に書き込まず、最初の結果を返します。別のデータでIDを再利用するとIDEMPOTENCY_CONFLICTで失敗します。
自動保存の間隔を適切に保つ
storage.createAutosave(save)は間隔ごとに最大1回、関数を呼び出します。既定は10秒で、10秒から5分まで設定できます。変更のたびにschedule()を呼んでください。一時停止、非表示、破棄時、プレイの終了前、訪問者の退出前にはSDKがすぐにフラッシュします。3回失敗するとonErrorを通じてSAVE_UNCONFIRMEDを報告します。新しい変更も保存する必要がある場合は、関数からfalseを返してください。
チャネルが閉じたとき
onDisconnectは一度だけ発生します。訪問者に見えている状態を保ち、保存を停止し、体験を開き直せば続けられることを穏やかに伝えてください。自動で再接続しないでください。