Stockage de données dans le développement mobile : ce que c'est, les méthodes et comment ça fonctionne

Auteur : IT Sectr Publié le : 2026-03-08 Temps de lecture : 9 min

Le stockage de données est l'une des tâches clés d'une application mobile, affectant les performances, la sécurité et l'expérience utilisateur. Dans cet article, nous aborderons SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore et Keychain, ainsi que les formats de sérialisation (JSON, Protobuf) et les bibliothèques (Gson, Moshi, kotlinx.serialization). Ce guide aidera les développeurs débutants à choisir la bonne solution de stockage de données. Pour en savoir plus, consultez le guide officiel Android sur le stockage de données.

Points clés

  • Room (Android) et Core Data (iOS) sont les ORM officiels pour travailler avec des bases de données relationnelles sur chaque plateforme
  • SharedPreferences (Android) est remplacé par DataStore — un stockage asynchrone et type-safe de paires clé-valeur
  • Pour le stockage sécurisé des tokens, utilisez Keystore (Android) et Keychain (iOS) avec protection matérielle
  • Firebase Firestore est une base de données NoSQL avec synchronisation en temps réel et mode hors ligne
  • Sérialisation — conversion d'objets en JSON/Protobuf via Gson, Moshi, kotlinx.serialization

Bases de données locales : SQLite, Room, Core Data, Realm

Pour stocker des données structurées avec des relations entre entités, on utilise des bases de données relationnelles.

SQLite

SQLite est une base de données relationnelle embarquée qui fonctionne sur toutes les plateformes mobiles. Elle ne nécessite pas de serveur séparé et les données sont stockées dans un seul fichier. SQLite est la base de Room (Android) et optionnellement de Core Data (iOS). Bibliothèques : android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room est la bibliothèque officielle d'Android Architecture Components pour travailler avec SQLite. Elle fournit une couche ORM : Entity (table), DAO (requêtes), Database (point d'entrée). Room vérifie les requêtes SQL à la compilation, prend en charge les coroutines et Flow, et migre automatiquement le 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 est le framework d'Apple pour gérer un graphe d'objets. Ce n'est pas une base de données pure — c'est une couche de persistance au-dessus de SQLite, XML ou de stockage binaire. Core Data gère les objets (NSManagedObject), les relations, le versionnement de schéma, l'annulation/répétition et le multithreading via NSManagedObjectContext.

Realm

Realm est une alternative à SQLite, conçue comme une base de données mobile haute performance. Realm est plus rapide que SQLite en lecture et écriture, prend en charge les notifications réactives (Live Objects), le chiffrement à la volée et le multiplateforme (Android, iOS, Flutter, React Native). Inconvénients : taille APK/IPA augmentée et consommation mémoire plus élevée.

Stockage clé-valeur et paramètres

Pour stocker de petites quantités de données (paramètres, tokens, cache), on utilise des magasins simples de paires clé-valeur.

SharedPreferences (Android)

