All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Fixed bug with after value when retrieving all files for a player.
- Updated the minimum supported Editor version to 2021.3.
- Updated Apple Privacy Manifest
- Updated Apple Privacy Manifest
- Support for sampling in public player data and public custom data queries.
- Added Apple Privacy Manifest
- The existing
CloudSaveService.Instance.Data.Player.DeleteAsync
has been marked as Obsolete, with a new version added that accepts options of typeCloudSave.Models.Data.Player.DeleteOptions
instead ofCloudSave.DeleteOptions
. This enables the addition of new options to support Access Classes (see below in Added).
-
Support for Access Classes when interacting with Player Data, via the addition of optional
options
objects to existing methods in theCloudSaveService.Instance.Data.Player
API. For more information on Access Classes, please refer to the documentation.- Allows players to save data to the Public Access Class in addition to the existing Default, which allows saved data to be visible to other players.
- Allows players to read data from Public and Protected Access Classes in addition to the existing Default, where Protected Player Data can only be set by a server authoritative source (e.g. Cloud Code)
- Allows players to read other players' Public Player Data, by providing their Player ID as part of the new
options
object.
-
Support for Querying in both Public Player Data and Default Custom Data, via the new
QueryAsync
method. For more information on Querying, please refer to the documentation.- Any data for which an index is configured can be queried by specifying filters on the indexed data (e.g. clanMemberCount < 20)
- Any data stored for the returned entities (whether indexed or not) can be retrieved as part of the query response by specifying
ReturnKeys
in theQuery
object.
- All existing methods have been marked as obsolete. They have mostly been replicated in new namespaces with some additional changes:
- Methods in the namespace
CloudSaveService.Instance.Files
have been replicated in the namespaceCloudSaveService.Instance.Files.Player
without additional changes. - Methods in the namespace
CloudSaveService.Instance.Data
have been replicated in the namespaceCloudSaveService.Instance.Data.Player
with some additional changes:RetrieveAllKeysAsync
has been renamed toListAllKeysAsync
and now returns aTask<List<ItemKey>>
whereItemKey
includes additional metadata alongside the key: The write lock value, and modified date-time.LoadAsync
andLoadAllAsync
now return aTask<Dictionary<string, Item>>
, whereItem
includes additional metadata alongside the value: The write lock value, modified date-time, and created date-time.ForceSaveAsync
has been removed in favour ofSaveAsync(IDictionary<string, object> data)
, orSaveAsync(IDictionary<string, SaveItem> data)
without specifying the write lock on theSaveItem
.ForceDeleteAsync
has been removed in favour ofDeleteAsync
without specifying the write lock option.
- Methods in the namespace
- Support for reading data from custom IDs stored with Game State for Cloud Save Data. This data is read-only from the SDK and the following methods are available from the namespace
CloudSaveService.Instance.Data.Custom.*
ListAllKeysAsync
will list all keys for a given custom data ID with their metadataLoadAsync
will load the data for the specified keys for a given custom data IDLoadAllAsync
will load all the data for a given custom data ID
- Support for reading and enforcing write locks on player data writes:
- Added
SaveAsync(IDictionary<string, SaveItem> data)
which will fail for the given item if the supplied write lock on theSaveItem
does not match the server state SaveAsync
returns aDictionary<string, string>
with the saved keys and their updated write locks- Added
DeleteAsync
with an optionalDeleteOptions
parameter which will fail if the specified write lock option does not match the server state
- Added
ForceSaveAsync
now supports batching when trying to save more than 20 keys in a single call- Cloud Save Files support, including write lock support for all appropriate methods.
ListAllAsync
lists all files belonging to the signed in player with metadataGetMetadataAsync
returns the metadata for a given fileSaveAsync
will upload a given file to Cloud Save Files storage for the player, supports either a Stream or a byte[]LoadStreamAsync
will download a given file from Cloud Save Files storage for the player, and returns a Stream object containing the file dataLoadBytesAsync
will download a given file from Cloud Save Files storage for the player, and returns a byte[] object containing the file data
- Added missing XmlDoc to public
ICloudSaveDataClient
interface andCloudSaveService
static class.
- The Cloud Save SDK is no longer pre-release!
- Breaking Change: Code in the
Unity.Services.CloudSave.Editor.Settings
namespace has been made internal as it was never meant to be public. - Updated dependencies.
- Added mechanism to halt web traffic when request limits have been exceeded and requests are guaranteed to be rejected by the server.
- The Cloud Save service is now accessed using
CloudSaveService.Instance.Data.<API>
. - When a rate limit error occurs, a specific
CloudSaveRateLimitedException
will now be thrown. The new exception type includes the RetryAfter value (in seconds). - Added the Project Settings tab with link to Cloud Save dashboard.
- All models that weren't documented have been made internal as they were not designed to be used externally.
- Improved documentation (sample scene and annotations).
- Updated dependencies (Core and Authentication).
- Open Beta release
- Updated dependencies (Core and Authentication).
- Methods marked with
Obsolete
annotations have been removed. LoadAsync
has been split into two separate methods:LoadAsyncAll
andLoadAsync(HashSet<string> keys)
.- Both Load-related methods now return
Dictionary<string, string>
, with a JSON serialized value that needs to be deserialized by the user. - Package-specific error types are now:
CloudSaveException
andCloudSaveValidationException
(More properties are now available for debugging the issues). - Removed Moq dependency from the package.
- CloudSaveSample was transformed into the code-example.
- Core SDK has been updated to
v.1.1.0-pre.5
. - Authentication package version is now on version
1.0.0-pre.1
. - Internals were updated to use the latest REST APIs from the Cloud Save Service for the long-term resiliency.
- Interface methods have been renamed to be in sync with the Unity naming convention. All public async functions now include
Async
suffix. Old methods are still available, but withObsolete
annotation. They will be removed as a part of the next release.
- All dependencies are now up to date: ** Core SDK has been updated to v.1.1.0-pre.2 ** Authentication package version is now 0.5.0-preview ** Code-gen API wrapper updated to v.0.2.0
- The latest API changes are now addressed - all interface methods work again (no breaking changes have been introduced).
- There is an issue with the sample scene where links between elements and objects in code are missing.
- Very basic client-based validation is now in place to lower the number of API calls that would result in errors.
- Sample scene has been improved to be more user-friendly.
- All methods are now functioning correctly on iOS.
- No more intermittent "Unknown" exceptions while loading all data from the server.
- Core SDK integration - Cloud Save supports the Core initialisation and authentication flows.
- Exceptions are now more user-friendly - methods will throw consistent exceptions.
- Code-gen API wrapper updated to v0.26.0.
- Removed console errors for conflicting meta files between dependencies.
- Improved pagination.
- Intermittent "Unknown" exceptions coming from codegen while trying to load all data from the server.
- Currently unavailable for iOS - all actions throwing errors.
This is the initial release of the Cloud Save SDK.
- Retrieve all keys from CloudSave for the currently signed in player.
- Load player's key-value pairs (all or specified keys) from CloudSave.
- Save up to 20 key-value pairs at once (max 200 in total) for a player.
- Delete one key-value pair based on provided key.
- Every exception is returned as BasicError (generic error wrapper).
- There is no client-side validation.