Ukládání dat v mobilním vývoji: co to je, metody a jak to funguje

Autor: IT Sectr Publikováno: 2026-03-08 Doba čtení: 9 min

Ukládání dat je jedním z klíčových úkolů mobilní aplikace, ovlivňujícím výkon, bezpečnost a uživatelský zážitek. V tomto článku se budeme zabývat SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore a Keychain, stejně jako formáty serializace (JSON, Protobuf) a knihovnami (Gson, Moshi, kotlinx.serialization). Tento průvodce pomůže začínajícím vývojářům vybrat správné řešení pro ukládání dat. Více informací v oficiálním průvodci Android pro ukládání dat.

Hlavní body

  • Room (Android) a Core Data (iOS) jsou oficiální ORM pro práci s relačními databázemi na každé platformě
  • SharedPreferences (Android) je nahrazováno DataStore — asynchronním a typově bezpečným úložištěm párů klíč-hodnota
  • Pro bezpečné ukládání tokenů se používají Keystore (Android) a Keychain (iOS) s hardwarovou ochranou
  • Firebase Firestore je NoSQL databáze s synchronizací v reálném čase a offline režimem
  • Serializace — převod objektů na JSON/Protobuf pomocí Gson, Moshi, kotlinx.serialization

Lokální databáze: SQLite, Room, Core Data, Realm

Pro ukládání strukturovaných dat s vztahy mezi entitami se používají relační databáze.

SQLite

SQLite je vestavěná relační databáze fungující na jakékoli mobilní platformě. Nevyžaduje samostatný server, data jsou uložena v jednom souboru. SQLite je základem pro Room (Android) a volitelně pro Core Data (iOS). Knihovny: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room je oficiální knihovna Android Architecture Components pro práci s SQLite. Poskytuje ORM vrstvu: Entity (tabulka), DAO (dotazy), Database (vstupní bod). Room kontroluje SQL dotazy v době kompilace, podporuje korutiny a Flow a automaticky migruje schéma.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data je framework Apple pro správu objektového grafu. Není to čistá databáze — je to perzistentní vrstva nad SQLite, XML nebo binárním úložištěm. Core Data spravuje objekty (NSManagedObject), vztahy, verzování schémat, undo/redo a práci s vlákny prostřednictvím NSManagedObjectContext.

Realm

Realm je alternativa k SQLite, navržená jako vysoce výkonná mobilní databáze. Realm je rychlejší než SQLite při čtení i zápisu, podporuje reaktivní oznámení (Live Objects), šifrování za běhu a multiplatformnost (Android, iOS, Flutter, React Native). Nevýhody: větší velikost APK/IPA a vyšší spotřeba paměti.

Úložiště klíč-hodnota a nastavení

Pro ukládání malých objemů dat (nastavení, tokeny, mezipaměť) se používají jednoduchá úložiště párů klíč-hodnota.

SharedPreferences (Android)

SharedPreferences je zastaralé úložiště párů klíč-hodnota v Androidu. Nevýhody: synchronní přístup (blokuje UI při čtení), chybějící typování, riziko ANR při načítání velkého souboru. NENÍ doporučeno pro nové projekty.

DataStore (Jetpack Android)

DataStore je moderní náhrada SharedPreferences od Google. Funguje asynchronně pomocí Kotlin Coroutines a Flow, podporuje Preferences DataStore (klíč-hodnota) a Proto DataStore (typovaná data přes Protobuf). DataStore je bezpečný pro UI vlákno a podporuje transakce.

NSUserDefaults (iOS)

UserDefaults je standardní úložiště pro malá nastavení v iOS. Podporuje primitivní typy, řetězce, data, Data. UserDefaults je synchronní, proto není vhodný pro velké objemy dat. Registrace hodnot pomocí register(defaults:) nastavuje výchozí hodnoty.

Cloudové databáze: Firebase Firestore a Realtime DB

Pro ukládání dat v aplikacích vyžadujících synchronizaci mezi zařízeními se používají cloudové databáze Firebase.

