¿Tu etiqueta NFC bloqueada es realmente de solo lectura? Cómo comprobarlo
Si una etiqueta no deja escribir, puede estar bloqueada. Así se comprueba el estado de solo lectura en Android, iPhone y con una app, y por qué el bloqueo suele ser permanente.
Si tu etiqueta NFC no acepta datos nuevos, comprueba su estado de solo lectura antes de culpar a la app. Android lo informa con isWritable(), el iPhone lo muestra como un estado NDEF readOnly y la mayoría de las apps de etiquetas lo indican en la pantalla de lectura. Si dice solo lectura, da el bloqueo por permanente.
Por qué una etiqueta puede ser de solo lectura
El NFC Forum indica que las etiquetas Tipo 2 permiten leer y reescribir, pero los usuarios pueden configurarlas para que pasen a solo lectura. Ese paso de "configurar" es el bloqueo. Y hay dos variantes.
Un bloqueo suave es una marca en el contenedor de capacidades (CC) que avisa a los lectores de que la etiqueta es de solo lectura. Un bloqueo duro va más allá y activa bits de bloqueo en la memoria del chip, que impiden escribir a nivel de chip. El método makeReadOnly() de Android hace ambas cosas: según la referencia de Ndef de Android, pone el campo CC en solo lectura y, cuando es posible, fija de forma permanente los bits de bloqueo para impedir cualquier modificación posterior de la memoria.
Así que "bloqueada" puede significar cosas distintas, según cómo se bloqueó la etiqueta y qué chip lleva dentro. Si estás comparando chips, nuestra guía sobre cómo se comparan los chips de etiquetas más comunes explica las diferencias.
Comprobarlo en Android
La clase Ndef de Android ofrece tres métodos importantes:
isWritable()comprueba si la etiqueta se puede escribir ahora mismo. Las etiquetas del NFC Forum pueden estar en estado de solo lectura o de lectura y escritura, y este método te dice cuál es.canMakeReadOnly()indica si la etiqueta admite bloquearse.makeReadOnly()la bloquea de verdad.
Usa los dos primeros para inspeccionar una etiqueta. No llames a makeReadOnly() como prueba: la documentación de Android describe la operación como irreversible. Si isWritable() devuelve falso, la etiqueta es de solo lectura y las escrituras fallarán.
Comprobarlo en iPhone
Core NFC ofrece la misma información con queryNDEFStatus. Devuelve uno de tres valores: readWrite, readOnly o notSupported. Apple describe NFCNDEFStatus.readOnly como una etiqueta que solo admite leer datos de mensajes NDEF. La llamada writeLock de Core NFC es la que cambia una etiqueta a solo lectura, lo que impide futuras escrituras.
iOS es más limitado que Android en este punto. Core NFC trabaja con NDEF y con una serie de tipos de etiqueta compatibles, así que una etiqueta que devuelve notSupported no está necesariamente bloqueada. Puede que simplemente no tenga formato NDEF.
Comprobarlo con una app
No hace falta escribir código. La mayoría de las herramientas de etiquetas muestran el estado de bloqueo en cuanto escaneas. La guía de solución de problemas de WakDev recomienda confirmar que la etiqueta no está bloqueada mirando la pestaña Read, y añade que, si la etiqueta está bloqueada, no podrás escribir en ella.
NFCore lee e inspecciona etiquetas en iPhone, y la versión para Android hace lo mismo, así que puedes escanear una etiqueta y revisar sus detalles antes de intentar sobrescribir nada.
Cuando la etiqueta no es lo que dice ser
A veces una escritura falla por motivos que no tienen nada que ver con el bloqueo. Las etiquetas sin marca vendidas a granel pueden llevar un chip distinto al del anuncio, y un chip distinto puede comportarse de otra manera. Si un lote de etiquetas actúa de forma rara, lee cómo detectar un chip NTAG falsificado antes de pedir más.
¿Se puede desbloquear una etiqueta bloqueada?
Da por hecho que no. La documentación de Android califica makeReadOnly() de irreversible, y una respuesta en el foro de la comunidad de NXP dice que los bits de bloqueo se pueden poner a 1, pero no volver a 0. Es el testimonio de un usuario y no una afirmación de la hoja de datos, así que tómalo como una guía sólida, no como una garantía.
En la práctica, si una etiqueta está bloqueada, escribe los datos en una nueva. Y antes de bloquear una propia, escanéala y prueba primero el contenido. No tendrás una segunda oportunidad.
Conclusión
Una etiqueta que no deja escribir está bloqueada, no tiene formato NDEF o está mal colocada sobre el teléfono. Comprobar isWritable() en Android, el estado readOnly en iPhone o la pantalla de lectura de una app te dice cuál es el caso en unos segundos. Si es de solo lectura, pasa a una etiqueta nueva.
Preguntas frecuentes
¿Puedo desbloquear una etiqueta NFC de solo lectura?
Normalmente no. La documentación de Android dice que makeReadOnly() fija de forma permanente los bits de bloqueo cuando es posible y que la operación es irreversible. Un testimonio de la comunidad dice que los bits de bloqueo solo pasan de 0 a 1. Usa una etiqueta nueva.
¿Por qué mi etiqueta se lee bien pero no deja escribir?
Puede estar bloqueada, pero también puede que no admita NDEF o que el teléfono pierda la conexión durante la escritura. Comprueba primero el estado de escritura y vuelve a intentarlo con la etiqueta bien quieta.
¿Un estado de solo lectura significa que los datos están protegidos?
No. Solo lectura significa que la etiqueta rechaza escrituras. No cifra los datos ni los oculta a quien escanee la etiqueta.