O que é o NDEF, e por que toda tag legível o usa?
O NDEF, o formato de troca de dados do NFC, é um pequeno contêiner que diz o que a tag guarda além de guardá-lo. Uma tag gravada em NDEF é entendida por qualquer leitor conforme, inclusive o que vem embutido no sistema operacional. Uma tag gravada sem ele guarda bytes que só o software dela consegue interpretar.
O problema que o NDEF resolve
Uma tag é um pequeno bloco de memória. Sem uma convenção, os bytes nela não querem dizer nada para quem não os gravou: isto é um endereço da web, uma leitura de temperatura, um identificador, ou ruído?
O NDEF fornece essa convenção. Ele embrulha o conteúdo numa estrutura que declara o que o conteúdo é, de modo que um leitor que nunca viu aquela tag antes ainda consegue decidir o que fazer com ela.
A forma de uma mensagem
Uma mensagem NDEF é uma sequência de registros. Cada registro carrega um pequeno cabeçalho que descreve que tipo de coisa ele é e como o tipo deve ser interpretado, seguido do conteúdo em si.
Esse cabeçalho é a razão de ser de tudo. É ele que permite a um celular ver um registro e concluir “isto é um endereço da web” em vez de “estes são quarenta bytes”. Registros de tipos bem conhecidos são tratados pelo sistema operacional sem a participação de nenhum aplicativo, e é por isso que tocar numa tag pode abrir um navegador num aparelho onde nada foi instalado para esse fim.
Como é uma tag sem NDEF
Ela parece quebrada, e esse é o problema prático.
O celular detecta a tag, identifica a tecnologia dela e informa que não há nada sobre o que agir. Para quem toca, isso é indistinguível de uma leitura que falhou, ainda que a leitura tenha dado perfeitamente certo e a memória possa estar cheia de dados.
Isso explica boa parte dos relatos de “o celular vê a tag mas nada acontece”. O lado do rádio funcionou. Simplesmente não havia nada num formato que alguma coisa pudesse interpretar.
O que o contêiner custa a você
Bytes. A estrutura tem um custo fixo, e numa tag pequena esse custo é uma fração apreciável do que você pagou. Uma tag anunciada com uma certa capacidade oferece menos que isso para o seu conteúdo de verdade, e a diferença cresce com o número de registros.
O que leva a uma regra que vale aplicar: prefira um registro a vários. Um único endereço da web num registro deixa mais espaço e é lido mais rápido que a mesma informação dividida entre um link, um título e uma nota, porque cada registro a mais acrescenta bytes de cabeçalho que o leitor tem de ler.
A exceção é a redundância deliberada, como acrescentar um registro de texto simples para que algo legível apareça nas plataformas que ignoram o tipo de registro principal. Essa vale os bytes.
Perguntas frequentes
Eu sou obrigado a usar o NDEF?
Tecnicamente não, mas para qualquer coisa lida pelo celular de outra pessoa a resposta é sim na prática. Sem ele você precisaria distribuir um aplicativo que conhecesse o layout da sua memória, o que anula o sentido de pôr uma tag num cartaz.
Todo celular lê o NDEF do mesmo jeito?
A interpretação é a mesma, a reação não. As duas plataformas leem o contêiner de modo idêntico e depois aplicam as regras próprias sobre quais tipos de registro disparam uma ação, e é aí que o comportamento diverge.
Uma tag pode guardar NDEF e outros dados ao mesmo tempo?
Em muitos chips sim, já que o NDEF ocupa uma área definida e o resto da memória pode guardar o que você quiser. Só a parte NDEF vai ser entendida por um leitor genérico, então qualquer coisa fora dela precisa do seu próprio software.
Por que minha tag mostra menos espaço livre que o anunciado?
Parte da memória guarda a estrutura que descreve a própria tag, e o contêiner NDEF acrescenta o custo fixo dele. Os dois são descontados antes do seu conteúdo, e a diferença é normal em vez de um defeito.