Class ObscuredPrefs
This is an Obscured analogue of the PlayerPrefs class.
public static class ObscuredPrefs
- Inheritance
-
objectObscuredPrefs
Remarks
Saves data in encrypted state, optionally locking it to the current device.
Automatically encrypts PlayerPrefs on first read (auto migration), has tampering detection and more.
Check out ObscuredFilePrefs if you wish to save big data amounts.
using CodeStage.AntiCheat.Storage;
// Basic usage - works just like PlayerPrefs
ObscuredPrefs.Set<float>("currentLifeBarObscured", 88.4f);
var currentLifeBar = ObscuredPrefs.Get<float>("currentLifeBarObscured");
Debug.Log("Life bar: " + currentLifeBar); // Will print: "Life bar: 88.4"
// Set different types of values
ObscuredPrefs.Set("coins", 100);
ObscuredPrefs.Set("playerName", "John");
ObscuredPrefs.Set("highScore", 1500.5f);
ObscuredPrefs.Set("isUnlocked", true);
ObscuredPrefs.Set("position", new Vector3(1, 2, 3));
// Read values with default fallback
var coins = ObscuredPrefs.Get("coins", 0);
var playerName = ObscuredPrefs.Get("playerName", "Unknown");
var highScore = ObscuredPrefs.Get("highScore", 0f);
// Listen for tampering detection
ObscuredPrefs.NotGenuineDataDetected += OnDataTampered;
ObscuredPrefs.DataFromAnotherDeviceDetected += OnForeignData;
// Check if key exists
if (ObscuredPrefs.HasKey("coins"))
{
var existingCoins = ObscuredPrefs.Get("coins", 0);
}
// Delete specific key
ObscuredPrefs.DeleteKey("oldKey");
// Save changes (usually automatic on app quit)
ObscuredPrefs.Save();
private void OnDataTampered()
{
Debug.LogWarning("Data tampering detected!");
}
private void OnForeignData()
{
Debug.LogWarning("Data from another device detected!");
}
Fields
preservePlayerPrefs
Allows saving original PlayerPrefs values while migrating to ObscuredPrefs.
public static bool preservePlayerPrefs
Field Value
- bool
Remarks
In such case, original value still will be readable after switching from PlayerPrefs to
ObscuredPrefs and it should be removed manually as it became unneeded.
Original PlayerPrefs value will be automatically removed after read by default.
Properties
DeviceLockSettings
Controls DeviceLock feature settings. Read more at DeviceLockSettings docs.
public static DeviceLockSettings DeviceLockSettings { get; }
Property Value
Methods
DeleteAll()
Removes all keys and values from the preferences, including anything saved with regular PlayerPrefs.
public static void DeleteAll()
Remarks
⚠️ Warning: Use with caution! Please use this method to remove all prefs instead of PlayerPrefs.DeleteAll() to properly clear internals and avoid any data loss when saving new obscured prefs after DeleteAll() call.
DeleteCryptoKey()
Removes saved crypto key. Use only when you wish to completely remove all obscured prefs!
public static void DeleteCryptoKey()
Remarks
⚠️ Warning: Any existing obscured prefs will be lost after this action.
DeleteKey(string)
Removes key and its corresponding value from the ObscuredPrefs and regular PlayerPrefs.
public static void DeleteKey(string key)
Parameters
keystring
EncryptKeyWithACTkV1Algorithm(string, string)
Use to encrypt ACTkv1's value key for later use with SetRawValue to let it migrate.
public static string EncryptKeyWithACTkV1Algorithm(string key, string cryptoKey = "e806f6")
Parameters
keystringPrefs key.
cryptoKeystringCrypto key you used with ACTk v1, if any.
Returns
- string
Prefs key, encrypted with old ACTk v1 encryption.
Get(string, ObscuredBigInteger)
public static ObscuredBigInteger Get(string key, ObscuredBigInteger defaultValue = default)
Parameters
keystringdefaultValueObscuredBigInteger
Returns
Get(string, ObscuredBool)
public static ObscuredBool Get(string key, ObscuredBool defaultValue = default)
Parameters
keystringdefaultValueObscuredBool
Returns
Get(string, ObscuredByte)
public static ObscuredByte Get(string key, ObscuredByte defaultValue = default)
Parameters
keystringdefaultValueObscuredByte
Returns
Get(string, ObscuredChar)
public static ObscuredChar Get(string key, ObscuredChar defaultValue = default)
Parameters
keystringdefaultValueObscuredChar
Returns
Get(string, ObscuredDateTime)
public static ObscuredDateTime Get(string key, ObscuredDateTime defaultValue = default)
Parameters
keystringdefaultValueObscuredDateTime
Returns
Get(string, ObscuredDateTimeOffset)
public static ObscuredDateTimeOffset Get(string key, ObscuredDateTimeOffset defaultValue = default)
Parameters
keystringdefaultValueObscuredDateTimeOffset
Returns
Get(string, ObscuredDecimal)
public static ObscuredDecimal Get(string key, ObscuredDecimal defaultValue = default)
Parameters
keystringdefaultValueObscuredDecimal
Returns
Get(string, ObscuredDouble)
public static ObscuredDouble Get(string key, ObscuredDouble defaultValue = default)
Parameters
keystringdefaultValueObscuredDouble
Returns
Get(string, ObscuredFloat)
public static ObscuredFloat Get(string key, ObscuredFloat defaultValue = default)
Parameters
keystringdefaultValueObscuredFloat
Returns
Get(string, ObscuredGuid)
public static ObscuredGuid Get(string key, ObscuredGuid defaultValue = default)
Parameters
keystringdefaultValueObscuredGuid
Returns
Get(string, ObscuredInt)
public static ObscuredInt Get(string key, ObscuredInt defaultValue = default)
Parameters
keystringdefaultValueObscuredInt
Returns
Get(string, ObscuredLong)
public static ObscuredLong Get(string key, ObscuredLong defaultValue = default)
Parameters
keystringdefaultValueObscuredLong
Returns
Get(string, ObscuredQuaternion)
public static ObscuredQuaternion Get(string key, ObscuredQuaternion defaultValue = default)
Parameters
keystringdefaultValueObscuredQuaternion
Returns
Get(string, ObscuredSByte)
public static ObscuredSByte Get(string key, ObscuredSByte defaultValue = default)
Parameters
keystringdefaultValueObscuredSByte
Returns
Get(string, ObscuredShort)
public static ObscuredShort Get(string key, ObscuredShort defaultValue = default)
Parameters
keystringdefaultValueObscuredShort
Returns
Get(string, ObscuredString)
public static ObscuredString Get(string key, ObscuredString defaultValue = null)
Parameters
keystringdefaultValueObscuredString
Returns
Get(string, ObscuredUInt)
public static ObscuredUInt Get(string key, ObscuredUInt defaultValue = default)
Parameters
keystringdefaultValueObscuredUInt
Returns
Get(string, ObscuredULong)
public static ObscuredULong Get(string key, ObscuredULong defaultValue = default)
Parameters
keystringdefaultValueObscuredULong
Returns
Get(string, ObscuredUShort)
public static ObscuredUShort Get(string key, ObscuredUShort defaultValue = default)
Parameters
keystringdefaultValueObscuredUShort
Returns
Get(string, ObscuredVector2)
public static ObscuredVector2 Get(string key, ObscuredVector2 defaultValue = default)
Parameters
keystringdefaultValueObscuredVector2
Returns
Get(string, ObscuredVector2Int)
public static ObscuredVector2Int Get(string key, ObscuredVector2Int defaultValue = default)
Parameters
keystringdefaultValueObscuredVector2Int
Returns
Get(string, ObscuredVector3)
public static ObscuredVector3 Get(string key, ObscuredVector3 defaultValue = default)
Parameters
keystringdefaultValueObscuredVector3
Returns
Get(string, ObscuredVector3Int)
public static ObscuredVector3Int Get(string key, ObscuredVector3Int defaultValue = default)
Parameters
keystringdefaultValueObscuredVector3Int
Returns
GetFloat(string, float)
public static float GetFloat(string key, float defaultValue = 0)
Parameters
keystringdefaultValuefloat
Returns
- float
GetInt(string, int)
public static int GetInt(string key, int defaultValue = 0)
Parameters
keystringdefaultValueint
Returns
- int
GetRawValue(string, out string, out string)
Allows to get the raw encrypted key and value for the specified key.
public static bool GetRawValue(string key, out string encryptedKey, out string encryptedValue)
Parameters
keystringencryptedKeystringencryptedValuestring
Returns
- bool
True if key was found and false otherwise.
GetString(string, string)
public static string GetString(string key, string defaultValue = "")
Parameters
keystringdefaultValuestring
Returns
- string
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
keystringdefaultValueT
Returns
- T
Type Parameters
T
Remarks
⚠️ Warning: Not all types are supported, see StorageDataType for list of supported types.
// Read values with default fallback
var coins = ObscuredPrefs.Get("coins", 0);
var playerName = ObscuredPrefs.Get("playerName", "Unknown");
// Read with explicit type specification
var coinsTyped = ObscuredPrefs.Get<int>("coins");
var playerNameTyped = ObscuredPrefs.Get<string>("playerName");
HasKey(string)
Returns true if key exists in the ObscuredPrefs or in regular PlayerPrefs.
public static bool HasKey(string key)
Parameters
keystring
Returns
- bool
MigrateFromACTkV1(string, string)
Use to migrate ACTk v1.* prefs to the newer format.
public static bool MigrateFromACTkV1(string key, string cryptoKey = "e806f6")
Parameters
keystringPrefs key you wish to migrate.
cryptoKeystringCustom crypto key you used for ObscuredPrefs, if any. Don't use this argument to utilize default key from ACTk v1.
Returns
- bool
True if migration was successful, false otherwise.
Save()
Writes all modified preferences to disk.
public static void Save()
Remarks
By default, Unity writes preferences to disk on Application Quit.
In case when the game crashes or otherwise prematurely exits, you might want to write the preferences at sensible 'checkpoints' in your game.
This function will write to disk potentially causing a small hiccup, therefore it is not recommended to call during actual game play.
Set(string, ObscuredBigInteger)
public static void Set(string key, ObscuredBigInteger value)
Parameters
keystringvalueObscuredBigInteger
Set(string, ObscuredBool)
public static void Set(string key, ObscuredBool value)
Parameters
keystringvalueObscuredBool
Set(string, ObscuredByte)
public static void Set(string key, ObscuredByte value)
Parameters
keystringvalueObscuredByte
Set(string, ObscuredChar)
public static void Set(string key, ObscuredChar value)
Parameters
keystringvalueObscuredChar
Set(string, ObscuredDateTime)
public static void Set(string key, ObscuredDateTime value)
Parameters
keystringvalueObscuredDateTime
Set(string, ObscuredDateTimeOffset)
public static void Set(string key, ObscuredDateTimeOffset value)
Parameters
keystringvalueObscuredDateTimeOffset
Set(string, ObscuredDecimal)
public static void Set(string key, ObscuredDecimal value)
Parameters
keystringvalueObscuredDecimal
Set(string, ObscuredDouble)
public static void Set(string key, ObscuredDouble value)
Parameters
keystringvalueObscuredDouble
Set(string, ObscuredFloat)
public static void Set(string key, ObscuredFloat value)
Parameters
keystringvalueObscuredFloat
Set(string, ObscuredGuid)
public static void Set(string key, ObscuredGuid value)
Parameters
keystringvalueObscuredGuid
Set(string, ObscuredInt)
public static void Set(string key, ObscuredInt value)
Parameters
keystringvalueObscuredInt
Set(string, ObscuredLong)
public static void Set(string key, ObscuredLong value)
Parameters
keystringvalueObscuredLong
Set(string, ObscuredQuaternion)
public static void Set(string key, ObscuredQuaternion value)
Parameters
keystringvalueObscuredQuaternion
Set(string, ObscuredSByte)
public static void Set(string key, ObscuredSByte value)
Parameters
keystringvalueObscuredSByte
Set(string, ObscuredShort)
public static void Set(string key, ObscuredShort value)
Parameters
keystringvalueObscuredShort
Set(string, ObscuredString)
public static void Set(string key, ObscuredString value)
Parameters
keystringvalueObscuredString
Set(string, ObscuredUInt)
public static void Set(string key, ObscuredUInt value)
Parameters
keystringvalueObscuredUInt
Set(string, ObscuredULong)
public static void Set(string key, ObscuredULong value)
Parameters
keystringvalueObscuredULong
Set(string, ObscuredUShort)
public static void Set(string key, ObscuredUShort value)
Parameters
keystringvalueObscuredUShort
Set(string, ObscuredVector2)
public static void Set(string key, ObscuredVector2 value)
Parameters
keystringvalueObscuredVector2
Set(string, ObscuredVector2Int)
public static void Set(string key, ObscuredVector2Int value)
Parameters
keystringvalueObscuredVector2Int
Set(string, ObscuredVector3)
public static void Set(string key, ObscuredVector3 value)
Parameters
keystringvalueObscuredVector3
Set(string, ObscuredVector3Int)
public static void Set(string key, ObscuredVector3Int value)
Parameters
keystringvalueObscuredVector3Int
SetFloat(string, float)
public static void SetFloat(string key, float value)
Parameters
keystringvaluefloat
SetInt(string, int)
public static void SetInt(string key, int value)
Parameters
keystringvalueint
SetRawValue(string, string)
Allows to set the raw encrypted key and value.
public static void SetRawValue(string encryptedKey, string encryptedValue)
Parameters
encryptedKeystringencryptedValuestring
SetString(string, string)
public static void SetString(string key, string value)
Parameters
keystringvaluestring
Set<T>(string, T)
Sets the value of the preference identified by key.
public static void Set<T>(string key, T value)
Parameters
keystringvalueT
Type Parameters
T
Remarks
⚠️ Warning: Not all types are supported, see StorageDataType for list of supported types.
Events
DataFromAnotherDeviceDetected
Allows reacting on detection of possible saves from some other device.
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.
May fire on same device in case cheater manipulates saved data in some special way.
Fires only once.
📝 Note: May be called if same device ID was changed (pretty rare case though).
NotGenuineDataDetected
Allows reacting on saves alteration. May be helpful for banning potential cheaters.
public static event Action NotGenuineDataDetected
Event Type
- Action
Remarks
Fires only once.