Show where to tap
Open the antenna guide once, before the first sale. It walks the merchant through three screens: where to hold the card, the antenna’s position on the back of this phone, and a test tap that confirms the spot. It returnstrue when the merchant taps a card where the guide points.
CheckoutConfig you passed to Payments.getReady, so it wears your brand. The test tap reads nothing from the card: it only proves the antenna works.
Android reports the antenna’s coordinates only from Android 14 (API 34), and only on devices that publish them. On older or silent devices the guide says the position is approximate and gives generic advice instead of pointing at a spot. A marker in the wrong place would send the merchant looking for a faulty card, so the SDK never guesses.
Read the NFC state yourself
For your own onboarding or settings screens, theNfc helpers answer the same questions without opening a screen:
Nfc.enableTapTest(activity) { } starts a test tap that fires when any contactless card touches the antenna, without reading it; pair it with Nfc.disableTapTest(activity) in onPause.
Check readiness before a sale
Payments.checkDeviceReadiness runs without credentials and reports one entry per check, so a merchant learns that NFC is off during setup instead of with a customer waiting.
A device can pass every check and still be refused with
ATTESTATION_FAILED. The integrity check runs inside the card reader before every transaction and is not something this pre-flight can predict. Emulators, rooted devices, unlocked bootloaders and custom ROMs fail it by design.
What the checkout handles for you
- Location permission. The managed checkout asks for
ACCESS_FINE_LOCATIONbefore the first charge and shows a dedicated screen with an Allow location button when it is denied. Location is a hard requirement of the card reader. - Keep the screen on. The payment screen keeps the display on for the whole transaction and releases it afterwards, without a wake lock or a permission.
- The certified PIN pad. It draws over your app; nothing in your app may draw over it. Screen recording, a busy camera or microphone, or an overlay from another app blocks PIN entry with
SECURE_ENTRY_BLOCKEDuntil they stop.
Troubleshooting
Next steps
Quickstart
Prepare the terminal and take a sandbox payment.
Going to production
Install source, Play Integrity, permissions and the go-live checklist.

