Skip to main content

Quick start for integrating your own POS app

This page shows the minimum recommended startup flow when building your own POS application. Details about available terminal configurations can be found in Configuration.

Prerequisites

Before starting, make sure the required SDKs are installed:

  • Verifone Payment SDK (PSDK)
  • Epson ePOS SDK (for off-device printing)

See Setup for installation instructions for these dependencies.

1. Add the integration module as dependency

dependencies {
implementation(project(":api"))
}

2. Initialize the integration layer

class App : Application() {
private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

override fun onCreate() {
super.onCreate()

ApiModule.setUseEmulatedTerminal(BuildConfig.USE_EMULATED_TERMINAL)

if (!BuildConfig.USE_EMULATED_TERMINAL) {
ApiModule.setTerminalConnectionConfig(
if (BuildConfig.USE_LOCAL_TERMINAL) {
TerminalConnectionConfig.OnDevice
} else {
TerminalConnectionConfig.TcpIpClient(
address = BuildConfig.OFF_DEVICE_TERMINAL_IP,
networkConfiguration = NetworkConfiguration.STATIC,
forgetPersistedDevice = true,
)
}
)
}

ApiModule.initialize(this)
ApiModule.start(appScope)
}
}

ApiModule.start(scope) is asynchronous. Read readiness via State and flows.

3. Use the terminal

class PaymentViewModel : ViewModel() {
private val terminal = ApiModule.terminal

val terminalReady = terminal.terminalReady

suspend fun pay(amountMinorUnits: Int): PaymentResult {
return terminal.pay(amountMinorUnits)
}
}

Public methods and models are described in TerminalApi.