Ir para o conteúdo
Idioma: PT

O que um aplicativo deve fazer quando o NFC está desligado ou ausente?

Distinga os estados antes de escrever mensagem alguma. No Android: nenhum controlador, um controlador que o usuário desligou, e, a partir do Android 16, tags recusadas para o seu aplicativo. No iPhone: disponível ou não. Depois diga qual deles é, e deixe o resto do aplicativo funcionar.

Três estados no Android

Eles precisam de respostas diferentes, e a página dos limites do controlador os lê em tempo de execução. getDefaultAdapter() devolve nulo quando o celular não tem controlador NFC: o recurso não existe e nunca vai existir nesse aparelho. isEnabled() devolve falso quando o usuário desligou o NFC, que está a um ajuste de ser resolvido. E a partir do Android 16 um usuário consegue recusar as intents de tag para um aplicativo, o que isTagIntentAllowed() informa enquanto o adaptador diz que está ligado.

O terceiro é o que produz os melhores relatos de defeito, porque tudo parece certo: o NFC está ativado, o aplicativo está instalado, o manifesto está correto, e tag alguma chega.

Dois no iPhone

O Core NFC responde antes de uma sessão existir: readingAvailable diz se o aparelho consegue ler. Além disso, os erros carregam o resto, readerErrorRadioDisabled para um rádio desligado e readerErrorUnsupportedFeature para algo que a sessão não consegue fazer.

Não existe equivalente da tela de ajustes do Android para onde mandar o usuário, o que muda a redação em vez de mudar a lógica: um iPhone que não consegue ler é um fato do aparelho, e o trabalho do aplicativo é dizer isso uma vez e seguir adiante. Que iPhones leem em absoluto é a página dos modelos.

O que dizer em cada caso

Sem hardware: esconda o recurso em vez de explicá-lo. Um botão que não consegue funcionar naquele celular é um chamado de suporte esperando, e a ausência dele não precisa de frase alguma.

Desligado: ofereça o ajuste. O Android expõe a tela de ajustes do NFC como uma intent, e mandar o usuário para lá é melhor que descrever onde ela mora, já que o caminho difere por fabricante, o que a página da ativação mostra.

Recusado para o aplicativo: diga isso, porque nada mais na interface vai dizer. O usuário escolheu, possivelmente sem querer, e só a sua mensagem liga o silêncio ao ajuste.

Nunca bloqueie o resto

Um toque é uma entrada entre várias. Um aplicativo que se recusa a começar sem NFC transformou uma comodidade numa exigência, e o usuário que não consegue usá-la é justamente quem precisava da alternativa.

Mantenha o caminho manual: um código a digitar, uma busca, uma leitura, o que quer que a tag estivesse encurtando. E decida em separado se o aplicativo deve sequer ser instalado num celular sem o rádio, que é uma questão de loja em vez de uma questão de execução: a página da loja a retoma.

Perguntas frequentes

Como saber que o celular não tem NFC nenhum?

getDefaultAdapter devolve nulo no Android, e readingAvailable é falso no iOS. Os dois são fatos do aparelho, não ajustes.

Dá para ligar o NFC pelo meu aplicativo?

Não. Dá para mandar o usuário à tela de ajustes do NFC no Android; a chave pertence ao usuário.

Por que nada chega embora o NFC esteja ligado?

A partir do Android 16 o usuário consegue recusar as intents de tag para um aplicativo. isTagIntentAllowed informa isso, e nada mais na interface vai informar.

O aplicativo deve se recusar a rodar sem NFC?

Não. Mantenha o caminho manual e deixe o resto do aplicativo funcionar. Se ele chega a ser instalado é uma decisão separada, de loja.