Tap to Pay is an experimental feature. If you’re interested in implementing and testing it in your wallet, reach out to our team before getting started.
Android
How It Works
When a user taps their phone on a POS terminal, the terminal emits an NDEF tag with a single URI record pointing tohttps://pay.walletconnect.com. Android dispatches this in one of three ways:
- One wallet installed with a verified App Link — Android opens the wallet’s
NfcPaymentActivitydirectly. - Multiple wallets installed — Android shows the “Open with…” chooser; user selects a wallet.
- No wallet installed — Android opens the URL in the browser, which shows a wallet chooser page with App Store / Play Store links.
Flow: Tap from Home Screen (Phone Unlocked, No App in Foreground)
Flow: Tap from Wallet App (Foreground)
Integration Steps
1
Register with WalletConnect for App Links
Android App Links require
pay.walletconnect.com to list your app in its /.well-known/assetlinks.json file. Without this, autoVerify intent filters won’t pass verification.Provide the following to WalletConnect:- Package name
- SHA-256 certificate fingerprint(s)
2
Manifest Setup
Add NFC permissions:Register a translucent activity with three intent filters — each covers a different Android dispatch path for the same NFC tap:Create
AndroidManifest.xml
AndroidManifest.xml
res/xml/nfc_tech_filter.xml:nfc_tech_filter.xml
3
Implement the NFC Interceptor Activity
The activity handles multiple intent paths to extract the payment URL:
NfcPaymentActivity.kt
4
Add Foreground Dispatch (wallet already open)
When the wallet activity is in the foreground, manifest intent filters may not fire. Use foreground dispatch to claim NFC priority:Wire it into your main activity:
NfcPaymentReader.kt
MainActivity.kt
5
Process Payment via WalletKit Pay
PaymentFlow.kt
iOS
How It Works
When a user taps their phone on a POS terminal, iOS reads the NDEF tag automatically (Background Tag Reading, iOS 13+) and resolves the URL as a Universal Link. Depending on what’s installed:- One wallet registered in AASA — iOS shows a notification banner “Open in [Wallet]”; user taps to open.
- Multiple wallets in AASA — AASA is evaluated top-to-bottom; first installed match wins (no disambiguation UI). On iOS 26, a system wallet chooser modal is shown instead.
- No wallet installed — iOS opens the URL in Safari, which shows a wallet chooser page with App Store links.
NFCNDEFReaderSession, which takes priority over Background Tag Reading.
Flow: Tap from Home Screen (Phone Unlocked, No App in Foreground)
Flow: Tap from Wallet App (Foreground)
Integration Steps
1
Register with WalletConnect for Universal Links
Universal Links require
pay.walletconnect.com to host an Apple App Site Association (AASA) file listing your app. WalletConnect will add your app to pay.walletconnect.com/.well-known/apple-app-site-association.Provide:- Apple Team ID
- Bundle ID
2
Entitlements
Add two entitlements in your NFC Tag Reading (for manual CoreNFC scans):Also enable these capabilities in Xcode → Target → Signing & Capabilities:
.entitlements file.Associated Domains (for Universal Links / Background Tag Reading):Entitlements.plist
Entitlements.plist
- Associated Domains
- Near Field Communication Tag Reading
3
Info.plist
Add the NFC usage description (required by Apple for CoreNFC):
Info.plist
4
Implement the NFC Reader (manual scan path)
This handles the case where the user taps an NFC button inside the app to initiate a read:Key points:
NFCPaymentReader.swift
invalidateAfterFirstRead: true— iOS dismisses the NFC sheet after one tag is read.wellKnownTypeURIPayload()— extracts the URI from a standard NDEF URI record (what the POS emits)..readerSessionInvalidationErrorFirstNDEFTagRead— normal completion, not an error.
5
Handle Background Tag Reading (Universal Links)
This is the zero-interaction path. The user holds their phone near the POS terminal — even from the lock screen or home screen — and iOS reads the NDEF tag automatically, resolves the URL as a Universal Link, and opens your app.The URL arrives via For cold start (app was not running), Universal Links arrive in
NSUserActivity in your SceneDelegate:SceneDelegate.swift
connectionOptions.userActivities:SceneDelegate.swift
6
Wire the NFC Button in Your UI
Show an NFC scan button only on devices that support it:
NFCScanView.swift
7
Process Payment via WalletKit Pay
PaymentFlow.swift