Cloud Firestore

Firebase Firestore je NoSQL dokumentová databáze s předplatnými v reálném čase, automatickým škálováním, výkonnými dotazy a vestavěným offline režimem. Data jsou organizována do kolekcí a dokumentů (struktury podobné JSON). Firestore podporuje transakce a dávkové operace. Ideální pro chaty, kanály a sociální aplikace.

Firebase Realtime Database

Firebase Realtime Database je starší NoSQL databáze Firebase, která ukládá data jako jeden JSON strom. Jednodušší než Firestore, ale méně flexibilní v dotazech a škálování. Doporučeno pro jednoduché aplikace v reálném čase (online stav, jednoduché chaty).

VlastnostCloud FirestoreFirebase Realtime DB
Datový modelKolekce → DokumentyJSON strom
DotazySložité (filtrování, řazení, limity)Jednoduché (podle klíče)
ŠkálováníAutomatickéRuční sharding
Offline režimAno (trvalá mezipaměť)Ano
CenaZa operace čtení/zápisuZa provoz + úložiště

Bezpečné ukládání: Keystore, Keychain a EncryptedSharedPreferences

Ukládání tokenů, hesel a šifrovacích klíčů vyžaduje speciální chráněná úložiště.

Android Keystore

Android Keystore je systémové úložiště pro kryptografické klíče. Klíče jsou uloženy v hardwarovém prostředí (TEE — Trusted Execution Environment), nepřístupném aplikacím a operačnímu systému. Podporuje generování klíčů, šifrování a podepisování. Android 9+ obsahuje StrongBox Keymaster (vyhrazený čip).

iOS Keychain

Keychain Services je bezpečné úložiště iOS pro hesla, klíče a certifikáty. Data jsou šifrována pomocí hardwarového Secure Enclave. Keychain podporuje úrovně přístupnosti: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences je obal kolem SharedPreferences s šifrováním klíčů a hodnot pomocí AES256-GCM a HKDF. Implementováno v knihovně AndroidX Security. Doporučeno pro ukládání tokenů a citlivých nastavení.

Ve společnosti IT Sectr používáme Android Keystore + EncryptedSharedPreferences pro ukládání obnovovacích tokenů a biometrických klíčů. Na iOS používáme Keychain s úrovní kSecAttrAccessibleWhenUnlockedThisDeviceOnly pro maximální bezpečnost.

Ukládání souborů: Internal, External, Cache Directory

Pro ukládání souborů (obrázky, videa, dokumenty) poskytují mobilní platformy několik typů úložišť.

Android Storage

Android rozlišuje Internal Storage (/data/data/balík/ — soukromé úložiště) a External Storage (SD karta nebo emulovaný oddíl). Cache Directory je dočasné úložiště, které může systém vyčistit. Scoped Storage (Android 10+) omezuje přístup k External Storage — aplikace vidí pouze své vlastní soubory nebo soubory přes MediaStore/SAF.

iOS Storage

iOS poskytuje Documents Directory (záloha iCloud, trvalá data), Library/Caches (dočasné soubory, bez zálohy) a Tmp Directory (dočasné, lze vyčistit). Pro práci se souborovým systémem použijte NSFileManager. iOS 11+ podporuje File Provider pro cloudové soubory.

Serializace dat: JSON, Protobuf a knihovny

Serializace převádí objekty do formátu pro přenos nebo ukládání. Deserializace je opačný proces.

Formáty

JSON (JavaScript Object Notation) je nejoblíbenější formát: čitelný, flexibilní, podporovaný všemi platformami. XML je přísnější, používaný v zastaralých systémech. Protobuf (Protocol Buffers) je binární formát od Google: 3-10x kompaktnější než JSON, rychlejší parsování, s přísným schématem. Používá se pro systémy s vysokým zatížením a mikroslužby.

