Um aplicativo NFC deve ser instalado em celulares sem NFC?
Depende de o NFC ser o aplicativo ou um dos recursos dele. Declarado como exigido, as duas lojas mantêm o aplicativo longe dos aparelhos sem o rádio. Declarado como opcional, ele é instalado em toda parte, e o código tem de detectar a ausência e dizer algo útil.
O que o Android filtra
A declaração é uses-feature no manifesto, com android.hardware.nfc para o rádio e android.hardware.nfc.hce para a emulação de cartão hospedada no aparelho. A referência é explícita sobre para que isso serve: o Google Play usa esses elementos para filtrar um aplicativo para longe dos aparelhos que não atendem às exigências dele.
O atributo required é a decisão inteira. Verdadeiro quer dizer que o aplicativo não consegue funcionar sem o recurso, e a loja o esconde dos celulares que não o têm; falso quer dizer que o aplicativo o prefere e funciona sem, e a loja o deixa visível em toda parte.
O que a App Store filtra
A mesma ideia mora no Info.plist. UIRequiredDeviceCapabilities lista os recursos de aparelho que um aplicativo exige, e a Apple enuncia a consequência sem rodeios: a App Store impede que os clientes instalem um aplicativo num aparelho que não os suporta. O valor para este é nfc, documentado como tags NFC, disponível a partir do iOS 11 e indisponível no visionOS.
A chave aceita um vetor, onde um valor listado quer dizer exigido, ou um dicionário, onde um valor pode ser posto em falso para dizer que o recurso não pode estar presente. Omiti-la diz que o aplicativo nem exige nem recusa o recurso, que é o equivalente da declaração opcional no Android.
Qual dos dois declarar
Exigido, quando o aplicativo não tem propósito sem uma tag: um gravador de tags, um leitor para a sua própria instalação, uma ferramenta cuja cada tela supõe o rádio. Filtrar ali é fazer um favor ao usuário, e uma avaliação de uma estrela vinda de um celular que nunca poderia ter funcionado é a alternativa.
Opcional, quando o NFC encurta algo que o aplicativo já faz de outro jeito: um cartão de fidelidade que também lê um código, um bilhete que também mostra um código de barras, uma ferramenta de configuração com caminho manual. Filtrar esses para fora de uma loja custa usuários que teriam sido perfeitamente atendidos.
A que o opcional obriga você
Uma declaração opcional é uma promessa de que o aplicativo funciona sem o rádio, e o código tem de cumpri-la. Detecte a ausência, esconda o que não consegue funcionar, e mantenha o caminho que não precisa de tag, o que a página do NFC desligado ou ausente expõe estado por estado.
Ela também quer dizer testar num celular sem NFC, que é o único teste que o conjunto de teste não consegue cobrir com tags. Um emulador ou um aparelho antigo basta: o que importa é que o aplicativo abra, não explique nada de que não precisa, e faça o outro trabalho dele.
Perguntas frequentes
Declarar como exigido esconde o meu aplicativo de alguns celulares?
Esconde. O Google Play filtra pelo uses-feature, e a App Store impede a instalação em aparelhos que não têm um recurso exigido.
Que valor eu declaro?
android.hardware.nfc no Android, mais android.hardware.nfc.hce para a emulação de cartão, e o valor nfc de UIRequiredDeviceCapabilities no iOS.
Dá para declarar opcional e ainda usar NFC?
Dá, e é justamente o ponto: o aplicativo é instalado em toda parte e confere em tempo de execução antes de oferecer o recurso.
O que quebra se eu esquecer a declaração?
Nada visível a princípio. O aplicativo é instalado em celulares que não conseguem usá-lo, e a falha cai nos usuários em vez de cair na página da loja.