Ir para o conteúdo
Idioma: PT

O que é uma mensagem NDEF, e como ela é construída?

Uma mensagem NDEF é uma sequência ordenada de registros. Cada registro carrega um cabeçalho curto que descreve que tipo de coisa é a carga útil dele, seguido da própria carga útil. Esse cabeçalho é a razão de ser de tudo: ele permite a um leitor que nunca viu a tag decidir o que fazer com o que encontra.

Uma mensagem é uma lista de registros

Uma tag guarda uma mensagem NDEF. Essa mensagem contém um ou mais registros, numa ordem definida, e sinalizadores marcam qual registro é o primeiro e qual é o último, para que um leitor saiba onde a mensagem começa e termina.

A maioria das tags por aí guarda exatamente um registro. Vários são possíveis e custam espaço e tempo de leitura, o que é uma troca que vale fazer de propósito em vez de por hábito.

O que um registro contém

O Android documenta a estrutura com precisão na referência NdefRecord dele, que é a descrição mais clara disponível livremente.

Um registro sempre carrega um campo de nome de tipo de três bits, em geral escrito TNF, que dá a tipagem de alto nível para o resto do registro. Depois dele vêm três campos de tamanho variável: um tipo, que dá a tipagem detalhada da carga útil, um identificador opcional que quase não se usa na prática, e a própria carga útil.

As partes de um registro NDEF, conforme a documentação de referência do Android
CampoSempre presenteO que ele faz
TNFSim, três bitsTipagem de alto nível, diz ao leitor como interpretar o campo de tipo
TipoTamanho variávelTipagem detalhada, como um esquema de URI ou um tipo MIME
IdOpcionalMetadado de identificação, pouco usado
Carga útilTamanho variávelO conteúdo em si

Por que o cabeçalho importa mais que a carga útil

Duas tags podem guardar bytes de carga útil idênticos e se comportar de modo completamente diferente, porque uma os declara como endereço da web e a outra os declara como texto simples.

A primeira abre um navegador. A segunda é exibida, ou ignorada por completo, dependendo da plataforma. Nada nos bytes mudou, e tudo no resultado mudou.

Essa é a coisa mais útil de entender sobre o NDEF, e explica a maioria dos casos de uma tag que é lida corretamente e não faz nada. O conteúdo estava bom. A declaração estava errada.

O que você vê numa ferramenta

Uma ferramenta de leitura em geral mostra a contagem de registros e, para cada registro, o tipo dele, o tamanho e o conteúdo. Se um registro mostra um tamanho e nenhum conteúdo reconhecível, a carga útil está lá e o tipo é algo que a ferramenta não decodifica.

Uma mensagem vazia é um estado válido e não uma falha. Uma tag formatada sem nada gravado guarda uma mensagem com um único registro vazio, e é por isso que uma tag nova é lida com sucesso e não faz nada.

Perguntas frequentes

Uma tag pode guardar mais de uma mensagem NDEF?

Uma mensagem por tag, contendo tantos registros quantos couberem. A mensagem é o contêiner e os registros são o conteúdo dela, então a questão de várias mensagens não se coloca na prática.

A ordem dos registros importa?

Sim, e mais do que as pessoas esperam, já que as plataformas em geral agem sobre o primeiro registro que reconhecem. Pôr uma reserva antes do registro que você de fato quer disparar é um erro comum e evitável.

Uma tag vazia é a mesma coisa que uma tag não formatada?

Não. Uma tag não formatada não tem estrutura que um leitor genérico possa usar. Uma tag formatada e vazia tem a estrutura e não tem conteúdo, e a diferença importa porque só a segunda está pronta para ser gravada normalmente.

Eu preciso entender isso para gravar uma tag?

Não para gravar uma URL com uma ferramenta, que cuida disso por você. Passa a ser necessário no instante em que algo se comporta de modo inesperado, porque quase toda surpresa remonta a um tipo de registro e não ao conteúdo.