Налаштування Encrypted SharedPreferences в Android-додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Налаштування Encrypted SharedPreferences в Android-додатку
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Налаштування Encrypted SharedPreferences в Android-додатку

Коли додатку не потрібна біометрія або складна схема ключів, але токени у plaintext SharedPreferences — очевидний ризик, EncryptedSharedPreferences з Jetpack Security закриває 80% кейсів за півдня.

Що саме шифрується

EncryptedSharedPreferences використовує бібліотеку Tink від Google з двоповерховим шифруванням: ключи шифруються AES256-SIV (детерміноване шифрування, дозволяє пошук за ключем), значення — AES256-GCM. Мастер-ключ зберігається в Android Keystore. Результат: XML-файл преференцій містить нечитаємий blob замість <string name="auth_token">eyJhb...</string>.

Ініціалізація

val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .setUserAuthenticationRequired(false)  // true для біометрії
    .build()

val prefs = EncryptedSharedPreferences.create(
    context,
    "secure_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

Після цього API ідентичний звичайному SharedPreferencesputString, getString, edit().apply(). Жодного додаткового коду.

Важливі обмеження

EncryptedSharedPreferences не підтримує getAll() — метод викидає UnsupportedOperationException. Якщо код де-небудь ітерує всі ключі, потрібен рефакторинг перед міграцією.

Файл преференцій не можна копіювати між пристроями — мастер-ключ привязаний до Keystore конкретного пристрою. Важливе обмеження, про яке потрібно попередити при міграції з звичайних SharedPreferences: відновлення з бекапу (Auto Backup) не принесе зашифровані дані.

Jetpack Security версія 1.1.0-alpha (та вище) стабілізувала API після довгого альфа-періоду. Використовуйте не нижче 1.1.0-alpha06 — у раніших версіях є відомий баг з пошкодженням файлу при певних умовах запису.

Коли EncryptedSharedPreferences недостатньо

Якщо дані потрібні в background worker без користувача на екрані, і пристрій може бути перезавантажений, потрібен явний контроль над схемами доступу, тобто прямої роботи з Keystore з правильним setUserAuthenticationRequired(false). EncryptedSharedPreferences використовує BIOMETRIC_STRONG or DEVICE_CREDENTIAL якщо біометрія включена, що може заблокувати фоновий доступ.

Для великих даних (файли, БД) використовуйте EncryptedFile з того ж Jetpack Security, не SharedPreferences.

Часові рамки

Проста заміна SharedPreferences на EncryptedSharedPreferences: 4–8 годин включаючи тестування на декількох API рівнях. Якщо присутня Auto Backup та потрібно правильно налаштувати backup_rules.xml для виключення зашифрованого файлу з бекапу — додайте ще кілька годин.