Welcome to our new developer portal! Use the "Ask" button to chat with our AI Agent.
For the complete documentation index, see llms.txt. This page is also available as Markdown.

Controlar los pagos NFC en Android

Resumen

La configuración del sistema de Android puede bloquear los pagos sin contacto, incluso cuando tu aplicación de cartera digital es correcta.

Esta página cubre los controles de Android que afectan a los pagos NFC, además de los requisitos del lado de la app para admitirlos.

Configuración del dispositivo que afecta a los pagos NFC

Interruptor de NFC

Android proporciona un interruptor maestro de NFC, similar al Wi‑Fi o a los datos móviles.

NFC debe estar habilitado para ejecutar pagos sin contacto. Los usuarios finales también pueden deshabilitar NFC para bloquear los pagos.

Ejemplo: interruptor de NFC en Configuración rápida

Requerir desbloqueo del dispositivo (Android 12+)

En algunos dispositivos (Android 12+), NFC se puede configurar para que funcione solo cuando el dispositivo esté desbloqueado.

Si está habilitado, el usuario final debe desbloquear el dispositivo antes de acercarlo.

Ejemplo: opción para requerir un dispositivo desbloqueado para NFC

Selección de la fuente de la aplicación (específica del OEM)

Algunos dispositivos admiten varias “ubicaciones de pago” (por ejemplo, elemento seguro vs HCE).

El hardware del dispositivo enruta los comandos NFC entrantes a la ubicación seleccionada.

Ejemplo: selección de la fuente de la aplicación para pagos sin contacto

El SDK de NFC Wallet usa emulación de tarjeta basada en host (HCE).

Si el dispositivo expone una configuración de fuente de la aplicación, indica a los usuarios finales que seleccionen una opción equivalente a HCE Wallet.

Aplicación de pago predeterminada

Android permite al usuario final elegir la aplicación de pago predeterminada para Tap & Pay.

Ejemplo: configuración de la aplicación de pago predeterminada

Algunos dispositivos también muestran un interruptor como Pagar con la app abierta actualmente.

Esto requiere compatibilidad del lado de la app. Consulta Compatibilidad con “Pagar con la app abierta actualmente”.

Requisitos de la aplicación de billetera digital (HCE)

Tu aplicación de cartera digital debe declarar un servicio HCE.

El SDK de NFC Wallet no declara por ti el servicio HCE. Proporciona AbstractHCEService para simplificar la implementación.

Para más información, consulta Descripción general de la emulación de tarjeta basada en host.

Detectar y solicitar la aplicación de pago predeterminada

Al iniciar, se recomienda:

Android muestra un diálogo del sistema. No puedes cambiar su texto, excepto la etiqueta de tu app.

Ejemplo: diálogo de Android para cambiar la app de pago predeterminada

Para observar la elección del usuario, llama a startActivityForResult y comprueba el resultado en onActivityResult:

Controla cómo aparece tu app en la configuración de Android

La interfaz de usuario de Tap & Pay / Pagos sin contacto varía según el OEM, el modelo y la versión de Android.

Ejemplo: diferencias de la interfaz de usuario de Tap & Pay entre dispositivos

Android completa la entrada de tu aplicación utilizando recursos de:

  • AndroidManifest.xml

  • Recurso de metadatos de tu servicio de pago (declarado mediante /manifest/application/service/meta-data/@android:resource)

Puedes controlar:

  • Icono de la aplicación: /manifest/application/@android:icon

  • Banner del servicio de pago: metadatos del servicio de pago, /host-apdu-service/@android:apduServiceBanner

  • Etiqueta del servicio de pago: /manifest/application/service/@android:label

    • Esta etiqueta también se usa en el diálogo “establecer app de pago predeterminada”.

  • Descripción del servicio de pago: metadatos del servicio de pago, /host-apdu-service/@android:description

No puedes controlar el orden de las aplicaciones en la lista.

Pagar con la app en primer plano

Algunos dispositivos muestran una configuración como Pagar con la app abierta actualmente o Priorizar la app que se está ejecutando actualmente.

Esta configuración solo significa que el usuario final permite que las apps en primer plano anulen el servicio de pago predeterminado. No impone ese comportamiento.

Para aprovecharlo, implementa CardEmulation#setPreferredService y CardEmulation#unsetPreferredService siguiendo las directrices de Android.

El Activity pasado a setPreferredService(...) debe estar en estado reanudado.

Llamar a setPreferredService(...) en Activity#onResume.

Llamar a unsetPreferredService(...) en Activity#onPause.

Use CardEmulation#categoryAllowsForegroundPreference para detectar si se permite la preferencia en primer plano para la categoría de pago.

Recomendaciones:

  • Comprueba que la preferencia en primer plano esté habilitada usando CardEmulation.categoryAllowsForegroundPreference(CATEGORY_PAYMENT).

  • Implementa la anulación de la aplicación predeterminada como se explicó antes.

  • Advierte a los usuarios finales sobre una experiencia de pago inconsistente si tu aplicación de billetera digital solo maneja transacciones sin contacto cuando está en primer plano.

Última actualización

¿Te fue útil?