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 :
- Ajouter le SDK Datakeen NFC Kotlin via Maven privé (token fourni à la signature).
- Demander la permission
android.permission.NFCdans le manifeste. - Déclencher
NfcWithMrzFlowdepuis votre activité KYC. - 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 :
- Ajouter
@datakeen/nfcvia npm privé (token). - Linker les modules natifs (autolinking sur RN 0.74+).
- Sur iOS : ajouter l'entitlement NFC + Apple Bundle Capabilities.
- Sur Android : permission NFC + min SDK 26.
- Utiliser
NfcWithMrzFlowcô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
- Vérification d'identité en temps réel — la stack complète NFC + biométrie chez Datakeen.
- Liveness detection anti-spoofing — la brique biométrie certifiée.
- Deepfakes et fraude à l'identité — la menace que le NFC neutralise.
- Vérifier un passeport marocain, un passeport algérien, une CNI espagnole — cas d'usage pays.
Continuer la lecture
Prêt à en voir plus ?
Une nouvelle façon de gérer la vérification d’identité, plus simple et plus sûre.





