Skip to main content
A merchant’s first minutes with Tap on Phone decide whether they trust it. The SDK ships two helpers for that moment: an antenna guide that shows where to hold the card, and a readiness check that reports what is missing before a customer is waiting. Neither needs a terminal, a token or a card.

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 returns true when the merchant taps a card where the guide points.
The guide inherits the last 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, the Nfc 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_LOCATION before 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_BLOCKED until 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.