Saltar al contenido
Idioma: ES

¿Cómo se lee y se escribe NFC desde tu propio código?

A través de la API de la plataforma sobre la que corre el código: el marco de trabajo NFC en Android, Core NFC en el iPhone, Web NFC en Chrome para Android y PC/SC para un lector conectado a un ordenador. Cada una decide qué puede enviar un programa a una etiqueta, cuándo puede escucharla y qué tiene que declarar antes.

Cuatro vías de entrada, cuatro juegos de reglas

En Android, el marco de trabajo NFC entrega una etiqueta descubierta a una actividad, que puede leer y escribir NDEF, enviar comandos en bruto a la etiqueta o responder a un lector mediante la emulación de tarjeta host.

En el iPhone, Core NFC permite a una aplicación leer dentro de una sesión que el sistema muestra y termina, el modelo que este sitio describe en la página de la hoja de lectura.

En un navegador, Web NFC lee y escribe NDEF desde una página web. Chrome lo documenta como disponible en Android a partir de Chrome 89, y lo limita a NDEF a propósito: sin comandos en bruto y sin emulación de tarjeta.

En un ordenador, a un lector USB se llega mediante PC/SC, la especificación que los ordenadores usan para hablar con lectores de tarjetas inteligentes, y el programa habla con la etiqueta a través del lector y no a través de un teléfono.

Difieren en lo que pueden enviar a una etiqueta, y difieren todavía más en cuándo se les permite escuchar. Esa segunda diferencia es la que un traslado de una plataforma a otra se equivoca.

Lo que el código tiene que declarar

Ninguna alcanza la radio sin anunciarse. Una aplicación Android pide android.permission.NFC, que la referencia de los permisos clasifica como normal, así que se concede al instalar y sin preguntar.

Desde Android 17, una aplicación que apunta a un SDK más reciente tiene que proteger además cada actividad que recibe etiquetas con android.permission.DISPATCH_NFC_MESSAGE, según la guía del marco de trabajo NFC, para que solo el servicio NFC pueda arrancarla.

Una aplicación de iPhone declara la capacidad de lectura de etiquetas y una descripción de uso antes de que Core NFC abra una sesión, y una sesión de etiqueta que lee etiquetas ISO 7816 enumera además los identificadores de aplicación que va a seleccionar. La página de las declaraciones cubre las tres.

Una página web necesita un origen seguro, un marco de primer nivel y un gesto de quien la visita, como tocar un botón, antes de que Chrome pida el permiso nfc.

Lo que el campo le hace al código

Una etiqueta está presente mientras una mano la sostenga quieta, y el código corre dentro de esa ventana. La referencia de TagTechnology marca cada intercambio como bloqueante y lo prohíbe en el hilo principal, y una etiqueta que se va a mitad de intercambio levanta TagLostException.

Las pruebas en una mesa esconden esto. El teléfono está plano, la etiqueta no se mueve y la ventana no se cierra nunca. El mismo código en la mano de quien visita se encuentra con una ventana que se cierra a la mitad, y un código que nunca ha visto ese caso lo trata como un fallo.

La etiqueta tampoco es lo que era hace un segundo. Android guarda lo que leyó al descubrirla y no actualiza nunca esos valores, así que un programa que escribe y luego se fía de la copia guardada lee su propia suposición.

Comprobar lo que el código ha escrito

Vuelve a leer el resultado con una herramienta que no sea el código que estás probando. Un fallo que escribe el tipo de registro equivocado puede volver a leerlo como el correcto, porque es el mismo fallo el que lo descodifica.

NFC Tools, publicada por la misma empresa que este sitio, muestra los registros que contiene una etiqueta y las tecnologías que declara, lo que zanja la mayoría de los desacuerdos entre un programa y quien lo escribió.

Después lee la etiqueta en la otra plataforma. Un mensaje que un analizador de Android acepta puede no hacer nada en un iPhone, una decisión de plataforma que cubre la página de los registros en iOS.

Todas las guías de esta sección

Android

iOS y Core NFC

Web NFC y multiplataforma

Por debajo de NDEF

Emulación de tarjeta en código

Lectores y dispositivos

Pruebas y puesta a punto

Preguntas frecuentes

¿A qué plataforma debería apuntar un primer proyecto NFC?

A Android, si el proyecto necesita hablar con la etiqueta misma. Su marco de trabajo alcanza NDEF, los comandos en bruto y la emulación de tarjeta, y una etiqueta puede arrancar una aplicación que no está abierta. iOS añade una sesión que controla el sistema y Web NFC se queda en NDEF, así que las dos son más fáciles de añadir una vez que el intercambio funciona.

¿Leer etiquetas exige pedir un permiso?

En Android no, donde el permiso NFC es normal y se concede al instalar. Web NFC lo pide a quien visita, y solo como respuesta a un gesto, por ejemplo tocar un botón.

¿Se puede probar código NFC sin un teléfono?

Analizar y construir mensajes NDEF sí. Todo lo que depende del campo, como los tiempos, una etiqueta que se va a mitad de escritura o un controlador que rechaza un comando, solo aparece con etiquetas reales en teléfonos reales.

¿De dónde salen los comandos propios de un chip?

De la hoja de datos de ese chip. Esta sección cubre los comandos que definen los tipos de etiqueta del NFC Forum, y deja el mapa de memoria de cada chip a las hojas de datos de wakdev.com.