¿Qué es un mensaje NDEF, y cómo se construye?
Un mensaje NDEF es una sucesión ordenada de registros. Cada registro lleva una cabecera corta que describe qué clase de cosa es su carga útil, seguida de la carga en sí. Esa cabecera es toda la cuestión: permite que un lector que nunca ha visto la etiqueta decida qué hacer con lo que encuentra.
Un mensaje es una lista de registros
Una etiqueta lleva un mensaje NDEF. Ese mensaje contiene uno o varios registros, en un orden definido, y unas marcas señalan cuál es el primero y cuál el último para que un lector sepa dónde empieza y dónde acaba el mensaje.
La mayoría de las etiquetas que circulan llevan exactamente un registro. Varios son posibles y cuestan espacio y tiempo de lectura, un canje que conviene hacer a propósito y no por costumbre.
Qué contiene un registro
Android documenta la estructura con precisión en su referencia de NdefRecord, que es la descripción más clara disponible libremente.
Un registro lleva siempre un campo de nombre de tipo de tres bits, que se escribe TNF, y que da el tipado de alto nivel del resto del registro. Después vienen tres campos de longitud variable: un tipo que precisa el tipado de la carga útil, un identificador opcional que casi no se usa en la práctica, y la carga útil en sí.
| Campo | Siempre presente | Para qué sirve |
|---|---|---|
| TNF | Sí, tres bits | Tipado de alto nivel, dice al lector cómo interpretar el campo de tipo |
| Tipo | Longitud variable | Tipado preciso, como un esquema de URI o un tipo MIME |
| Id | Opcional | Metadato identificador, poco usado |
| Carga útil | Longitud variable | El contenido propiamente dicho |
Por qué la cabecera importa más que la carga
Dos etiquetas pueden llevar bytes de carga útil idénticos y comportarse de forma completamente distinta, porque una los declara dirección web y la otra los declara texto sin formato.
La primera abre un navegador. La segunda se muestra, o se ignora del todo, según la plataforma. Nada cambió en los bytes, y todo cambió en el resultado.
Esto es lo más útil que se puede entender sobre NDEF, y explica la mayoría de los casos de una etiqueta que se lee bien y no hace nada. El contenido estaba bien. La declaración estaba mal.
Lo que ves en una herramienta
Una herramienta de lectura suele mostrar el número de registros y, para cada uno, su tipo, su tamaño y su contenido. Si un registro muestra un tamaño y ningún contenido reconocible, la carga útil está ahí y el tipo es algo que la herramienta no descodifica.
Un mensaje vacío es un estado válido y no un fallo. Una etiqueta formateada sin nada escrito lleva un mensaje con un único registro vacío, y por eso una etiqueta nueva se lee correctamente y no hace nada.
Preguntas frecuentes
¿Puede una etiqueta llevar más de un mensaje NDEF?
Un mensaje por etiqueta, con tantos registros como quepan. El mensaje es el contenedor y los registros son su contenido, así que la cuestión de varios mensajes no se plantea en la práctica.
¿Importa el orden de los registros?
Sí, y más de lo que se espera, porque las plataformas actúan por lo general sobre el primer registro que reconocen. Poner un recurso de reserva delante del registro que de verdad quieres disparar es un error frecuente y evitable.
¿Una etiqueta vacía es lo mismo que una sin formatear?
No. Una etiqueta sin formatear no tiene una estructura que un lector genérico pueda usar. Una etiqueta formateada y vacía tiene la estructura y no tiene contenido, y la diferencia cuenta porque solo la segunda está lista para escribirse con normalidad.
¿Necesito entender esto para escribir una etiqueta?
No para escribir una dirección web con una herramienta, que se ocupa de ello por ti. Se vuelve necesario en cuanto algo se comporta de forma inesperada, porque casi toda sorpresa se remonta a un tipo de registro y no al contenido.