Intégrer le NFC dans son app : guide dev 2026 (iOS, Android, RN, Flutter)

Guide dev 2026 pour intégrer la lecture NFC ICAO (BAC + PACE) dans une app iOS / Android / React Native / Flutter. App Clip, APK dédié, SDK Datakeen.
Gaël
May 25, 2026
Intégrer le NFC dans son app : guide dev 2026 (iOS, Android, RN, Flutter)

En bref — Pour lire la puce NFC d'une CNIe française (PACE) ou d'un passeport biométrique (BAC + PACE) dans une app, vous avez trois options : (1) SDK natif Android (Kotlin) ou iOS (Swift) — le plus performant ; (2) SDK cross-platform React Native ou Flutter — un seul code, performance proche du natif ; (3) App Clip iOS + APK Android dédié — distribution sans installation lourde côté utilisateur. Les pré-requis matériels : iOS 16+ avec puce A11 minimum, Android 8 (API 26)+ avec NFC. La fonction lit la MRZ (caméra) ou demande le CAN (saisie), puis exécute les contrôles ICAO (PA + AA + BAC/PACE) en quelques secondes. Architecture privacy-by-design : les données restent sur le device.

Options d'intégration en un coup d'œil

Option Code Performance Distribution Quand l'utiliser
SDK natif Android (Kotlin) Une app Kotlin / Java Optimale Maven privé App Android existante, exigences perf max
SDK natif iOS (Swift) Une app Swift Optimale SwiftPM / CocoaPods privés App iOS existante, exigences perf max
SDK React Native Un code RN partagé iOS + Android Quasi-natif npm privé @datakeen/ App RN existante, vélocité dev
SDK Flutter Un code Flutter partagé iOS + Android Quasi-natif Git source dependency privée App Flutter existante, vélocité dev
iOS App Clip Carte iOS légère lancée par QR / NFC tap / lien Optimale App Store Connect Distribution sans installation, taux complétion
APK Android dédié APK NFC autonome Optimale Distribution directe ou Play Store Distribution sans app complète

Pré-requis matériel et OS

Plateforme Min OS Min puce / device
iOS natif iOS 16 iPhone 7+ (puce A10) ; NFC complet à partir d'iPhone XS / A12
iOS App Clip iOS 14+ pour App Clip, iOS 16 pour notre runtime iPhone XS+ recommandé
Android natif (Kotlin) Android 8 (API 26) Téléphone avec NFC activé
React Native RN 0.74+ Couvre iOS 16+ / Android 8+
Flutter Flutter 3.22+ Couvre iOS 16+ / Android 8+

Sur iOS, la lecture NFC d'une eMRTD requiert l'entitlement com.apple.developer.nfc.readersession.iso7816.select-identifiers — à demander à Apple dans votre Capabilities Bundle.

Architecture privacy-by-design

L'architecture Datakeen NFC SDK est on-device : les données d'identité (Data Groups DG1 MRZ, DG2 photo haute résolution, DG11/DG12 additionnels) ne quittent pas le téléphone du client. Seul un événement de comptage anonyme remonte au backend Datakeen pour le métering.

Conséquences pour votre code :

  • Vous appelez le SDK, il vous retourne les attributs lus dans votre app.
  • Vous décidez quoi transmettre à votre backend (toute la pile, certains champs, juste un hash).
  • Aucune obligation contractuelle de partage des données avec Datakeen.
  • Conformité RGPD article 25 (privacy by design) native.

Les deux flows de lecture NFC

Flow 1 — NfcWithMrzFlow : l'utilisateur scanne la MRZ de sa pièce avec la caméra (zone OCR-B en bas de la pièce), le SDK décode automatiquement le numéro de pièce + DOB + date d'expiration, puis ouvre la session BAC/PACE et lit la puce.

// Android Kotlin
val flow = NfcWithMrzFlow(activity)
flow.start { result ->
    when (result) {
        is NfcResult.Success -> {
            val mrz = result.dataGroups.dg1.mrz
            val photo = result.dataGroups.dg2.photo
            // ...
        }
        is NfcResult.Failure -> handleError(result.code)
    }
}

