mPOS Payment Terminal Mobile App Development
mPOS turns a smartphone or tablet into a payment terminal. A courier accepts card payment on delivery, a taxi driver at ride end, a market vendor for goods. Technically, it's integrating a card reader via Bluetooth or headphone jack, plus NFC support on the device itself for contactless.
Hardware and SDK
Major readers and their SDKs:
| Reader | Interface | SDK |
|---|---|---|
| Verifone e285 | Bluetooth | Verifone Commander SDK |
| Ingenico iSMP4 | Bluetooth | Ingenico mPOS SDK |
| PAX A920 | Built-in Android | PAX SDK |
| BBPOS Chipper 2X | Bluetooth/Audio | Stripe Terminal SDK |
| Square Reader | Lightning/USB-C/Bluetooth | Square Reader SDK |
Stripe Terminal SDK (stripe-terminal-ios, stripe-terminal-android) is the most documented choice for new projects. Supports multiple reader types, handles EMV transactions, online and offline modes.
Bluetooth connection with the reader is the source of most mPOS problems: reader disconnects mid-transaction, phone doesn't see the reader after screen lock, reader battery is dead. Implement reconnect logic with auto-search and reconnection to the last-used reader. CBCentralManager (iOS CoreBluetooth) / BluetoothAdapter (Android) with real-time connection state on the main screen.
EMV and NFC
Card transactions per international standards—EMV (Chip & PIN, Chip & Sign) and contactless (NFC). Stripe Terminal SDK handles EMV dialog with the chip entirely—developers don't manually implement ISO 7816 APDU commands.
NFC on the device without reader: iOS only accepts Apple Pay through PassKit, not arbitrary NFC cards (Apple restricts this). Android: HCE (Host Card Emulation) accepts contactless Visa/MC via NFC directly but requires payment system certification.
Apple Tap to Pay (iOS 16+, iPhone XS+) accepts contactless cards via iPhone NFC without an external reader. Requires Partner SDK from an Apple-approved PSP (Stripe, Adyen, Checkout.com support). Integrate via ProximityReader framework. Changes the mPOS market—no reader needed.
Offline Mode
A courier in a subway tunnel—no network. The transaction must complete. Stripe Terminal supports offline mode: the transaction authorizes locally on the device, saves to a queue, syncs when the network returns. Offline amount limit is configurable. Chargeback risk with offline is accepted consciously by the business.
Receipts
Electronic receipt via SMS or email. Printed receipt: Bluetooth printer integration (Star Micronics TSP143, Epson TM-P20). Star Bluetooth SDK (iOS/Android) treats the printer as CBPeripheral, commands in StarIO format.
Fiscal receipt in RF/RB: integration with an Authorized Financial Device via a Financial Node. ATOL, Evotor, Komtet are popular. Mobile fiscal registers (ATOL 91F, SHTRIKH-MPAY-F) connect via Bluetooth, manufacturer's SDK.
Main Screen and UX
For a cashier, mPOS priority is speed. Main screen: amount input field (digital keypad, large font) + "Accept Payment" button. Product catalog is optional for those maintaining nomenclature.
Shifts: open/close with Z-report. Constraint: one operator, one shift. Operator auth via PIN (not biometrics—different cashiers have different PINs).
Transaction history with search and filter by period. Refunds—partial and full, with manager PIN confirmation.
Stack
Native Swift + Kotlin is preferred for mPOS due to direct access to CoreBluetooth/BluetoothAdapter, ProximityReader, and hardware interfaces. React Native with native modules for Bluetooth and Terminal SDK works when cross-platform is required.
Process
Reader and PSP selection → Terminal SDK integration → Bluetooth connection and reconnect → payment flow (EMV + contactless) → receipts (electronic and printed) → fiscal integration → real hardware testing → PSP certification → launch.
Timeline Estimates
Basic mPOS (amount input, Stripe Terminal payment, electronic receipt): 3–4 weeks. Full app with catalog, shifts, refunds, fiscal register, Bluetooth printer: 2–3 months. Cost determined after requirements analysis.







