Ir para o conteúdo
Idioma: PT

Como ler e gravar NFC a partir do seu próprio código?

Pela API da plataforma em que o código roda: o framework NFC no Android, o Core NFC no iPhone, o Web NFC no Chrome para Android, e o PC/SC para um leitor ligado a um computador. Cada uma decide o que um programa envia a uma tag, quando ele fica à escuta, e o que ele declara antes.

Quatro portas de entrada, quatro conjuntos de regras

No Android, o framework NFC entrega uma tag descoberta a uma atividade, que pode ler e gravar NDEF, enviar comandos brutos à tag, ou responder a um leitor pela emulação de cartão pelo host.

No iPhone, o Core NFC deixa um aplicativo ler dentro de uma sessão que o sistema mostra e encerra, o modelo que este site descreve na página da folha de leitura.

Num navegador, o Web NFC lê e grava NDEF a partir de uma página da web. O Chrome o documenta como disponível no Android a partir do Chrome 89, e o limita ao NDEF de propósito: nada de comandos brutos, nada de emulação de cartão.

Num computador, um leitor USB é alcançado pelo PC/SC, a especificação que os computadores usam para falar com leitores de cartão inteligente, e o programa fala com a tag através do leitor em vez de através de um celular.

Eles diferem no que conseguem enviar a uma tag, e diferem mais ainda em quando têm permissão para ficar à escuta. Essa segunda diferença é a que uma portabilidade de uma plataforma para outra erra.

O que o código tem de declarar

Nenhum deles alcança o rádio sem se anunciar. Um aplicativo Android pede android.permission.NFC, que a referência das permissões classifica como normal, então ela é concedida na instalação sem um pedido.

A partir do Android 17, um aplicativo que mira um SDK mais recente também tem de proteger com android.permission.DISPATCH_NFC_MESSAGE cada atividade que recebe tags, segundo o guia de NFC do Android, para que só o serviço de NFC possa abri-la.

Um aplicativo de iPhone declara a capacidade de leitura de tags e uma descrição de uso antes que o Core NFC abra uma sessão, e uma sessão de tag que lê tags ISO 7816 enumera também os identificadores de aplicação que vai selecionar. A página das declarações cobre as três.

Uma página da web precisa de uma origem segura, de um quadro de nível superior e de um gesto do visitante, como um toque num botão, antes que o Chrome peça a permissão nfc.

O que o campo faz com o código

Uma tag está presente enquanto uma mão a segura parada, e o código roda dentro dessa janela. A referência de TagTechnology marca cada troca como bloqueante e a proíbe na thread principal, e uma tag que sai no meio de uma troca levanta TagLostException.

Os testes numa mesa escondem isso. O celular fica deitado, a tag não se mexe, e a janela nunca se fecha. O mesmo código na mão de um visitante encontra uma janela que se fecha na metade, e um código que nunca encontrou esse caso o trata como uma pane.

A tag também não é o que era um segundo atrás. O Android guarda em cache o que leu na descoberta e nunca atualiza esses valores, então um programa que grava e depois confia na cópia em cache lê de volta a própria suposição.

Conferir o que o código gravou

Leia o resultado de volta com uma ferramenta que não seja o código em teste. Um defeito que grava o tipo de registro errado consegue lê-lo de volta como o tipo certo, porque o mesmo defeito o decodifica.

O NFC Tools, publicado pela mesma empresa que este site, mostra os registros que uma tag guarda e as tecnologias que ela declara, o que resolve a maior parte das divergências entre um programa e o autor dele.

Depois leia a tag na outra plataforma. Uma mensagem que um analisador Android aceita ainda pode não fazer nada num iPhone, uma decisão de plataforma coberta na página dos registros no iOS.

Todos os guias desta seção

Android

iOS e Core NFC

Web NFC e multiplataforma

Abaixo do NDEF

Emulação de cartão em código

Leitores e aparelhos

Testes e depuração

Perguntas frequentes

Qual plataforma um primeiro projeto de NFC deve mirar?

O Android, se o projeto precisa falar com a própria tag. O framework dele alcança o NDEF, os comandos brutos e a emulação de cartão, e uma tag consegue abrir um aplicativo fechado. O iOS acrescenta uma sessão que o sistema controla e o Web NFC para no NDEF, então os dois ficam mais fáceis de acrescentar depois que a troca funciona.

Ler tags exige um pedido de permissão?

Não no Android, em que a permissão de NFC é normal e concedida na instalação. O Web NFC pergunta ao visitante, e só em resposta a um gesto como um toque num botão.

Dá para testar código NFC sem um celular?

Analisar e montar mensagens NDEF, sim. Tudo o que depende do campo, como o tempo, uma tag que sai no meio de uma gravação ou um controlador que recusa um comando, só aparece com tags reais em celulares reais.

De onde vêm os comandos específicos de um chip?

Da ficha técnica daquele chip. Esta seção cobre os comandos que os tipos de tag do NFC Forum definem, e deixa o mapa de memória de cada chip para as fichas técnicas em wakdev.com.