Come si legge e si scrive NFC dal proprio codice?
Attraverso l'API della piattaforma su cui il codice gira: il framework NFC su Android, Core NFC su iPhone, Web NFC in Chrome per Android, e PC/SC per un lettore collegato a un computer. Ognuna decide che cosa un programma può inviare a un tag, quando può mettersi in ascolto, e che cosa deve dichiarare prima.
Quattro vie d'accesso, quattro insiemi di regole
Su Android, il framework NFC consegna un tag rilevato a un'attività, che può leggere e scrivere NDEF, inviare comandi grezzi al tag, o rispondere a un lettore tramite l'Host Card Emulation.
Su iPhone, Core NFC lascia leggere un'applicazione dentro una sessione che il sistema mostra e chiude, il modello che questo sito descrive nella pagina del foglio di lettura.
In un browser, Web NFC legge e scrive NDEF da una pagina web. Chrome lo documenta come disponibile su Android a partire da Chrome 89, e lo limita a NDEF di proposito: niente comandi grezzi, nessuna emulazione di scheda.
Su un computer, un lettore USB si raggiunge tramite PC/SC, la specifica con cui i computer parlano ai lettori di schede, e il programma parla al tag attraverso il lettore invece che attraverso un telefono.
Differiscono in quello che possono inviare a un tag, e differiscono ancora di più in quando è loro permesso ascoltare. È questa seconda differenza che si sbaglia quando si porta il codice da una piattaforma all'altra.
Quello che il codice deve dichiarare
Nessuna di esse raggiunge la radio senza annunciarsi. Un'applicazione Android chiede android.permission.NFC, che il riferimento dei permessi classifica come normale, quindi viene concesso all'installazione senza alcuna richiesta.
A partire da Android 17, un'applicazione che punta a un SDK più recente deve inoltre proteggere ogni attività che riceve tag con android.permission.DISPATCH_NFC_MESSAGE, secondo la guida alle basi dell'NFC, affinché solo il servizio NFC possa avviarla.
Un'applicazione iPhone dichiara la capacità di lettura dei tag e una descrizione d'uso prima che Core NFC apra una sessione, e una sessione di tag che legge tag ISO 7816 elenca anche gli identificatori di applicazione che selezionerà. La pagina delle dichiarazioni le copre tutte e tre.
Una pagina web ha bisogno di un'origine sicura, di una cornice di primo livello e di un gesto di chi la visita, per esempio un tocco su un pulsante, prima che Chrome chieda il permesso nfc.
Quello che il campo fa al codice
Un tag è presente finché una mano lo tiene fermo, e il codice gira dentro quella finestra. Il riferimento di TagTechnology segna ogni scambio come bloccante e ne vieta l'uso sul thread principale, e un tag che se ne va a metà scambio solleva TagLostException.
Le prove alla scrivania lo nascondono. Il telefono è appoggiato, il tag non si muove, e la finestra non si chiude mai. Lo stesso codice nella mano di un visitatore incontra una finestra che si chiude a metà, e un codice che non ha mai incontrato quel caso lo tratta come un arresto anomalo.
Il tag non è nemmeno più quello che era un secondo fa. Android conserva quello che ha letto al rilevamento e non aggiorna mai quei valori, quindi un programma che scrive e poi si fida della copia conservata rilegge la propria supposizione.
Verificare quello che il codice ha scritto
Rileggi il risultato con uno strumento che non sia il codice in prova. Un difetto che scrive il tipo di record sbagliato può rileggerlo come quello giusto, perché è lo stesso difetto a decodificarlo.
NFC Tools, pubblicata dalla stessa azienda di questo sito, mostra i record che un tag porta e le tecnologie che dichiara, il che risolve quasi tutti i disaccordi fra un programma e chi lo ha scritto.
Poi leggi il tag sull'altra piattaforma. Un messaggio che Android accetta può comunque non fare nulla su un iPhone, una decisione di piattaforma che la pagina dei record su iOS copre.
Tutte le guide di questa sezione
- Android
- iOS e Core NFC
- Web NFC e multipiattaforma
- Sotto il NDEF
- Emulazione di scheda in codice
- Lettori e apparecchi
- Prove e messa a punto
Android
- Modo lettore o smistamento in primo piano: quale usare in un'applicazione Android?
- Come si dichiarano i tag che un'applicazione Android deve ricevere?
- Quale classe di tecnologia deve aprire il codice Android per un dato tag?
- Come si scrive un messaggio NDEF da un'applicazione Android?
- Un'applicazione Android può reagire a un tag senza mostrare uno schermo?
- Come si gestisce un tag che arriva mentre la tua attività è aperta?
- Quali limiti del controller deve verificare il codice Android mentre gira?
iOS e Core NFC
- Sessione NDEF o sessione di tag: quale deve aprire un'applicazione iOS?
- Cosa deve dichiarare un'applicazione iOS prima di poter leggere un tag?
- Come si scrive e si blocca un tag NDEF da un'applicazione iOS?
- Come riceve un'applicazione iOS un tag letto in background?
- Come si leggono più tag in una sola sessione iOS?
- Un'applicazione iOS può leggere l'identificatore di un tag?
Web NFC e multipiattaforma
Sotto il NDEF
- Come si invia un comando grezzo a un tag?
- Che cos'è un'APDU, e quando serve al tuo codice?
- Come si legge la memoria di un tag di tipo 2 pagina per pagina?
- Come si leggono i blocchi di un tag ISO/IEC 15693?
- Come fa il codice a trovare il file NDEF di un tag di tipo 4?
- Come si autentica il codice su un tag protetto da password?
- Come si rileva che un tag ha lasciato il campo?
- Come si scrive un tag perché una scrittura interrotta non passi per valida?
- Come si scrivono le pagine di configurazione di un tag senza rovinarlo?
- Come fa un server a leggere l'identificatore che un tag rispecchia nel suo URL?
Emulazione di scheda in codice
- Come fa un'applicazione Android a emulare una scheda con Host Card Emulation?
- Perché un lettore raggiunge un'altra applicazione invece della tua?
- Cosa serve a un'applicazione iOS per emulare una scheda?
- Un telefono può emulare un tag NDEF per un altro telefono?
- Host Card Emulation funziona a schermo spento?
Lettori e apparecchi
- Come fa un computer a parlare con un lettore NFC USB?
- Quale chip lettore va bene per un progetto su microcontrollore?
- Perché un modulo lettore amatoriale perde dei tag?
- Che cos'è un tag dinamico, e quando serve a un apparecchio?
- Un telefono può configurare un apparecchio spento?
- Come si progetta un'antenna NFC per il proprio circuito?
- Il tuo apparecchio può fare da tag per un telefono?
Prove e messa a punto
- Perché una lettura fallisce con un errore di tag perso?
- Perché una sessione Core NFC finisce da sola?
- Perché un comando scade, e quanto deve aspettare il codice?
- Si può provare del codice NFC senza un tag in mano?
- Quali tag deve tenere uno sviluppatore per le prove?
- Come si vede cosa si scambiano davvero un'applicazione e un tag?
- Cosa deve fare un'applicazione quando l'NFC è spento o assente?
- Perché del codice scritto per un chip si rompe su un altro dello stesso tipo?
- Un'applicazione NFC deve installarsi sui telefoni senza NFC?
Domande frequenti
Su quale piattaforma conviene partire per un primo progetto NFC?
Android, se il progetto deve parlare al tag stesso. Il suo framework raggiunge NDEF, i comandi grezzi e l'emulazione di scheda, e un tag può avviare un'applicazione che non è aperta. iOS aggiunge una sessione controllata dal sistema e Web NFC si ferma a NDEF, quindi entrambi sono più facili da aggiungere una volta che lo scambio funziona.
Leggere i tag richiede una richiesta di permesso?
Su Android no, dove il permesso NFC è normale e viene concesso all'installazione. Web NFC chiede a chi visita la pagina, e solo in risposta a un gesto come un tocco su un pulsante.
Si può provare del codice NFC senza un telefono?
Analizzare e costruire messaggi NDEF sì. Tutto quello che dipende dal campo, come i tempi, un tag che se ne va a metà scrittura o un controller che rifiuta un comando, compare solo con tag veri su telefoni veri.
Da dove vengono i comandi specifici di un chip?
Dalla scheda tecnica di quel chip. Questa rubrica copre i comandi che i tipi di tag del NFC Forum definiscono, e lascia la mappa di memoria dei singoli chip alle schede tecniche su wakdev.com.