Android knihovny

  • Gson (Google) — jednoduchý, flexibilní, ale pomalý. Automaticky pracuje s Java/Kotlin objekty
  • Moshi (Square) — rychlejší než Gson, lepší podpora Kotlin (non-null vlastnosti, výchozí hodnoty, sealed třídy)
  • kotlinx.serialization — nativní Kotlin serializace od JetBrains, pracuje v době kompilace, podporuje JSON, Protobuf, CBOR

iOS knihovny

JSONSerialization je vestavěné API pro práci s JSON. Codable (Encodable/Decodable) je moderní Swift protokol pro automatickou serializaci do JSON, Property List a dalších formátů.

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

Multiplatformní řešení: Hive, ObjectBox, Drift

Pro Flutter a React Native existují vlastní efektivní knihovny pro ukládání.

Hive (Flutter)

Hive je lehké, rychlé úložiště klíč-hodnota pro Flutter. Nevyžaduje nativní kód (čistý Dart), podporuje typování přes TypeAdapter a pracuje v izolátech. Ideální pro mezipaměť, nastavení a malé objemy dat.

ObjectBox

ObjectBox je vysoce výkonná vestavěná databáze pro Flutter, Android a iOS. Je 10+ krát rychlejší než SQLite, používá plochou strukturu souborů pro minimální režii. Podporuje vztahy, dotazy a reaktivní předplatná (ObjectBox Dart).

Drift (dříve Moor)

Drift je reaktivní knihovna SQLite pro Flutter a Dart. Poskytuje typově bezpečné dotazy, migrace, funkce DAO a podporu Stream (reaktivní aktualizace). Drift je hlavní volbou pro Flutter projekty vyžadující SQLite.

Často kladené otázky

Co je lepší pro lokální ukládání dat: Room nebo Core Data?

Volba závisí na platformě: Room (Android) je oficiální knihovna založená na SQLite s kontrolou dotazů v době kompilace. Core Data (iOS) je framework Apple s objektovým grafem. Pro multiplatformní projekty je vhodný Realm nebo SQLite přes ORM.

Jaký je rozdíl mezi SharedPreferences a DataStore?

SharedPreferences je stará implementace se synchronním přístupem a rizikem ANR. DataStore (Jetpack) je moderní náhrada založená na Kotlin Coroutines a Flow, podporující asynchronnost, typování a ochranu proti chybám.

Jak bezpečně ukládat tokeny a hesla v mobilní aplikaci?

Android: EncryptedSharedPreferences nebo Android Keystore. iOS: Keychain Services s přístupností WhenUnlockedThisDeviceOnly. Pro kritická data použijte Secure Enclave (iOS) a hardwarový Keystore (Android) s biometrií.

Co je Firebase Firestore a kdy by se měl používat?

Cloud Firestore je NoSQL databáze od Firebase s synchronizací v reálném čase, offline režimem a automatickým škálováním. Vhodná pro chaty, zpravodajské kanály a projekty vyžadující synchronizaci mezi zařízeními.

Jaké ORM existují pro Flutter a React Native?

Flutter: Hive (rychlý klíč-hodnota), Floor (SQLite ORM), Drift (Moor, reaktivní SQLite), ObjectBox (výkonná vestavěná DB). React Native: Realm, WatermelonDB (líné načítání) a AsyncStorage (obdoba SharedPreferences).

Shrnutí

  • Room (Android) a Core Data (iOS) jsou oficiální řešení pro relační databáze na každé platformě
  • DataStore nahrazuje SharedPreferences pro asynchronní ukládání nastavení
  • Keystore / Keychain jsou povinné pro bezpečné ukládání tokenů a klíčů
  • Firebase Firestore je nejlepší volbou pro synchronizaci v reálném čase mezi zařízeními
  • Kotlinx.serialization (Android) a Codable (iOS) jsou moderní přístupy k serializaci
  • Pro Flutter: Drift (SQLite), Hive (klíč-hodnota), ObjectBox (vysoký výkon)
  • Realm je multiplatformní alternativa k SQLite s reaktivními oznámeními

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt