The online save API provides user data storage for applications. It is useful for storing game states and other small data sets that a user may want to reuse later on a different device. There are API calls for submitting, retrieving, and removing data. This service is not good for large data sets.

Important Notes

  • Minimize the data that should be saved. Consider ways to compress data.
  • It’s better to have 1 bigger save rather than 5 smaller ones. Try to condense calls into a single one.
  • Avoid auto-saving using a timer. If you have no other choice, do it no more than once a minute.
  • Don’t exceed 30Kb. Larger saves may be rejected.
  • Know that saving too frequently may fail.

Retrieve

ID.api('user_data/retrieve', 'POST', {key: 'test'}, function(response){
    try {
        console.log(res.jsondata);
        var data = JSON.parse(res.jsondata);
    } catch(e) {
        console.log(e);
    }
});

Remove

ID.api('user_data/remove', 'POST', {key: 'test'}, function(response){
    console.log(response);
});

Submit

var data = { money: 10, weapon: 'bazooka' };
ID.api('user_data/submit', 'POST', {key: 'test', value: JSON.stringify(data)}, function(response){
    console.log(response);
});

Buffered Submit

If you want to save frequently, such as when a player changes a setting, the code must buffer and retry failed submits. Submitting data could fail, if things are saved too freqently.

var data = { money: 10, weapon: 'bazooka' };
var saveDelay;

function save() {
    var dataString = JSON.stringify(data);
    clearTimeout(saveDelay);

    saveDelay = setTimeout(function() {
        ID.api('user_data/submit', 'POST', {key: 'save', value: dataString}, function(response){
            console.log(response)
            if (response && response.status == 'not_saved') {
                console.log('Save failed, retrying in 5 secs');
                setTimeout(function() {
                    save();
                }, 5000);
            } else if (response && response.status == 'ok') {
                // save complete
            }
        });
    }, 3000);
}