Course contentsShow
← Unity Game Development
Lesson 758 of 82811. Performance and Data PersistenceFree lesson

Syncing Local Saves with Cloud Storage Services

Learners will integrate platform-specific cloud APIs to synchronize local save data across multiple devices for a seamless user experience.

In this lesson, you will learn how to synchronize your local serialized save data with cloud storage services to ensure a seamless cross-device experience for your players.

The Synchronization Architecture

When moving from local-only storage to cloud integration, your system must move from a "file-first" mentality to a "state-synchronization" mentality. The goal is to treat your local PersistentDataPath as a cache and your cloud storage (such as Steam Cloud, Google Play Games Services, or Apple iCloud) as the "source of truth."

To handle this, you need a synchronization manager that performs a version check before loading any local data. When the game initializes, the cloud API fetches the remote file's timestamp or version hash. If the remote version is newer than the local file, you download the cloud data, write it to your local storage, and then proceed with deserialization.

Implementation Strategy

Always perform these operations asynchronously to prevent freezing the main thread, especially when network latency occurs. Here is a conceptual implementation of how the sync flow is triggered:

public async void SyncSaveData()
{
    // 1. Fetch metadata from cloud provider
    var cloudMetadata = await CloudProvider.GetMetadataAsync();
    
    // 2. Compare with local version
    if (cloudMetadata.Timestamp > localSaveFile.Timestamp)
    {
        // 3. Download and replace local file
        byte[] remoteData = await CloudProvider.DownloadSaveAsync();
        File.WriteAllBytes(localPath, remoteData);
    }
    
    // 4. Proceed with standard local loading logic
    LoadGameFromDisk();
}

Handling Conflicts

A crucial aspect of this integration is conflict resolution. If a user plays offline on Device A and then online on Device B, you may encounter conflicting saves. The most robust approach is to compare the Version or LastModified timestamps embedded within your JSON/Binary save structures. If the data is truly conflicting (e.g., both files were modified recently), it is standard practice to present the player with a prompt to select which "Save State" they wish to keep, rather than overwriting data silently and risking progress loss.

Key Takeaway: Treat your cloud service as the primary authority and use timestamp comparison between local and remote files to trigger asynchronous updates, ensuring the player’s progress is consistently available across all devices.