¿Un marco multiplataforma llega a todas las funciones NFC?
No más allá de lo que envuelva su plugin NFC. Marcos como Flutter y React Native llegan a las API de la plataforma mediante código nativo, así que un plugin expone lo que ofrecen Android e iOS, y solo lo que su autor envolvió. Las declaraciones se quedan en los proyectos nativos.
Un plugin es código nativo
Los marcos multiplataforma llegan a las API de la plataforma mediante código nativo. Flutter documenta los canales de plataforma para llamar a las API de una plataforma desde Kotlin o Java en Android y desde Swift u Objective-C en iOS, y React Native documenta los módulos nativos para las API de plataforma que ni él ni una biblioteca existente ofrecen.
Un plugin NFC para cualquiera de los dos es código de ese tipo. En Android llama a las clases de tecnología y al despacho que cubre esta sección, y en iOS llama a Core NFC. Puede exponer lo que ofrecen esas API, y solo la parte que su autor envolvió.
Las declaraciones se quedan nativas
Un marco no quita lo que exige cada plataforma. El permiso NFC, los filtros de intent y, desde Android 17, el permiso de despacho en la actividad que recibe, viven todos en el manifiesto de Android, como describe la página del manifiesto.
En iOS, la capacidad de lectura y su descripción de uso pertenecen al proyecto iOS que el marco construye, exactamente igual que en una aplicación escrita en Swift.
Donde las dos plataformas difieren
Una sola API sobre dos plataformas tiene que decidir qué hacer con lo que solo una de ellas ofrece. Android puede arrancar una aplicación desde una etiqueta mediante su manifiesto, elegir entre el modo lector y el despacho en primer plano, y emular una tarjeta mediante la emulación de tarjeta host; iOS lee dentro de una sesión que el sistema enseña.
Un plugin o bien expone solo la parte común, o bien añade llamadas propias de una plataforma sobre las que el código compartido tiene que ramificar. Lo primero esconde las funciones de Android, y lo segundo devuelve los dos caminos de código que el marco venía a quitar.
Aplicaciones dibujadas en un WebView
Los marcos que dibujan la aplicación en una vista web son un caso aparte. La ficha de estado de la plataforma Chrome enumera Web NFC solo para Chrome en Android, sin compatibilidad con el WebView de Android, así que una página que funciona en Chrome no tiene nada dentro de una aplicación así.
Esas aplicaciones llegan al NFC también mediante un plugin nativo, lo que las deja con los mismos límites que los marcos de arriba.
Qué comprobar antes de elegir
Enumera las llamadas que el proyecto necesita en cada plataforma, y después comprueba cada una contra el plugin antes de la primera línea de código: leer y escribir NDEF, bloquear, comandos en bruto por tecnología, arrancar la aplicación desde una etiqueta, y la emulación de tarjeta donde importe.
Después prueba en teléfonos reales de las dos plataformas. El campo se comporta igual sea cual sea el lenguaje que lo llamó, y los fallos que importan, una etiqueta que se va a mitad de escritura o un chip que rechaza un comando, solo aparecen ahí.
Preguntas frecuentes
¿Un marco quita la necesidad de la autorización en iOS?
No. La autorización pertenece al proyecto iOS que el marco construye, igual que en una aplicación escrita en Swift, y Core NFC la exige antes de abrir una sesión.
¿Puede una app híbrida usar Web NFC en su WebView?
No. La ficha de estado de Chrome no enumera compatibilidad con el WebView para Web NFC, así que una aplicación híbrida llega al NFC mediante un plugin nativo.
¿Un plugin expondrá la emulación de tarjeta host?
Solo si su autor la envolvió, y solo en Android, donde la plataforma la ofrece a las aplicaciones. La emulación de tarjeta en el iPhone depende de las condiciones de Apple y no del plugin.
¿Qué debería comprobar primero en un plugin?
Si cada llamada que el proyecto necesita existe en cada plataforma: leer, escribir y bloquear NDEF, comandos en bruto, arrancar la aplicación desde una etiqueta, y la emulación de tarjeta si importa. Una llamada que falta sale más barata encontrada antes de escribir código.