Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
    Overview
    Accept in-person payments
    Integration design
    Select your reader
    Design an integration
    Quickstart
    Example applications
    Testing
    Terminal setup
    Set up your integration
    Connect to a reader
    Accepting a payment
    Collect card payments
    Additional payment methods
    Accept offline payments
    Mail order and telephone order payments
    Regional considerations
    During checkout
    Collect tips
    Collect and save payment details for future use
    Flexible authorizations
    After checkout
    Refund transactions
    Provide receipts
    Customize checkout
    Cart display
    Collect on-screen inputs
    Collect swiped data
    Collect tapped data for NFC instruments
    Apps on devices
      Build and test your app
      Prepare for app review
      Submit your app for review
      Deploy your app in the Dashboard
      Deploy your app with the API
      Monitor your deployment
      Troubleshooting
    Manage readers
    Order, return, replace readers
    Register readers
    Manage locations and zones
    Configure readers
    Encryption
    References
    API references
    Mobile readers
    Smart readers
    SDK migration guide
    Deployment checklist
    Stripe Terminal reader product sheets
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsTerminal

Apps on Devices

Learn about deploying your Android POS apps on Stripe smart readers.

Copy page

Contact sales

Apps on Devices is a paid feature that isn’t available to all users. If you’re interested in using it, contact your sales representative, and they’ll assess your eligibility.

To be eligible, you must have either an existing Android-based POS application or the resources to build an Android application. When using direct charges, a single platform must control your connected account.

Use Apps on Devices to run your point-of-sale (POS) application along with other apps on your device. You can deploy your POS app to Stripe smart readers to provide an all-in-one solution, or build a customer-facing app for payments, driven by your POS running on another device.

Stripe handles all payments and compliance with the Terminal SDK. Android and React Native SDKs support Apps on Devices.

Apps on Devices enables the key phases of your app lifecycle:

  1. Build and test your app
  2. Prepare for app review
  3. Submit your app
  4. Deploy your app to selected devices
  5. Monitor deployment

View the sample app to learn integration best practices, how to collect and confirm a payment, and more.

Supported integrations

Apps on Devices supports two types of integrations:

  • POS Android app on a Stripe smart reader
  • POS Android app paired with consumer-facing app on a Stripe smart reader

Point-of-sale app on a Stripe smart reader

In this integration, both your POS app and the Stripe Reader app run on a Stripe smart reader. When the device starts, it launches your POS app instead of the Stripe Reader app. When initiating a transaction, the Stripe Reader app becomes the primary. At the end of the transaction, the Stripe Reader app finishes and your POS app becomes the primary.

Point-of-sale app paired with consumer-facing app on a Stripe smart reader

In this integration, your POS app runs on a device that’s separate from the Stripe smart reader. Your consumer-facing Android app runs on the Stripe smart reader and supports the payment transaction.

You manage the communication between your POS app and consumer-facing app over TCP/IP.

App requirements

App resources are limited by the device specs, and app functionality might be constrained by differences from standard Android development. Make sure your app can run successfully by operating within the requirements below.

APK size limit

APK files that you upload to the Stripe API have a 200MB size limit.

Device specs

The Stripe Reader S700 has the following hardware specifications:

CPUQualcomm Snapdragon 665 QCM6125
RAM4GB
Storage64GB
OSAndroid 10
Screen dimensions1080x1920 pixels
Screen pixel density420dpi (xxhdpi)

Device storage

Stripe manages updates over the air for all apps and software components that run on the device. Make sure your app uses 8GB or less of storage on the device.

Differences from standard Android

The Stripe SmartPOS OS is built for security and PCI-compliance based on the Android Open Source Project (AOSP). It differs from standard consumer Android in the following ways:

  • Google Play Services aren’t available on Stripe Android devices. You can integrate Google Play Services SDKs in your app, but you must verify that your app functions as expected. For example, parts of Firebase and Google Maps SDKs won’t function on Stripe devices.
  • Notifications are disabled and the device user can’t access the home screen. Either your app or the Stripe reader app persists as the primary.
  • Production devices have a disabled USB port. Additionally, Android Debug Bridge (adb) and debugging aren’t available.

You can use a DevKit device for development purposes.

Android permissions

During installation, the Stripe SmartPOS OS automatically grants Android permissions in your app’s manifest. The device user isn’t prompted for permission approval at runtime. Your app’s permissions are verified against the allowed permissions list, and apps requesting permissions in excess of the allowlist are rejected.

Permission
android.permission.ACCESS_ADSERVICES_AD_ID
android.permission.ACCESS_ADSERVICES_ATTRIBUTION
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BLUETOOTH_ADVERTISE
android.permission.BLUETOOTH_CONNECT
android.permission.BLUETOOTH_SCAN
android.permission.CAMERA
android.permission.FOREGROUND_SERVICE
android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE
android.permission.FOREGROUND_SERVICE_DATA_SYNC
android.permission.FOREGROUND_SERVICE_SPECIAL_USE
android.permission.INTERNET
android.permission.NEARBY_WIFI_DEVICES
android.permission.NFC
android.permission.POST_NOTIFICATIONS
android.permission.READ_BASIC_PHONE_STATE
android.permission.READ_CONTACTS
android.permission.READ_EXTERNAL_STORAGE
android.permission.READ_MEDIA_AUDIO
android.permission.READ_MEDIA_IMAGES
android.permission.READ_MEDIA_VIDEO
android.permission.READ_PHONE_STATE
android.permission.READ_PRIVILEGED_PHONE_STATE
android.permission.RECORD_AUDIO
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.SET_WALLPAPER
android.permission.USE_BIOMETRIC
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_EXTERNAL_STORAGE
com.android.alarm.permission.SET_ALARM
com.google.android.c2dm.permission.RECEIVE
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
com.google.android.gms.permission.AD_ID

Caution

The camera, Bluetooth, and location capabilities and APIs are still in the experimental phase and haven’t been fully tested, validated, and approved by Stripe. Their performance, reliability, and stability aren’t guaranteed. Use this functionality at your discretion.

The NFC functionality in the devices only supports payments—it can’t be used for non-payment related features.

Apps on Devices and Stripe Connect compatibility

Platforms using Apps on Devices can deploy apps only to connected accounts that are controlled by a single platform. A connected account is supported if its controller.is_controller property is true. That prevents multiple platforms from deploying apps to the same connected account.

Next steps

  • Build and test your app
  • Prepare for app review
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc