NFCErrorCode.NOT_SUPPORTED | Simulator or non-NFC device | Test on a physical device with NFC |
NFCErrorCode.TIMEOUT | Device too far from terminal | Hold devices back-to-back and ensure HCE is active |
NFCErrorCode.INVALID_DATA + “expired” | Invoice older than 5 minutes | Have merchant create a new payment request |
NFCErrorCode.INVALID_DATA + “signature” | Merchant device not registered | Call device registration before emitting HCE |
APIErrorCode.UNAUTHORIZED (401) | Wrong or missing API key | Verify apiKey in initialize() |
APIErrorCode.SDK_NOT_INITIALIZED | Hook used before initialize() | Move initialize() to app entry, before rendering |
| Web fallback shows “Invalid signature” | Signature corrupted in URL | Ensure SDK version is up to date — earlier builds used Base64 instead of Hex |
| Web fallback shows “Payment URL has expired” | URL opened more than 35 minutes after signing | Customer must tap again to get a fresh URL; payment expiry is 30 minutes |
| iOS customer’s browser doesn’t open | NFC background tag reading not enabled | Requires iOS 14+ with background NFC reading; user may need to tap from the Control Centre NFC icon on older iOS |
| NDEF tap does nothing on Android | Google Pay conflict | Ensure the SDK’s NDEF service is declared with category="other" in AndroidManifest.xml — this prevents the disambiguation dialog |