Tap to Pay on Android shows "Connect hardware to take card payments" instead of the tap prompt

I’m integrating Tap to Pay on Android with the Mobile Payments SDK (2.6.0, via the
Flutter plugin). Authorization works. the SDK is authorized, the location has card
processing enabled.

But when I call startPayment(), Square’s screen opens with the right amount and says
“Connect hardware to take card payments” instead of asking the customer to tap. After
about a minute it fails with a timeout, since no card can ever be presented.

When I check getReaders() just before starting the payment, there IS a Tap to Pay
reader, but it’s unusable:

status = readerUnavailable
unavailableReason = secureConnectionToSquareFailure
supportedInputMethods = (empty)

So the reader can’t establish its secure connection to Square, and because it supports
no input methods, the SDK falls back to asking for external hardware.

Setup: Samsung SM-G781B, Android 13. NFC on, developer options off, no other Square
readers paired. The merchant account is US-based, but the device is physically in
India. Same behaviour in debug and release builds.

My question: is this because the device is outside a supported region? The Tap to Pay
on Android docs don’t mention any country requirements. Or does
secureConnectionToSquareFailure point to a network or device attestation problem I
should be debugging instead?

First, MPSDK requires the app’s package name plus SHA-256 signing-certificate fingerprint registered in the Developer Dashboard for every secure connection, including local/debug builds. This is often the root cause of the secureConnectionToSquareFailure error message.

Tap to Pay on Android is supported in the US, Canada, UK, and Australia, and the supported region is based on the seller account country, not the device’s physical location, but the secure-connection handshake involves device attestation that can fail from unsupported network environments. Fix the signing registration first, and if the problem persists, test from a US network.

I have added signature in Developer console but the issue is still there.

Do we need to wait for sometime or we need to test from a US network/location?

@Janak yes your device needs to be physically in a region that is supported