Saltar al contenido
Idioma: ES

¿Qué debe hacer una app cuando el NFC está apagado o no existe?

Distinguir los estados antes de escribir ningún mensaje. En Android: ningún controlador, un controlador que se ha apagado, y, desde Android 16, etiquetas rechazadas para tu app. En el iPhone: disponible o no. Luego decir cuál de ellos es, y dejar que el resto de la app funcione.

Tres estados en Android

Necesitan respuestas distintas, y la página de los límites del controlador los lee en ejecución. getDefaultAdapter() devuelve nulo cuando el teléfono no tiene controlador NFC: la función no existe y no existirá nunca en ese aparato. isEnabled() devuelve falso cuando se ha apagado el NFC, que está a un ajuste de arreglarse. Y desde Android 16 se pueden rechazar los intents de etiqueta para una sola app, cosa que informa isTagIntentAllowed() mientras el adaptador dice que está encendido.

El tercero es el que produce los mejores informes de fallo, porque todo parece correcto: el NFC está activado, la app está instalada, el manifiesto está bien, y no llega nunca ninguna etiqueta.

Dos en el iPhone

Core NFC responde antes de que exista una sesión: readingAvailable dice si el aparato puede leer. Más allá de eso, los errores llevan el resto, readerErrorRadioDisabled para una radio apagada y readerErrorUnsupportedFeature para algo que la sesión no puede hacer.

No hay equivalente de la pantalla de ajustes de Android a la que mandar a alguien, lo que cambia la redacción y no la lógica: un iPhone que no puede leer es un hecho del aparato, y el trabajo de la app es decirlo una vez y seguir. Qué iPhone lee siquiera es la página de los modelos.

Qué decir en cada caso

Sin aparato: esconde la función en vez de explicarla. Un botón que no puede funcionar en ese teléfono es una incidencia de soporte esperando, y su ausencia no necesita ninguna frase.

Apagado: ofrece el ajuste. Android expone la pantalla de ajustes del NFC como un intent, y mandar allí a quien usa el teléfono es mejor que describir dónde vive, ya que la ruta cambia según el fabricante, cosa que enseña la página de la activación.

Rechazado para la app: dilo, porque no lo va a decir nada más en la interfaz. Se eligió, quizá sin querer, y solo tu mensaje conecta el silencio con el ajuste.

No bloquear nunca el resto

Un toque es una entrada entre varias. Una app que se niega a arrancar sin NFC ha convertido una comodidad en un requisito, y quien no puede usarla es justamente quien necesitaba la alternativa.

Conserva el camino manual: un código que teclear, una búsqueda, un escaneo, lo que fuera que la etiqueta acortaba. Y decide aparte si la app debe siquiera instalarse en un teléfono sin la radio, que es una cuestión de las tiendas y no de la ejecución: la página de la instalación la retoma.

Preguntas frecuentes

¿Cómo sé que el teléfono no tiene NFC en absoluto?

getDefaultAdapter devuelve nulo en Android, y readingAvailable es falso en iOS. Los dos son hechos del aparato, no ajustes.

¿Puedo encender el NFC desde mi app?

No. En Android puedes mandar a quien usa el teléfono a la pantalla de ajustes del NFC; el interruptor es suyo.

¿Por qué no llega nada aunque el NFC esté encendido?

Desde Android 16 se pueden rechazar los intents de etiqueta para una sola app. isTagIntentAllowed lo informa, y no lo hará nada más en la interfaz.

¿Debe la app negarse a funcionar sin NFC?

No. Conserva el camino manual y deja que el resto de la app funcione. Si se instala siquiera es una decisión aparte, de las tiendas.