SharedPreferences est un magasin legacy de paires clé-valeur sous Android. Inconvénients : accès synchrone (bloque l'interface lors de la lecture), absence de typage, risque d'ANR lors du chargement de fichiers volumineux. NON recommandé pour les nouveaux projets.

DataStore (Jetpack Android)

DataStore est le remplacement moderne de SharedPreferences par Google. Il fonctionne de manière asynchrone via Kotlin Coroutines et Flow, prend en charge Preferences DataStore (clé-valeur) et Proto DataStore (données typées via Protobuf). DataStore est sûr pour le thread UI et prend en charge les transactions.

NSUserDefaults (iOS)

UserDefaults est le stockage standard pour les petits réglages sous iOS. Il prend en charge les types primitifs, les chaînes, les dates, Data. UserDefaults est synchrone, donc inadapté aux grands volumes de données. L'enregistrement de valeurs via register(defaults:) définit les valeurs par défaut.

Bases de données cloud : Firebase Firestore et Realtime DB

Pour le stockage de données dans les applications nécessitant une synchronisation entre appareils, les bases de données cloud Firebase sont utilisées.

Cloud Firestore

Firebase Firestore est une base de données documentaire NoSQL avec abonnements en temps réel, mise à l'échelle automatique, requêtes puissantes et mode hors ligne intégré. Les données sont organisées en collections et documents (structures similaires à JSON). Firestore prend en charge les transactions et les opérations par lots. Idéal pour les chats, flux et applications sociales.

Firebase Realtime Database

Firebase Realtime Database est une base de données NoSQL plus ancienne de Firebase qui stocke les données sous forme d'un seul arbre JSON. Plus simple que Firestore mais moins flexible en requêtes et mise à l'échelle. Recommandée pour les applications temps réel simples (statut en ligne, chats simples).

Caractéristique Cloud Firestore Firebase Realtime DB
Modèle de donnéesCollections → DocumentsArbre JSON
RequêtesComplexes (filtrage, tri, limites)Simples (par clé)
Mise à l'échelleAutomatiquePartitionnement manuel
Mode hors ligneOui (cache persistant)Oui
TarificationPar opérations de lecture/écriturePar trafic + stockage

Stockage sécurisé : Keystore, Keychain et EncryptedSharedPreferences

Le stockage de tokens, mots de passe et clés de chiffrement nécessite des stockages protégés spéciaux.

Android Keystore

Android Keystore est un stockage système pour les clés cryptographiques. Les clés sont stockées dans un environnement matériel (TEE — Trusted Execution Environment), inaccessible aux applications et à l'OS. Il prend en charge la génération de clés, le chiffrement et la signature. Android 9+ inclut StrongBox Keymaster (puce dédiée).

iOS Keychain

Keychain Services est un stockage sécurisé iOS pour mots de passe, clés et certificats. Les données sont chiffrées à l'aide du Secure Enclave matériel. Keychain prend en charge les niveaux d'accessibilité : Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences est un wrapper autour de SharedPreferences avec chiffrement des clés et valeurs via AES256-GCM et HKDF. Implémenté dans la bibliothèque AndroidX Security. Recommandé pour stocker les tokens et les paramètres sensibles.

Chez IT Sectr, nous utilisons Android Keystore + EncryptedSharedPreferences pour stocker les tokens d'actualisation et les clés biométriques. Sous iOS, nous utilisons Keychain avec le niveau kSecAttrAccessibleWhenUnlockedThisDeviceOnly pour une sécurité maximale.

Stockage de fichiers : Internal, External, Cache Directory

Pour le stockage de fichiers (images, vidéos, documents), les plateformes mobiles proposent plusieurs types de stockage.

Android Storage

Android distingue le Internal Storage (/data/data/package/ — stockage privé) et l'External Storage (carte SD ou partition émulée). Cache Directory est un stockage temporaire que le système peut vider. Scoped Storage (Android 10+) restreint l'accès à l'External Storage — les applications ne voient que leurs propres fichiers ou les fichiers via MediaStore/SAF.

iOS Storage

iOS fournit le Documents Directory (sauvegarde iCloud, données persistantes), Library/Caches (fichiers temporaires, non sauvegardés) et Tmp Directory (temporaires, peuvent être vidés). Utilisez NSFileManager pour travailler avec le système de fichiers. iOS 11+ prend en charge File Provider pour les fichiers cloud.

Sérialisation des données : JSON, Protobuf et bibliothèques

La sérialisation convertit les objets en un format pour la transmission ou le stockage. La désérialisation est le processus inverse.

Formats

JSON (JavaScript Object Notation) est le format le plus populaire : lisible, flexible, supporté par toutes les plateformes. XML est plus strict, utilisé dans les systèmes legacy. Protobuf (Protocol Buffers) est un format binaire de Google : 3 à 10 fois plus compact que JSON, analyse plus rapide, avec un schéma strict. Utilisé pour les systèmes à forte charge et les microservices.

Bibliothèques Android

  • Gson (Google) — simple, flexible, mais lent. Fonctionne automatiquement avec les objets Java/Kotlin
  • Moshi (Square) — plus rapide que Gson, meilleur support Kotlin (propriétés non nulles, valeurs par défaut, classes sealed)
  • kotlinx.serialization — sérialisation Kotlin native de JetBrains, fonctionne à la compilation, supporte JSON, Protobuf, CBOR

Bibliothèques iOS

JSONSerialization est l'API intégrée pour travailler avec JSON. Codable (Encodable/Decodable) est un protocole Swift moderne pour la sérialisation automatique en JSON, Property List et autres formats.

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)

