Um framework multiplataforma alcança todos os recursos do NFC?
Nada além do que o plugin de NFC dele envolve. Frameworks como Flutter e React Native alcançam as APIs de plataforma por código nativo, então um plugin expõe o que as APIs do Android e do iOS oferecem, e só o que o autor envolveu. As declarações ficam nos projetos nativos, e uma WebView não recebe Web NFC.
Um plugin é código nativo
Os frameworks multiplataforma alcançam as APIs de plataforma por código nativo. O Flutter documenta os canais de plataforma para chamar as APIs de uma plataforma a partir de Kotlin ou Java no Android e de Swift ou Objective-C no iOS, e o React Native documenta os módulos nativos para as APIs de plataforma que nem ele nem uma biblioteca existente oferecem.
Um plugin de NFC para qualquer um dos dois é código desse tipo. No Android ele chama as classes de tecnologia e o despacho cobertos nesta seção, e no iOS ele chama o Core NFC. Ele consegue expor o que essas APIs oferecem, e só a parte que o autor dele envolveu.
As declarações ficam nativas
Um framework não tira o que cada plataforma exige. A permissão de NFC, os filtros de intent e, a partir do Android 17, a permissão de despacho na atividade que recebe as tags vivem todos no manifesto do Android, como descreve a página do manifesto.
No iOS, o recurso de leitura e a descrição de uso dele pertencem ao projeto iOS que o framework constrói, exatamente como pertenceriam a um aplicativo escrito em Swift.
Onde as duas plataformas diferem
Uma API única sobre duas plataformas tem de decidir o que fazer com o que só uma delas oferece. O Android consegue abrir um aplicativo a partir de uma tag pelo manifesto dele, escolher entre o modo leitor e o despacho em primeiro plano, e emular um cartão pela emulação de cartão pelo host; o iOS lê dentro de uma sessão que o sistema mostra.
Um plugin ou expõe só a parte comum, ou acrescenta chamadas específicas de uma plataforma que o código compartilhado tem de separar. A primeira esconde as funções do Android, e a segunda traz de volta os dois caminhos de código que o framework devia justamente tirar.
Os aplicativos exibidos numa WebView
Os frameworks que exibem o aplicativo numa visão web são um caso à parte. A entrada do estado das plataformas do Chrome lista o Web NFC só no Chrome do Android, sem suporte na WebView do Android, então uma página que funciona no Chrome não recebe nada dentro de um aplicativo desses.
Esses aplicativos alcançam o NFC por um plugin nativo do mesmo jeito, o que os deixa com os mesmos limites dos frameworks acima.
O que conferir antes de escolher
Liste as chamadas de que o projeto precisa em cada plataforma, e depois confira cada uma contra o plugin antes da primeira linha de código: ler e gravar NDEF, bloquear, os comandos brutos por tecnologia, abrir o aplicativo a partir de uma tag, e a emulação de cartão onde ela importa.
Depois teste em celulares reais das duas plataformas. O campo se comporta do mesmo jeito seja qual for a linguagem que o chamou, e as falhas que importam, uma tag que sai no meio de uma gravação ou um chip que recusa um comando, só aparecem ali.
Perguntas frequentes
Um framework tira a necessidade da autorização do iOS?
Não. A autorização pertence ao projeto iOS que o framework constrói, como pertenceria a um aplicativo escrito em Swift, e o Core NFC a exige antes de abrir uma sessão.
Um aplicativo híbrido consegue usar o Web NFC na WebView dele?
Não. A entrada do estado das plataformas do Chrome não lista suporte na WebView para o Web NFC, então um aplicativo híbrido alcança o NFC por um plugin nativo.
Um plugin vai expor a emulação de cartão pelo host?
Só se o autor dele a envolveu, e só no Android, onde a plataforma a oferece aos aplicativos. A emulação de cartão no iPhone depende dos termos da Apple e não do plugin.
O que conferir primeiro num plugin?
Se cada chamada de que o projeto precisa existe em cada plataforma: leitura, gravação e bloqueio NDEF, comandos brutos, abrir o aplicativo a partir de uma tag, e a emulação de cartão se ela importar. Uma chamada que falta é mais barata de achar antes de escrever código.