Flow 2 — NfcOnlyFlow : votre app fournit déjà l'access key (CAN, ou MRZ) — par exemple si vous avez collecté les attributs en amont via formulaire. Le SDK ouvre directement la session PACE/BAC.

// iOS Swift
let flow = NfcOnlyFlow(accessKey: .can("123456"))
flow.start { result in
    switch result {
    case .success(let dataGroups):
        let mrz = dataGroups.dg1.mrz
        let photo = dataGroups.dg2.photo
        // ...
    case .failure(let error):
        handleError(error)
    }
}

Contrat d'erreur partagé entre plateformes

Les codes d'erreur des SDK Datakeen sont identiques byte-pour-byte entre Android, iOS, React Native et Flutter :

Code Signification Action recommandée
NfcUnavailable Le device n'a pas de NFC Fallback OCR + visual checks
NfcDisabled NFC désactivé par l'utilisateur Proposer d'ouvrir les paramètres
MrzReadFailed Caméra n'a pas pu lire la MRZ Reprendre la photo, vérifier lumière
InvalidAccessKey CAN ou MRZ invalide Demander à l'utilisateur de revérifier
ChipReadFailed Lecture puce échouée Replacer la puce contre le téléphone
SodInvalid Signature SOD invalide Pièce probablement falsifiée — bloquer
AuthenticationFailed Active Authentication échouée Possible puce clonée — bloquer
QuotaExceeded Limite de scans atteinte Contacter Datakeen pour upgrade
LicenseInvalid Licence SDK invalide Vérifier le token de licence
MeteringNetworkUnreachable Pas de réseau pour le métering Mode lenient 24h ; retenter
Timeout Délai dépassé Permettre une retry
Unknown Erreur inattendue Logger pour analyse

Votre code de gestion d'erreur s'écrit une seule fois et tourne sur toutes les plateformes.

App Clip iOS : pourquoi et comment

L'App Clip est une carte iOS légère (sous-app) qui s'exécute sans installer l'app complète. Trois déclencheurs :

  • QR code scanné par l'appareil photo.
  • NFC tag (Apple-signed) tapé.
  • Lien web (App Clip Card universel link).

L'App Clip Datakeen pèse < 15 MB, démarre en moins de 2 secondes, et lit la puce NFC dans la foulée. Cas d'usage idéal : campagne de remédiation bancaire — vous envoyez un SMS avec un lien, le client clique, la carte App Clip s'ouvre, il scanne sa CNIe, vous recevez les attributs.

APK Android dédié

Sur Android, Google n'a pas d'équivalent direct de l'App Clip (Instant Apps est en perte de vitesse). Datakeen fournit un APK dédié NFC d'environ 8 MB :

  • Distribuable via lien direct (sideload) ou via une instance Play Store.
  • Démarre en 2-3 secondes, lit la puce, renvoie les attributs à votre app principale via deep link.
  • Pas d'installation d'une app complète côté utilisateur.

Chronologie typique d'une lecture NFC

[ t=0s   ] L'utilisateur clique "Scanner ma pièce"
[ t=1s   ] La caméra s'ouvre, MRZ détectée (Flow 1)
[ t=2s   ] Le SDK ouvre la session PACE/BAC
[ t=3-6s ] Lecture des Data Groups (DG1 + DG2 + DG11/12)
[ t=7s   ] Active Authentication (challenge/response)
[ t=8s   ] Passive Authentication (vérif signature CSCA)
[ t=8s   ] Métering anonyme envoyé à Datakeen
[ t=8s   ] Attributs retournés à votre app

Cas particulier CNIe française : la première lecture PACE peut prendre >10 secondes sur certains téléphones — c'est une limitation matérielle connue, à anticiper côté UX (animation de loading explicite, pas de "loader infini").

Cas d'usage 1 — App fintech existante en Kotlin