Solutions multiplateformes : Hive, ObjectBox, Drift

Pour Flutter et React Native, il existe des bibliothèques de stockage efficaces dédiées.

Hive (Flutter)

Hive est un magasin clé-valeur léger et rapide pour Flutter. Il ne nécessite pas de code natif (Dart pur), prend en charge le typage via TypeAdapter et fonctionne dans des isolates. Idéal pour le cache, les paramètres et les petits volumes de données.

ObjectBox

ObjectBox est une base de données embarquée haute performance pour Flutter, Android et iOS. Elle est 10 fois plus rapide que SQLite et utilise une structure de fichier plat pour une surcharge minimale. Prend en charge les relations, les requêtes et les abonnements réactifs (ObjectBox Dart).

Drift (anciennement Moor)

Drift est une bibliothèque SQLite réactive pour Flutter et Dart. Elle fournit des requêtes type-safe, des migrations, des fonctions DAO et un support Stream (mises à jour réactives). Drift est le choix principal pour les projets Flutter nécessitant SQLite.

Foire aux questions

Quel est le meilleur pour le stockage local : Room ou Core Data ?

Le choix dépend de la plateforme : Room (Android) est la bibliothèque officielle basée sur SQLite avec vérification des requêtes à la compilation. Core Data (iOS) est le framework d'Apple avec un graphe d'objets. Pour les projets multiplateformes, Realm ou SQLite via ORM conviennent.

Quelle est la différence entre SharedPreferences et DataStore ?

SharedPreferences est une ancienne implémentation avec accès synchrone et risque d'ANR. DataStore (Jetpack) est un remplacement moderne basé sur Kotlin Coroutines et Flow, supportant l'asynchronisme, le typage et la protection contre les erreurs.

Comment stocker en toute sécurité les tokens et mots de passe dans une application mobile ?

Android : EncryptedSharedPreferences ou Android Keystore. iOS : Keychain Services avec accessibilité WhenUnlockedThisDeviceOnly. Pour les données critiques, utilisez Secure Enclave (iOS) et Keystore matériel (Android) avec biométrie.

Qu'est-ce que Firebase Firestore et quand l'utiliser ?

Cloud Firestore est une base de données NoSQL de Firebase avec synchronisation en temps réel, mode hors ligne et mise à l'échelle automatique. Adapté aux chats, flux d'actualités et projets nécessitant une synchronisation entre appareils.

Quels ORM existent pour Flutter et React Native ?

Flutter : Hive (clé-valeur rapide), Floor (ORM SQLite), Drift (Moor, SQLite réactif), ObjectBox (BD embarquée haute performance). React Native : Realm, WatermelonDB (chargement paresseux) et AsyncStorage (analogue à SharedPreferences).

Résumé

  • Room (Android) et Core Data (iOS) sont les solutions officielles pour les bases de données relationnelles sur chaque plateforme
  • DataStore remplace SharedPreferences pour le stockage asynchrone des paramètres
  • Keystore / Keychain sont obligatoires pour le stockage sécurisé des tokens et clés
  • Firebase Firestore est le meilleur choix pour la synchronisation en temps réel entre appareils
  • Kotlinx.serialization (Android) et Codable (iOS) sont des approches modernes de sérialisation
  • Pour Flutter : Drift (SQLite), Hive (clé-valeur), ObjectBox (haute performance)
  • Realm est une alternative multiplateforme à SQLite avec notifications réactives

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet