using System; using System.Threading.Tasks; using UnityEngine; public sealed class BriskPlayerPrefsTokenStore : IBriskTokenStore { private const string KeyPrefix = "BriskSdk.Session."; public Task SaveAsync(BriskStoredSession session) { if (session == null) { ClearStoredKeys(); return Task.CompletedTask; } SetString("access_token", session.AccessToken); SetString("expires_at", session.ExpiresAt.HasValue ? session.ExpiresAt.Value.ToUnixTimeSeconds().ToString() : null); SetString("player_id", session.PlayerId); SetString("project_account_id", session.ProjectAccountId); SetString("login_provider", session.LoginProvider); SetString("login_user_id", session.LoginUserId); PlayerPrefs.Save(); return Task.CompletedTask; } public Task LoadAsync() { var accessToken = GetString("access_token"); if (string.IsNullOrWhiteSpace(accessToken)) { return Task.FromResult(null); } DateTimeOffset? expiresAt = null; var expiresAtText = GetString("expires_at"); if (long.TryParse(expiresAtText, out var unixSeconds)) { expiresAt = DateTimeOffset.FromUnixTimeSeconds(unixSeconds); } var session = new BriskStoredSession { AccessToken = accessToken, ExpiresAt = expiresAt, PlayerId = GetString("player_id"), ProjectAccountId = GetString("project_account_id"), LoginProvider = GetString("login_provider"), LoginUserId = GetString("login_user_id") }; return Task.FromResult(session); } public Task ClearAsync() { ClearStoredKeys(); PlayerPrefs.Save(); return Task.CompletedTask; } private static void ClearStoredKeys() { PlayerPrefs.DeleteKey(KeyPrefix + "access_token"); PlayerPrefs.DeleteKey(KeyPrefix + "expires_at"); PlayerPrefs.DeleteKey(KeyPrefix + "player_id"); PlayerPrefs.DeleteKey(KeyPrefix + "project_account_id"); PlayerPrefs.DeleteKey(KeyPrefix + "login_provider"); PlayerPrefs.DeleteKey(KeyPrefix + "login_user_id"); } private static string GetString(string name) { var key = KeyPrefix + name; return PlayerPrefs.HasKey(key) ? PlayerPrefs.GetString(key) : null; } private static void SetString(string name, string value) { var key = KeyPrefix + name; if (string.IsNullOrEmpty(value)) { PlayerPrefs.DeleteKey(key); return; } PlayerPrefs.SetString(key, value); } }