Table of Contents

Class ObscuredFilePrefs

Namespace
CodeStage.AntiCheat.Storage
Assembly
Build.dll

ObscuredPrefs analogue but uses File IO instead of PlayerPrefs as a backend, has more flexibility and can work from a background thread.

public static class ObscuredFilePrefs
Inheritance
object
ObscuredFilePrefs

Remarks

Don't forget to call Save() when you wish to save prefs file. You can call it from background thread. It also will save automatically on non-abnormal application quit (relies on Application.wantsToQuit API).
Please call DeviceIdHolder.ForceLockToDeviceInit before accessing this class from background thread if you are using Device Lock feature without custom DeviceID.

using CodeStage.AntiCheat.Storage;

// Initialize with default settings
ObscuredFilePrefs.Init();

// Listen for cheating detection
ObscuredFilePrefs.NotGenuineDataDetected += OnDataCheat;
ObscuredFilePrefs.DataFromAnotherDeviceDetected += OnLockCheat;

// Write preference
ObscuredFilePrefs.Set("coins", 100);
ObscuredFilePrefs.Set("playerName", "John");
ObscuredFilePrefs.Set("highScore", 1500.5f);

// Read preference
var coins = ObscuredFilePrefs.Get("coins", 0);
var playerName = ObscuredFilePrefs.Get("playerName", "Unknown");
var highScore = ObscuredFilePrefs.Get("highScore", 0f);

// Alternatively, specify data type and omit defaultValue argument
var coinsTyped = ObscuredFilePrefs.Get<int>("coins");

// Get all pref keys to iterate when needed
var keys = ObscuredFilePrefs.GetKeys();
foreach (var key in keys)
{
    Debug.Log($"Key: {key}");
}

// Save changes to disk
ObscuredFilePrefs.Save();

private void OnDataCheat()
{
    Debug.LogWarning("Data tampering detected!");
}

private void OnLockCheat()
{
    Debug.LogWarning("Data from another device detected!");
}

Fields

DefaultFileName

Filename used by default, if other name or path was not specified in constructor.

public const string DefaultFileName = "actkfileprefs"

Field Value

string

Properties

CurrentSettings

Allows checking current settings.

public static IObscuredFileSettings CurrentSettings { get; }

Property Value

IObscuredFileSettings

Remarks

Use Init(bool) to set the initial settings.

FilePath

Returns path to the prefs file. It's always not empty and valid even if prefs was not saved to the physical file yet.

public static string FilePath { get; }

Property Value

string

IsBusy

Returns true if prefs file is busy with long-running process such as loading or saving.

public static bool IsBusy { get; }

Property Value

bool

IsExists

Returns true if prefs file physically exists on disk. File may not exist until Save() is called.

public static bool IsExists { get; }

Property Value

bool

IsInited

Allows checking if Init(bool) was called previously.

public static bool IsInited { get; }

Property Value

bool

IsLoaded

Allows checking if prefs cache was loaded \ initialized. It can be true while IsExists is false if new prefs was not saved yet.

public static bool IsLoaded { get; }

Property Value

bool

IsSaved

Returns true if prefs file has unsaved changes.

public static bool IsSaved { get; }

Property Value

bool

LastFileReadResult

Contains reference to the last underlying ObscuredFile read operation result.

public static ObscuredFileReadResult LastFileReadResult { get; }

Property Value

ObscuredFileReadResult

Remarks

Filled on prefs file read.
May be invalid if no read operations were executed. Check ObscuredFileReadResult.IsValid property to figure this out.

LastFileWriteResult

Contains reference to the last underlying ObscuredFile write operation result.

public static ObscuredFileWriteResult LastFileWriteResult { get; }

Property Value

ObscuredFileWriteResult

Remarks

Filled on prefs file saving.
May be invalid if no write operations were executed yet. Check ObscuredFileWriteResult.IsValid property to figure this out.

Methods

DeleteAll()

⚠️ Warning: Use with caution! Removes all keys and values from the prefs.

public static void DeleteAll()

DeleteKey(string)

Removes key and its corresponding value from the ObscuredFilePrefs.

public static void DeleteKey(string key)

Parameters

key string

Remarks

Calls LoadPrefs() internally.

Get(string, ObscuredBigInteger)

public static ObscuredBigInteger Get(string key, ObscuredBigInteger defaultValue = default)

Parameters

key string
defaultValue ObscuredBigInteger

Returns

ObscuredBigInteger

Get(string, ObscuredBool)

public static ObscuredBool Get(string key, ObscuredBool defaultValue = default)

Parameters

key string
defaultValue ObscuredBool

Returns

ObscuredBool

Get(string, ObscuredByte)

public static ObscuredByte Get(string key, ObscuredByte defaultValue = default)

Parameters

key string
defaultValue ObscuredByte

Returns

ObscuredByte

Get(string, ObscuredChar)

public static ObscuredChar Get(string key, ObscuredChar defaultValue = default)

Parameters

key string
defaultValue ObscuredChar

Returns

ObscuredChar

Get(string, ObscuredDateTime)

public static ObscuredDateTime Get(string key, ObscuredDateTime defaultValue = default)

Parameters

key string
defaultValue ObscuredDateTime

Returns

ObscuredDateTime

Get(string, ObscuredDateTimeOffset)

public static ObscuredDateTimeOffset Get(string key, ObscuredDateTimeOffset defaultValue = default)

Parameters

key string
defaultValue ObscuredDateTimeOffset

Returns

ObscuredDateTimeOffset

Get(string, ObscuredDecimal)

public static ObscuredDecimal Get(string key, ObscuredDecimal defaultValue = default)

Parameters

key string
defaultValue ObscuredDecimal

Returns

ObscuredDecimal

Get(string, ObscuredDouble)

public static ObscuredDouble Get(string key, ObscuredDouble defaultValue = default)

Parameters

key string
defaultValue ObscuredDouble

Returns

ObscuredDouble

Get(string, ObscuredFloat)

public static ObscuredFloat Get(string key, ObscuredFloat defaultValue = default)

Parameters

key string
defaultValue ObscuredFloat

Returns

ObscuredFloat

Get(string, ObscuredGuid)

public static ObscuredGuid Get(string key, ObscuredGuid defaultValue = default)

Parameters

key string
defaultValue ObscuredGuid

Returns

ObscuredGuid

Get(string, ObscuredInt)

public static ObscuredInt Get(string key, ObscuredInt defaultValue = default)

Parameters

key string
defaultValue ObscuredInt

Returns

ObscuredInt

Get(string, ObscuredLong)

public static ObscuredLong Get(string key, ObscuredLong defaultValue = default)

Parameters

key string
defaultValue ObscuredLong

Returns

ObscuredLong

Get(string, ObscuredQuaternion)

public static ObscuredQuaternion Get(string key, ObscuredQuaternion defaultValue = default)

Parameters

key string
defaultValue ObscuredQuaternion

Returns

ObscuredQuaternion

Get(string, ObscuredSByte)

public static ObscuredSByte Get(string key, ObscuredSByte defaultValue = default)

Parameters

key string
defaultValue ObscuredSByte

Returns

ObscuredSByte

Get(string, ObscuredShort)

public static ObscuredShort Get(string key, ObscuredShort defaultValue = default)

Parameters

key string
defaultValue ObscuredShort

Returns

ObscuredShort

Get(string, ObscuredString)

public static ObscuredString Get(string key, ObscuredString defaultValue = null)

Parameters

key string
defaultValue ObscuredString

Returns

ObscuredString

Get(string, ObscuredUInt)

public static ObscuredUInt Get(string key, ObscuredUInt defaultValue = default)

Parameters

key string
defaultValue ObscuredUInt

Returns

ObscuredUInt

Get(string, ObscuredULong)

public static ObscuredULong Get(string key, ObscuredULong defaultValue = default)

Parameters

key string
defaultValue ObscuredULong

Returns

ObscuredULong

Get(string, ObscuredUShort)

public static ObscuredUShort Get(string key, ObscuredUShort defaultValue = default)

Parameters

key string
defaultValue ObscuredUShort

Returns

ObscuredUShort

Get(string, ObscuredVector2)

public static ObscuredVector2 Get(string key, ObscuredVector2 defaultValue = default)

Parameters

key string
defaultValue ObscuredVector2

Returns

ObscuredVector2

Get(string, ObscuredVector2Int)

public static ObscuredVector2Int Get(string key, ObscuredVector2Int defaultValue = default)

