Una pagina web può leggere un tag NFC?
Sì, in Chrome su Android, tramite Web NFC. La pagina va servita via HTTPS in una cornice di primo livello, avviare la prima lettura da un gesto di chi la visita e avere il suo permesso. Riceve poi ogni messaggio NDEF con il numero di serie del tag. Nessun altro browser la porta, e niente di essa raggiunge un iPhone.
Dove funziona
Web NFC è arrivato in Chrome 89 per Android, secondo l'articolo di Chrome su Web NFC. La scheda di stato della piattaforma Chrome non elenca alcun sostegno su computer, su iOS o nella WebView di Android, quindi nemmeno una pagina mostrata dentro il browser incorporato di un'applicazione lo ottiene.
Gli altri motori hanno detto di no. La posizione pubblicata di WebKit si oppone all'API, citando privacy, sicurezza e indipendenza dai dispositivi, e la posizione di Mozilla è negativa. La specifica è incubata da un Community Group del W3C invece di essere pubblicata come Raccomandazione del W3C.
Una pagina che legge tag serve quindi chi visita da Android con Chrome, e nessun altro. Questo si addice agli strumenti interni su telefoni che un progetto controlla molto più che a qualsiasi cosa aprirà il pubblico.
Che cosa deve succedere prima di una lettura
La pagina è servita via HTTPS, in una cornice di primo livello e non in un iframe. La prima scan() è chiamata in risposta a un gesto di chi la visita, per esempio un tocco su un pulsante, ed è allora che Chrome chiede il permesso nfc. Una volta concesso, l'esempio dell'articolo stesso lo verifica tramite l'API delle autorizzazioni e comincia a leggere senza aspettare un gesto.
Al telefono serve anche l'hardware NFC, acceso. Il rilevamento della funzione non lo dice: 'NDEFReader' in window dice che il browser sostiene Web NFC, e la promessa viene rifiutata dopo se l'hardware manca.
La specifica nomina i rifiuti. NotAllowedError vuol dire che il permesso è stato negato, NotSupportedError che non c'è un adattatore NFC, e NotReadableError che il browser non è autorizzato a usarlo, per esempio a causa di un'impostazione.
Quello che riceve la pagina
Ogni tag porta un evento reading con due cose: il messaggio, e serialNumber, l'identificatore che il tag usa per l'anticollisione, oppure una stringa vuota quando non ce n'è. Quell'identificatore non è un segreto, come spiega la pagina dell'UID.
Il messaggio porta record che la pagina decodifica da sé, per recordType: testo, URL, URL assoluto, MIME, smart poster, tipo esterno, vuoto, sconosciuto e tipi locali. Ogni record espone il proprio carico utile come un DataView, e decodificare il testo è lasciato alla pagina.
Un tag che il browser non riesce a leggere come NDEF fa scattare readingerror. Senza un ascoltatore per esso, un tag non sostenuto sembra un tag su cui non è successo nulla.
Che cosa la ferma
La pagina deve restare visibile. Chrome sospende le operazioni NFC mentre la pagina è nascosta e le riprende quando torna, e blocca la radio quando lo schermo è spento o il telefono è bloccato.
Un tag avvicinato prima che la lettura sia cominciata va ad Android, non alla pagina. L'articolo lo dice fra i suoi consigli: Android tratta i tag a livello di sistema operativo prima che Web NFC sia operativo, quindi un tag che porta un collegamento può far scattare il trattamento che il telefono riserva a quel collegamento.
E la lettura finisce con la pagina. Non c'è lettura in background, quindi una pagina non può aspettare in tasca i tag come può fare un'applicazione registrata nel suo manifest.
Domande frequenti
Web NFC funziona su iPhone?
No. La scheda di stato della piattaforma Chrome non elenca alcun sostegno per iOS, e la posizione pubblicata di WebKit si oppone all'API per privacy, sicurezza e indipendenza dai dispositivi.
Una pagina può leggere tag in background?
No. Chrome sospende le operazioni NFC mentre la pagina è nascosta, e blocca la radio quando lo schermo è spento o il telefono è bloccato.
Web NFC può leggere l'UID del tag?
L'evento reading espone serialNumber, l'identificatore che il tag usa per l'anticollisione, oppure una stringa vuota quando non ce n'è. Distingue un tag e non dimostra nulla su di esso.
Funziona nella WebView di un'applicazione Android?
No. La scheda di stato della piattaforma Chrome elenca Web NFC per il solo Chrome su Android, senza sostegno nella WebView, quindi un'applicazione che ha bisogno dell'NFC chiama l'API nativa.