Aller au contenu
Langue : FR

Comment lire et écrire du NFC depuis votre propre code ?

Par l'API de la plateforme sur laquelle tourne le code : le cadre NFC sur Android, Core NFC sur iPhone, Web NFC dans Chrome pour Android, et PC/SC pour un lecteur branché à un ordinateur. Chacune décide de ce qu'un programme peut envoyer à un tag, du moment où il a le droit d'écouter, et de ce qu'il doit déclarer avant.

Quatre portes d'entrée, quatre jeux de règles

Sur Android, le cadre NFC remet un tag découvert à une activité, qui peut lire et écrire du NDEF, envoyer des commandes brutes au tag, ou répondre à un lecteur par émulation de carte par l'hôte.

Sur iPhone, Core NFC laisse une application lire à l'intérieur d'une session que le système affiche et termine, le modèle que ce site décrit sur la page de la feuille de lecture.

Dans un navigateur, Web NFC lit et écrit du NDEF depuis une page web. Chrome le documente comme disponible sur Android à partir de Chrome 89, et le limite au NDEF volontairement : pas de commande brute, pas d'émulation de carte.

Sur un ordinateur, un lecteur USB s'atteint par PC/SC, la spécification que les ordinateurs emploient pour parler aux lecteurs de cartes à puce, et le programme parle au tag à travers le lecteur plutôt qu'à travers un téléphone.

Elles diffèrent par ce qu'elles peuvent envoyer à un tag, et davantage encore par le moment où elles ont le droit d'écouter. C'est cette seconde différence qu'un portage d'une plateforme à l'autre manque.

Ce que le code doit déclarer

Aucune n'atteint la radio sans s'annoncer. Une application Android demande android.permission.NFC, que la référence des permissions classe comme normale : elle est donc accordée à l'installation, sans invite.

Depuis Android 17, une application qui vise un SDK plus récent doit en outre protéger chaque activité recevant des tags par android.permission.DISPATCH_NFC_MESSAGE, selon le guide des bases du NFC, pour que seul le service NFC puisse la lancer.

Une application iPhone déclare la capacité de lecture de tags et un texte d'usage avant que Core NFC n'ouvre une session, et une session de tags qui lit des tags ISO 7816 énumère aussi les identifiants d'application qu'elle sélectionnera. La page des déclarations couvre les trois.

Une page web a besoin d'une origine sécurisée, d'un cadre de premier niveau et d'un geste du visiteur, un appui sur un bouton par exemple, avant que Chrome ne demande la permission nfc.

Ce que le champ fait au code

Un tag est présent tant qu'une main le tient immobile, et le code s'exécute dans cette fenêtre. La référence de TagTechnology marque chaque échange comme bloquant et l'interdit sur le fil principal, et un tag qui part au milieu lève TagLostException.

Les essais au bureau masquent cela. Le téléphone est posé à plat, le tag ne bouge pas, et la fenêtre ne se referme jamais. Le même code dans la main d'un visiteur rencontre une fenêtre qui se ferme à moitié, et un code qui n'a jamais rencontré ce cas le traite comme un plantage.

Le tag n'est pas non plus ce qu'il était une seconde plus tôt. Android met en cache ce qu'il a lu à la découverte et ne met jamais ces valeurs à jour : un programme qui écrit puis se fie à la copie en cache relit sa propre hypothèse.

Vérifier ce que le code a écrit

Relisez le résultat avec un outil qui n'est pas le code en cours d'épreuve. Un bogue qui écrit le mauvais type d'enregistrement peut le relire comme le bon, puisque c'est le même bogue qui le décode.

NFC Tools, publié par la même société que ce site, montre les enregistrements que porte un tag et les technologies qu'il annonce, ce qui tranche la plupart des désaccords entre un programme et son auteur.

Puis relisez le tag sur l'autre plateforme. Un message qu'un analyseur Android accepte peut ne rien faire sur un iPhone, une décision de plateforme que couvre la page des enregistrements iOS.

Tous les guides de cette rubrique

Android

iOS et Core NFC

Web NFC et multiplateforme

Sous le NDEF

Émulation de carte en code

Lecteurs et appareils

Tests et mise au point

Questions fréquentes

Quelle plateforme viser pour un premier projet NFC ?

Android, si le projet doit parler au tag lui même. Son cadre atteint le NDEF, les commandes brutes et l'émulation de carte, et un tag peut lancer une application fermée. iOS ajoute une session que le système contrôle et Web NFC s'arrête au NDEF : les deux s'ajoutent plus facilement une fois l'échange au point.

Lire des tags demande-t-il une invite de permission ?

Pas sur Android, où la permission NFC est une permission normale accordée à l'installation. Web NFC interroge le visiteur, et seulement en réponse à un geste comme un appui sur un bouton.

Peut-on tester du code NFC sans téléphone ?

L'analyse et la construction de messages NDEF, oui. Tout ce qui dépend du champ, le minutage, un tag qui part au milieu d'une écriture ou un contrôleur qui refuse une commande, n'apparaît qu'avec de vrais tags sur de vrais téléphones.

D'où viennent les commandes propres à une puce ?

De la fiche technique de cette puce. Cette rubrique couvre les commandes que définissent les types de tag du NFC Forum, et laisse la carte mémoire de chaque puce aux fiches techniques de wakdev.com.