Parameters

key string
defaultValue ObscuredVector2Int

Returns

ObscuredVector2Int

Get(string, ObscuredVector3)

public static ObscuredVector3 Get(string key, ObscuredVector3 defaultValue = default)

Parameters

key string
defaultValue ObscuredVector3

Returns

ObscuredVector3

Get(string, ObscuredVector3Int)

public static ObscuredVector3Int Get(string key, ObscuredVector3Int defaultValue = default)

Parameters

key string
defaultValue ObscuredVector3Int

Returns

ObscuredVector3Int

GetKeys()

Returns all existing prefs keys in current ObscuredFilePrefs.

public static ICollection<string> GetKeys()

Returns

ICollection<string>

Remarks

Calls LoadPrefs() internally.

Get<T>(string, T)

Returns the value corresponding to key in the preference file if it exists. If it doesn't exist, it will return defaultValue.

public static T Get<T>(string key, T defaultValue = default)

Parameters

key string
defaultValue T

Returns

T

Type Parameters

T

Remarks

// Read values with default fallback
var coins = ObscuredFilePrefs.Get("coins", 0);
var playerName = ObscuredFilePrefs.Get("playerName", "Unknown");

// Read with explicit type specification
var coinsTyped = ObscuredFilePrefs.Get<int>("coins");
var playerNameTyped = ObscuredFilePrefs.Get<string>("playerName");

HasKey(string)

Returns true if key exists in the ObscuredFilePrefs.

public static bool HasKey(string key)

Parameters

key string

Returns

bool

Remarks

Calls LoadPrefs() internally.

Init(IObscuredFileSettings, bool)

Initializes ObscuredFilePrefs with file name set to DefaultFileName and custom specific settings.

public static void Init(IObscuredFileSettings settings, bool loadPrefs)

Parameters

settings IObscuredFileSettings

Specific custom settings.

loadPrefs bool

Pass true to automatically call LoadPrefs(). This may block calling thread, consider using asynchronously for large files.

Init(bool)

Initializes ObscuredFilePrefs with file name set to DefaultFileName and default ObscuredFileSettings.

public static void Init(bool loadPrefs = false)

Parameters

loadPrefs bool

Pass true to automatically call LoadPrefs(). This may block calling thread, consider using asynchronously for large files.

Init(string, IObscuredFileSettings, bool)

Initializes ObscuredFilePrefs with specified file name or file path and custom specific settings.

public static void Init(string fileNameOrPath, IObscuredFileSettings settings, bool loadPrefs)

Parameters

fileNameOrPath string

File path if using ObscuredFileLocation.Custom, otherwise represents file name to use with set ObscuredFileLocation kind.

settings IObscuredFileSettings

Specific custom settings.

loadPrefs bool

Pass true to automatically call LoadPrefs(). This may block calling thread, consider using asynchronously for large files.

Init(string, bool)

Initializes ObscuredFilePrefs with specified file name and default ObscuredFileSettings.

public static void Init(string fileName, bool loadPrefs)

Parameters

fileName string

Custom file name to place at ObscuredFileLocation.PersistentData.

loadPrefs bool

Pass true to automatically call LoadPrefs(). This may block calling thread, consider using asynchronously for large files.

LoadPrefs()

Loads prefs from existing file if it wasn't loaded before.

public static void LoadPrefs()

Remarks

This function will read from disk potentially causing a hiccup especially when you have lots of data in your prefs, therefore it is not recommended to call it synchronously during actual game play. Instead, call it from separate thread asynchronously or at loading screens and other stall moments of your app.

Save()

Writes all modified prefs to underlying ObscuredFile on disk.

public static bool Save()

Returns

bool

True if save was successful or wasn't needed and false if something went wrong. Check LastFileWriteResult for details if this method returns false.

Remarks

By default, prefs are saved to disk on Application Quit (relies on Application.wantsToQuit API).
In case when the app crashes or otherwise prematurely exits, you might want to write the prefs at sensible 'checkpoints' in your app.
This function will write to disk potentially causing a hiccup especially when you have lots of data in your prefs, therefore it is not recommended to call it synchronously during actual game play. Instead, call it from separate thread asynchronously or at loading screens and other stall moments of your app.

Set(string, ObscuredBigInteger)

public static void Set(string key, ObscuredBigInteger value)

Parameters

key string
value ObscuredBigInteger

Set(string, ObscuredBool)

public static void Set(string key, ObscuredBool value)

Parameters

key string
value ObscuredBool

Set(string, ObscuredByte)

public static void Set(string key, ObscuredByte value)

Parameters

key string
value ObscuredByte

Set(string, ObscuredChar)

public static void Set(string key, ObscuredChar value)

Parameters

key string
value ObscuredChar

Set(string, ObscuredDateTime)

public static void Set(string key, ObscuredDateTime value)

Parameters

key string
value ObscuredDateTime

Set(string, ObscuredDateTimeOffset)

public static void Set(string key, ObscuredDateTimeOffset value)

Parameters

key string
value ObscuredDateTimeOffset

Set(string, ObscuredDecimal)

public static void Set(string key, ObscuredDecimal value)

Parameters

key string
value ObscuredDecimal

Set(string, ObscuredDouble)

public static void Set(string key, ObscuredDouble value)

Parameters

key string
value ObscuredDouble

Set(string, ObscuredFloat)

public static void Set(string key, ObscuredFloat value)

Parameters

key string
value ObscuredFloat

Set(string, ObscuredGuid)

public static void Set(string key, ObscuredGuid value)

Parameters

key string
value ObscuredGuid

Set(string, ObscuredInt)

public static void Set(string key, ObscuredInt value)

Parameters

key string
value ObscuredInt

Set(string, ObscuredLong)

public static void Set(string key, ObscuredLong value)

Parameters

key string
value ObscuredLong

Set(string, ObscuredQuaternion)

public static void Set(string key, ObscuredQuaternion value)

Parameters

key string
value ObscuredQuaternion

Set(string, ObscuredSByte)

public static void Set(string key, ObscuredSByte value)

Parameters

key string
value ObscuredSByte

Set(string, ObscuredShort)

public static void Set(string key, ObscuredShort value)

Parameters

key string
value ObscuredShort

Set(string, ObscuredString)

public static void Set(string key, ObscuredString value)

Parameters

key string
value ObscuredString

Set(string, ObscuredUInt)

public static void Set(string key, ObscuredUInt value)

Parameters

key string
value ObscuredUInt

Set(string, ObscuredULong)

public static void Set(string key, ObscuredULong value)

Parameters

key string
value ObscuredULong

Set(string, ObscuredUShort)

public static void Set(string key, ObscuredUShort value)

Parameters

key string
value ObscuredUShort

Set(string, ObscuredVector2)

public static void Set(string key, ObscuredVector2 value)

Parameters

key string
value ObscuredVector2

Set(string, ObscuredVector2Int)

public static void Set(string key, ObscuredVector2Int value)

Parameters

key string
value ObscuredVector2Int

Set(string, ObscuredVector3)

public static void Set(string key, ObscuredVector3 value)

Parameters

key string
value ObscuredVector3

Set(string, ObscuredVector3Int)

public static void Set(string key, ObscuredVector3Int value)

Parameters

key string
value ObscuredVector3Int

Set<T>(string, T)

Sets the value of the preference identified by key.

public static void Set<T>(string key, T value)

Parameters

key string
value T

Type Parameters

T

UnInit()

Releases internal prefs cache, unsubscribes events and frees other used resources.

public static void UnInit()

Remarks

Please call Init(bool) again if you wish to re-use it.

UnloadPrefs(bool)

Unloads cached prefs from memory. Optionally saves current prefs to the file before unloading.

public static void UnloadPrefs(bool saveBeforeUnloading = true)

Parameters

saveBeforeUnloading bool

Remarks

⚠️ Warning: Unsaved data will be lost!

Events

DataFromAnotherDeviceDetected

Fires when saved data from some other device detected.

public static event Action DataFromAnotherDeviceDetected

Event Type

Action

Remarks

May be helpful to ban potential cheaters, trying to use someone's purchased in-app goods for example.
📝 Note: Will fire if same device ID has changed (pretty rare case though). Read more at DeviceLockLevel.

NotGenuineDataDetected

Fires when saved data tampering detected. Will not fire when data is damaged and not readable.

public static event Action NotGenuineDataDetected

Event Type

Action