Overview
Cloud saves store one payload per slot, per player, per game. The payload is JSON text that you serialize yourself, usually withJsonUtility.ToJson. The platform versions each write and
applies it inside a server-side transaction.
Cloud saves need a signed-in player. A guest has no platform session, so a guest’s save and load
calls fail. Keep a guest’s progress locally and save it once the player signs in.
Write a save
Read a save
Success is true, Data is empty and
Version is 0. Success is false only when the read failed.
Serializing state
Unity’sJsonUtility only handles serializable fields on concrete classes — no dictionaries, no
polymorphism. For nested or dynamic state, either flatten it into a serializable class or bring
your own JSON library. Whatever you use, the payload must be valid JSON.
Multiple slots
Slots are independent. Use them to separate state that changes at different rates, so a settings write cannot clobber progress.Concurrency
If another tab or device saved the slot first, the server refuses the write with409 VERSION_CONFLICT. The SDK reads the slot’s new version and writes again, up to three
attempts, so the last write wins.
The SDK has no merge callback. If your game can realistically run in two tabs at once and
last-write-wins is not acceptable, read immediately before writing and merge in your own code.
Rules
- Keep each slot under 500,000 characters. The server measures the JSON after re-serializing it, which can add a little, so leave headroom
- Never store payment details or auth tokens in a save
- Save at natural checkpoints, not every frame — each write is a network round trip
- Keep unsaved state in memory when a write fails, and retry rather than dropping progress
SaveResult and LoadResult reference.