Vous avez une app Android Kotlin déjà en production. Vous voulez ajouter la lecture NFC à votre parcours KYC :

  1. Ajouter le SDK Datakeen NFC Kotlin via Maven privé (token fourni à la signature).
  2. Demander la permission android.permission.NFC dans le manifeste.
  3. Déclencher NfcWithMrzFlow depuis votre activité KYC.
  4. Recevoir les attributs et les transmettre à votre backend selon votre politique data.

Temps d'intégration : 3 à 5 jours-dev pour un POC, 1-2 semaines pour une intégration production.

Cas d'usage 2 — App RN multi-plateformes

Vous avez une app React Native qui doit ajouter NFC sur iOS + Android :

  1. Ajouter @datakeen/nfc via npm privé (token).
  2. Linker les modules natifs (autolinking sur RN 0.74+).
  3. Sur iOS : ajouter l'entitlement NFC + Apple Bundle Capabilities.
  4. Sur Android : permission NFC + min SDK 26.
  5. Utiliser NfcWithMrzFlow côté JS, mêmes codes d'erreur partout.

Temps d'intégration : 5 à 7 jours-dev pour le premier déploiement.

Cas d'usage 3 — Pas d'app, juste un parcours web

Vous n'avez pas d'app mobile. Trois options :

  • Liveness Datakeen dans le navigateur : pas de NFC mais biométrie + OCR + face match.
  • App Clip iOS + APK Android : votre client scanne un QR code, exécute la lecture NFC dans la carte/APK dédié(e), le résultat revient à votre back-end via webhook.
  • Composition via Journey Builder : créer un journey Datakeen avec un nœud NFC, distribuer par lien — pas une seule ligne de code à écrire.

FAQ

Faut-il une app native pour faire de la lecture NFC ? Sur iOS, la lecture NFC d'une eMRTD requiert une app (native ou App Clip) — le web ne peut pas lire la puce. Sur Android, idem (NFC web n'est pas standard pour l'eMRTD). L'App Clip iOS et l'APK Android dédiés évitent l'installation d'une app complète tout en permettant la lecture NFC.

Quel niveau d'OS minimal pour intégrer le NFC ? iOS 16 minimum (entitlement NFC eMRTD) avec iPhone XS+ recommandé. Android 8 (API 26) minimum avec un téléphone équipé d'une puce NFC.

Datakeen lit-il la CNIe française avec PACE ? Oui, nativement, sur les quatre plateformes (Android Kotlin, iOS Swift, React Native, Flutter). PACE est requis pour la CNIe émise depuis août 2021 ; BAC est utilisé pour les passeports plus anciens et la plupart des passeports actuels.

Les codes d'erreur sont-ils identiques entre Android et iOS ? Oui — c'est un choix d'architecture chez Datakeen. Les codes (NfcUnavailable, MrzReadFailed, SodInvalid, etc.) sont byte-pour-byte identiques sur Android, iOS, React Native et Flutter. Votre code de gestion d'erreur partagé s'écrit une fois.

Combien de temps prend l'intégration ? Sur une app existante, 3-7 jours-dev pour un POC, 1-3 semaines pour une intégration production. L'App Clip iOS demande un peu plus de setup côté Apple Developer (Bundle Capabilities, signature, App Store Connect) — comptez 1-2 semaines additionnelles pour cette voie.

Où sont stockées les données lues sur la puce ? Sur le device, dans le contexte de votre app. Datakeen ne reçoit qu'un événement de comptage anonyme. Vous décidez ce que vous transmettez à votre backend (toute la pile, certains champs, juste un hash). C'est l'architecture privacy-by-design native du SDK Datakeen.

Comment obtenir le SDK Datakeen NFC ? Sur demande. Datakeen fournit les SDK Android (Kotlin), iOS (Swift), React Native, Flutter via registres privés (Maven, SwiftPM/CocoaPods, npm @datakeen/, Git). Avec un token de licence par environnement (dev/staging/prod).

Pour aller plus loin

Prêt à en voir plus ?

Une nouvelle façon de gérer la vérification d’identité, plus simple et plus sûre.

Jeune femme bouclée portant une chemise blanche prenant un selfie de contrôle d'identité en ligne.