On your Android payment terminal you can install and use Android apps. Here we give an overview of the requirements these apps must meet, and how you can test them.
Make sure your app meets the following specifications:
- For use on S1E terminals, the app must be compatible with Android 7.1.
For use on S1F2 terminals, the app must be compatible with Android 9.
To distribute the app to your terminals, we need to have the app's Android Package (APK). The maximum APK file size is 150 MB.
App version -
The AndroidManifest.xml that is included in the APK must have a
minSdkVersionfield specifying the minimum SDK version that your app needs. This allows us to verify that your app is supported on the terminal.
- For use on S1E terminals, the app must be compatible with SDK version 25 or earlier.
- For use on S1F2 terminals, the app must be compatible with SDK version 28 or earlier.
- App version -
versionCodeof every release of your app in the Customer Area must be unique.
To keep the payment terminals as secure as possible, we allow only a carefully chosen set of app permissions. These permissions may differ from those on other Android devices that the app is deployed to.
These are the allowed app permissions:
|ACCESS_BACKGROUND_LOCATION||Allows access to location in the background.|
|ACCESS_COARSE_LOCATION||Allows access to approximate location.|
|ACCESS_FINE_LOCATION||Allows access to precise location.|
|ACCESS_MEDIA_LOCATION||Allows access to any geographic locations persisted in the user's shared collection.|
|ACCESS_NETWORK_STATE||Allows access to information about networks.|
|ACCESS_WIFI_STATE||Allows access to information about Wi-Fi networks.|
|BATTERY_STATS||Allows the app to collect battery statistics.|
|BLUETOOTH||Allows the app to connect to paired bluetooth devices.|
|BLUETOOTH_ADMIN||Allows the app to discover and pair bluetooth devices.|
|BROADCAST_STICKY||Allows the app to broadcast sticky intents.|
|CAMERA||Allows access to the camera device.|
|FLASHLIGHT||Deprecated flashlight permission - Covered by CAMERA.|
|FOREGROUND_SERVICE||Allows the app to use Service.startForeground.|
|GET_ACCOUNTS||Allows access to the list of accounts in the Accounts Service.|
|INTERNET||Allows the app to open network sockets.|
|READ_EXTERNAL_STORAGE||Allows the app to read from external storage.|
|READ_PHONE_STATE||Allows read-only access to phone state, including the current cellular network information, the status of any ongoing calls, and a list of any PhoneAccounts registered on the device.|
|RECEIVE_BOOT_COMPLETED||Allows the app to receive the Intent.ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting.|
|RECORD_AUDIO||Allows the app to record audio.|
|SET_ALARM||Allows the app to broadcast an Intent to set an alarm for the user.|
|USE_BIOMETRIC||Allows the app to use device-supported biometric modalities.|
|USE_FINGERPRINT||This permission was deprecated in API level 28. Apps should request USE_BIOMETRIC instead.|
|VIBRATE||Allows access to the vibration feature.|
|WAKE_LOCK||Allows using PowerManager WakeLocks to keep the processor from sleeping or the screen from dimming.|
|WRITE_EXTERNAL_STORAGE||Allows the app to write to external storage.|
If your app includes a permission that is not on the preceding list, the app will be marked as invalid when you upload it.
Android payment terminals come with certain limitations that you need to take into account:
- Launcher apps with the CATEGORY_HOME intent are not allowed.
- In the AndroidManifest.xml, the testOnly flag is not allowed.
- There is no debug mode on the terminal, but it is possible to pull logs from the terminal.
- From software version 1.69, the terminals support Webview 91.0.4472.88.
Older releases only support the old versions of Webview:
- S1E: 52.0.2743.100
- S1F2: 66.0.3359.158
- The terminals do not have a browser installed.
Debug and test
For security reasons, we can't enable USB debugging via Android Debug Bridge (adb) on our payment terminals. Therefore, it is not possible to debug your application directly on the terminal.
- To debug your Android app, install the app on a regular (non-payment) Android device that supports USB debugging, and debug the app using adb.
Upload the app to us, install the app on a test terminal, and carry out integration tests by sending Terminal API requests to the terminal through local or cloud communications.
If a bug occurs, it is possible to pull logs from the terminal. Contact our POS Support Team for help.
- For final integration testing, repeat the previous step using your live Customer Area and a live terminal.