# Apps on Devices Android POS アプリを Stripe のスマートリーダーにデプロイする方法についてご紹介します。 Apps on Devices は、すべてのユーザーが利用できるわけではありません。対面カード取引で [Standard 料金体系](https://stripe.com/pricing)をお支払いの場合、Apps on Devices は追加費用なしで利用できます。使用をご希望の場合は、[営業担当者にご連絡](https://stripe.com/contact/sales)のうえ、利用資格と料金を確認してください。営業担当者がいない場合は、[Stripe サポート](https://support.stripe.com)のフォームからこの機能の有効化をリクエストしてください。 これを利用するには、既存の Android ベースの POS アプリケーション、または Android アプリケーションを構築するためのリソースが必要です。ダイレクト支払いを使用する場合は、1 つのプラットフォームで連結アカウントを管理する必要があります。 Apps on Devices を使用して、お客様のデバイスで他のアプリとともに POS アプリケーションを実行します。POS アプリを Stripe スマートリーダーにデプロイして、オールインワンのソリューションを提供したり、別のデバイスで実行されている POS を利用する顧客向けの決済用アプリを構築したりすることができます。 Stripe は、Terminal SDK を使用してすべての決済を処理し、法令遵守に対応しています。Android と React Native の SDK は、Apps on Devices に対応しています。 Apps on Devices を使用すると、アプリのライフサイクルの重要なフェーズが有効になります。 1. [アプリの構築とテスト](https://docs.stripe.com/terminal/features/apps-on-devices/build.md) 1. [アプリの審査に向けて準備する](https://docs.stripe.com/terminal/features/apps-on-devices/app-review.md) 1. [アプリを提出する](https://docs.stripe.com/terminal/features/apps-on-devices/submit.md) 1. [選択したデバイスにアプリをデプロイする](https://docs.stripe.com/terminal/features/apps-on-devices/deploy-with-API.md) 1. [デプロイを監視する](https://docs.stripe.com/terminal/features/apps-on-devices/monitor.md) [サンプルアプリ](https://github.com/stripe-samples/terminal-apps-on-devices)をご覧になり、実装のベストプラクティス、支払いを回収して確定する方法などをご確認ください。 ## サポートされる実装 Apps on Devices は 2 つの導入形式をサポートしています。 - [Stripe スマートリーダーでの POS Android アプリ](https://docs.stripe.com/terminal/features/apps-on-devices/overview.md#pos-stripe-device) - [POS Android アプリと Stripe 互換リーダー上の顧客向けアプリの組み合わせ](https://docs.stripe.com/terminal/features/apps-on-devices/overview.md#pos-consumer-app) #### Stripe スマートリーダー上の POS アプリ この実装では、POS アプリと Stripe リーダーアプリの両方を Stripe スマートリーダーで実行します。デバイスが起動すると、Stripe リーダーのアプリではなく、お客様の POS アプリが起動します。取引が開始されると、Stripe のリーダーアプリがプライマリーになります。取引の終了時に、Stripe リーダーのアプリが終了し、POS アプリがプライマリーになります。 ![](https://b.stripecdn.com/docs-statics-srv/assets/apps-on-devices-pos-on-spos.d5f000091839ad34c7d963d7b365599b.png) #### Stripe スマートリーダーでの消費者向けアプリに対応する POS アプリ この実装では、POS アプリは Stripe スマートリーダーとは別のデバイスで実行されます。消費者向け Android アプリは Stripe スマートリーダーで実行され、支払い取引をサポートします。 POS アプリと消費者向けアプリ間の TCP/IP を介した通信は、お客様が管理します。 ![](https://b.stripecdn.com/docs-statics-srv/assets/apps-on-devices-app-on-cfd.9a008cbbeec4bd909ee061db638873b2.png) ## アプリの要件 アプリのリソースはデバイスの仕様による制限を受け、アプリの機能は標準的な Android 開発との相違によって抑制される場合があります。以下の要件内で操作されることにより、アプリを適切に実行できることを確認してください。 #### APK サイズの上限 Stripe API にアップロードする APK ファイルには、200MB のサイズの上限があります。 #### デバイスの仕様 - Verifone リーダーのハードウェア仕様については、[Verifone リーダーの設定](https://docs.stripe.com/terminal/payments/setup-reader/verifone.md)を参照してください。 - [Stripe Reader S700/S710](https://docs.stripe.com/terminal/payments/setup-reader/stripe-reader-s700-s710.md) のハードウェア仕様については、次の表を参照してください。 | | | | | CPU | Qualcomm Snapdragon 665 QCM6125 | | RAM | 4GB | | ストレージ | 64GB | | OS | Android 10 | | 画面の寸法 | 1080x1920 ピクセル | | 画面のピクセル密度 | 420dpi (xxhdpi) | #### デバイスのストレージ Stripe は、デバイスで実行されるすべてのアプリとソフトウェアコンポーネントの更新を無線で管理します。アプリがデバイスで使用するストレージが 8GB 以下であることを確認してください。 ## 標準的な Android との相違点 Stripe SmartPOS OS は、Android オープンソースプロジェクト (AOSP) に基づいて、セキュリティと PCI コンプライアンス向けに構築されています。これは、以下の点で標準的な消費者向け Android とは異なります。 - Google Play Services は、Stripe Android デバイスではご利用いただけません。Google Play Services SDK をアプリに連携させることはできますが、アプリが想定通りに機能することを検証する必要があります。たとえば、Firebase と Google Maps SDK は Stripe デバイスでは機能しません。 - 通知は無効になっており、デバイスユーザーはホーム画面にアクセスできません。お客様のアプリまたは Stripe リーダーのアプリのどちらかがプライマリーとして存続します。 - プロダクションデバイスでは USB ポートが無効になっています。また、[Android Debug Bridge](https://developer.android.com/studio/command-line/adb) (`adb`) およびデバッグは使用できません。 開発の目的には、[DevKit デバイス](https://docs.stripe.com/terminal/features/apps-on-devices/build.md)を使用できます。 ## Android の権限 インストール中に、Stripe SmartPOS OS はアプリのマニフェストで [Android の権限](https://developer.android.com/guide/topics/permissions/overview)を自動的に付与します。実行時にデバイスのユーザーが権限の承認を求められることはありません。アプリの権限は、許可された権限のリストと照合して確認され、許可リストを超えた権限をリクエストしたアプリは拒否されます。 | 権限 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [android.permission.ACCESS_ADSERVICES_AD_ID](https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/common/AdServicesPermissions#ACCESS_ADSERVICES_AD_ID) | | [android.permission.ACCESS_ADSERVICES_ATTRIBUTION](https://developer.android.com/design-for-safety/privacy-sandbox/reference/adservices/common/AdServicesPermissions#ACCESS_ADSERVICES_ATTRIBUTION) | | [android.permission.ACCESS_COARSE_LOCATION](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION) | | [android.permission.ACCESS_FINE_LOCATION](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION) | | [android.permission.ACCESS_NETWORK_STATE](https://developer.android.com/reference/android/Manifest.permission#ACCESS_NETWORK_STATE) | | [android.permission.ACCESS_WIFI_STATE](https://developer.android.com/reference/android/Manifest.permission#ACCESS_WIFI_STATE) | | [android.permission.BLUETOOTH](https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH) | | [android.permission.BLUETOOTH_ADMIN](https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_ADMIN) | | [android.permission.BLUETOOTH_ADVERTISE](https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_ADVERTISE) | | [android.permission.BLUETOOTH_CONNECT](https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_CONNECT) | | [android.permission.BLUETOOTH_SCAN](https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_SCAN) | | [android.permission.CAMERA](https://developer.android.com/reference/android/Manifest.permission#CAMERA) | | [android.permission.FOREGROUND_SERVICE](https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE) | | [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE](https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_CONNECTED_DEVICE) | | [android.permission.FOREGROUND_SERVICE_DATA_SYNC](https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_DATA_SYNC) | | [android.permission.FOREGROUND_SERVICE_SPECIAL_USE](https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE) | | [android.permission.INTERNET](https://developer.android.com/reference/android/Manifest.permission#INTERNET) | | [android.permission.NEARBY_WIFI_DEVICES](https://developer.android.com/reference/android/Manifest.permission#NEARBY_WIFI_DEVICES) | | [android.permission.NFC](https://developer.android.com/reference/android/Manifest.permission#NFC) | | [android.permission.POST_NOTIFICATIONS](https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS) | | [android.permission.READ_BASIC_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission#READ_BASIC_PHONE_STATE) | | [android.permission.READ_CONTACTS](https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS) | | [android.permission.READ_EXTERNAL_STORAGE](https://developer.android.com/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE) | | [android.permission.READ_MEDIA_AUDIO](https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_AUDIO) | | [android.permission.READ_MEDIA_IMAGES](https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_IMAGES) | | [android.permission.READ_MEDIA_VIDEO](https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_VIDEO) | | [android.permission.READ_PHONE_STATE](https://developer.android.com/reference/android/Manifest.permission#READ_PHONE_STATE) | | [android.permission.READ_PRIVILEGED_PHONE_STATE](https://source.android.com/docs/core/connect/device-identifiers) | | [android.permission.RECORD_AUDIO](https://developer.android.com/reference/android/Manifest.permission#RECORD_AUDIO) | | [android.permission.RECEIVE_BOOT_COMPLETED](https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED) | | [android.permission.SET_WALLPAPER](https://developer.android.com/reference/android/Manifest.permission#SET_WALLPAPER) | | [android.permission.USE_BIOMETRIC](https://developer.android.com/reference/android/Manifest.permission#USE_BIOMETRIC) | | [android.permission.USE_FINGERPRINT](https://developer.android.com/reference/android/Manifest.permission#USE_FINGERPRINT) | | [android.permission.VIBRATE](https://developer.android.com/reference/android/Manifest.permission#VIBRATE) | | [android.permission.WAKE_LOCK](https://developer.android.com/reference/android/Manifest.permission#WAKE_LOCK) | | [android.permission.WRITE_EXTERNAL_STORAGE](https://developer.android.com/reference/android/Manifest.permission#WRITE_EXTERNAL_STORAGE) | | [com.android.alarm.permission.SET_ALARM](https://developer.android.com/reference/android/Manifest.permission#SET_ALARM) | | [com.google.android.c2dm.permission.RECEIVE](https://developers.google.com/android/reference/com/google/android/gms/cloudmessaging/CloudMessagingReceiver) | | com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE | | com.google.android.gms.permission.AD_ID | > カメラ、Bluetooth、位置確認の機能はまだ実験的な段階にあり、テスト、検証が完了しておらず、Stripe の承認もまだ行われていません。そのためパフォーマンス、信頼性、安定性は保証されません。この機能はお客様の責任でご使用ください。 > > デバイスの NFC 機能は支払いのみに対応します。支払い関連以外の機能には使用できません。 ## Apps on Devices と Stripe Connect の互換性 Apps on Devices を使用するプラットフォームは、1 つのプラットフォームで管理されている[連結アカウント](https://docs.stripe.com/connect.md)にのみアプリをデプロイできます。[`controller.is_controller`](https://docs.stripe.com/api/accounts/object.md#account_object-controller-is_controller) プロパティが `true` の場合、連結アカウントはサポートされます。これにより、複数のプラットフォームで同じ連結アカウントにアプリをデプロイできなくなります。 ## 次のステップ - [アプリの構築とテスト](https://docs.stripe.com/terminal/features/apps-on-devices/build.md) - [アプリの審査に向けて準備する](https://docs.stripe.com/terminal/features/apps-on-devices/app-review.md)