Vai al contenuto
Lingua: IT

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

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.