Che cos'è un messaggio NDEF, e com'è costruito?
Un messaggio NDEF è una sequenza ordinata di record. Ogni record porta una breve intestazione che descrive di che genere di cosa è fatto il suo carico utile, seguita dal carico stesso. Quell'intestazione è tutto il senso della faccenda: permette a un lettore che non ha mai visto il tag di decidere cosa fare di quello che trova.
Un messaggio è un elenco di record
Un tag porta un messaggio NDEF. Quel messaggio contiene uno o più record, in un ordine definito, e dei contrassegni segnano quale record è il primo e quale l'ultimo, perché un lettore sappia dove il messaggio comincia e dove finisce.
Quasi tutti i tag in circolazione portano esattamente un record. Averne diversi è possibile e costa sia spazio sia tempo di lettura, uno scambio che conviene fare di proposito e non per abitudine.
Cosa contiene un record
Android ne documenta la struttura con precisione nel suo riferimento NdefRecord, che è la descrizione più chiara liberamente disponibile.
Un record porta sempre un campo di tre bit chiamato type name field, di solito scritto TNF, che dà una tipizzazione di alto livello al resto del record. Oltre a quello vengono tre campi di lunghezza variabile: un tipo che tipizza in dettaglio il carico utile, un identificatore facoltativo che nella pratica si usa di rado, e il carico stesso.
| Campo | Sempre presente | A cosa serve |
|---|---|---|
| TNF | Sì, tre bit | Tipizzazione di alto livello, dice al lettore come interpretare il campo tipo |
| Tipo | Lunghezza variabile | Tipizzazione di dettaglio, per esempio uno schema URI o un tipo MIME |
| Id | Facoltativo | Metadato di identificazione, poco usato |
| Carico utile | Lunghezza variabile | Il contenuto vero e proprio |
Perché l'intestazione conta più del carico
Due tag possono portare byte di carico identici e comportarsi in modo completamente diverso, perché uno li dichiara indirizzo web e l'altro li dichiara testo semplice.
Il primo apre un browser. Il secondo viene mostrato, oppure ignorato del tutto, a seconda della piattaforma. Dei byte non è cambiato niente, e del risultato è cambiato tutto.
È la cosa più utile da capire di NDEF, e spiega quasi tutti i casi di un tag che si legge correttamente e non fa nulla. Il contenuto andava bene. La dichiarazione era sbagliata.
Cosa vedi in uno strumento
Uno strumento di lettura di norma mostra il numero di record, poi per ciascuno il tipo, la dimensione e il contenuto. Se un record mostra una dimensione ma nessun contenuto riconoscibile, il carico c'è e il tipo è qualcosa che lo strumento non decodifica.
Un messaggio vuoto è uno stato valido e non un guasto. Un tag formattato su cui non è stato scritto nulla porta un messaggio con un solo record vuoto, ed è per questo che un tag appena comprato si legge senza errori e non fa nulla.
Domande frequenti
Un tag può portare più di un messaggio NDEF?
Un messaggio per tag, che contiene tanti record quanti ce ne stanno. Il messaggio è il contenitore e i record sono il contenuto, quindi nella pratica la questione di più messaggi non si pone.
L'ordine dei record conta?
Sì, e più di quanto si creda, perché le piattaforme di norma agiscono sul primo record che riconoscono. Mettere un ripiego prima del record che volevi far scattare è un errore diffuso ed evitabile.
Un tag vuoto è la stessa cosa di un tag non formattato?
No. Un tag non formattato non ha una struttura utilizzabile da un lettore generico. Un tag formattato e vuoto ha la struttura e non ha contenuto, e la differenza conta perché solo il secondo è pronto per essere scritto normalmente.
Devo capire tutto questo per scrivere un tag?
Non per scrivere un indirizzo con uno strumento, che se ne occupa al posto tuo. Diventa necessario nel momento in cui qualcosa si comporta in modo inatteso, perché quasi ogni sorpresa risale a un tipo di record e non al contenuto.