Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

販売店デモモード

Android 7.1.1 以降では、販売店モードのシステムレベルのサポートが提供されており、ユーザーはデバイスの実際の動作を簡単に確認できます。Android 8.1 ではこのサポートが更新され、デバイス ポリシー マネージャーを使用してデモユーザーを作成できるようになりました。これにより、標準の販売店モードに対する OEM のカスタマイズが大幅に強化されます。

Android 8.1 以降

Android 8.1 は、デバイス ポリシー マネージャーを使用した販売店でのユーザーへのデバイス機能のデモをサポートしています。8.1 より前のバージョンでもデバイス ポリシー マネージャーの API を使用できますが、createAndManageUser でデモタイプのユーザーを作成することはできません。

実装

プロビジョニング

プロビジョニング前に、Settings.Global.DEVICE_DEMO_MODE を 1 に設定して、デバイスを販売店モードにする必要があることを示します。システム サーバーは、このフラグを使用して、電力プロファイルなどの販売店モードのさまざまな側面を管理します。また、販売店の従業員は、デモアプリにデバイスの所有権を付与する必要があります。一度ユーザーの設定が完了すると、デバイスの所有者を設定することはできなくなります。

デモアプリの作成

デバイス所有者アプリは、システム イメージに昇格された権限やプリインストールを必要としません。大部分は従来のアプリのように実装されていますが、次の点が異なります。

  • すべてのデバイス所有者アプリは、すべてのデバイス ポリシー マネージャー API の認証トークンとして機能する DeviceAdminReceiver コンポーネントを拡張する必要があります。このコンポーネントは、android.permission.BIND_DEVICE_ADMIN 権限を保持し、リクエストされた特別なポリシーをメタデータとして含み、android.app.action.PROFILE_PROVISIONING_COMPLETE および android.app.action.DEVICE_ADMIN_ENABLED インテントをフィルタする必要があります。
  • 特別なデモタイプのユーザーを作成するために設定される DevicePolicyManager#MAKE_USER_DEMO フラグは、非表示 API です。このフラグは定数 0x4 です。
  • デバイスの所有権は、管理対象プロビジョニングを介してのみ割り当てることができます。

デバイス ポリシー マネージャー

デバイス ポリシー マネージャー API は、自動的に許可されるパッケージのインストールを除いて、すべてのデバイス所有者(DO)権限とプロファイル所有者(PO)権限を付与します。DO と関連付けられた PO は、DO にのみ付与される権限に AIDL インターフェースを使用してアクセスできます。利用できる機能には次のようなものがあります。

  • ユーザーを作成する。DevicePolicyManager を通じて作成されたユーザーは、自動的に PO として設定されます。
  • ユーザーを切り替える。
  • 権限ポリシーを PERMISSION_POLICY_AUTO_GRANT に設定して、すべての実行時の権限を自動的に付与する。また、権限は、1 つのアプリに対して 1 つの権限など、より絞り込んで付与することもできます。これは、ユーザーがユーザーごと、アプリごとに付与する必要がある Appops の権限には適用されません。
  • ユーザー制限を追加する。販売店モードに関連する制限には以下のものがありますが、これらに限定されません。
    • DISALLOW_MODIFY_ACCOUNTS
    • DISALLOW_USB_FILE_TRANSFER
    • DISALLOW_DEBUGGING_FEATURES
    • DISALLOW_CONFIG_WIFI
    • DISALLOW_CONFIG_BLUETOOTH
    • DISALLOW_INSTALL_UNKNOWN_SOURCES
    • DISALLOW_CONFIG_MOBILE_NETWORKS
  • 自動システム アップデートを有効にする。デバイスは OTA アップデートを自動的にダウンロードして適用します。
  • LockTask を許可するパッケージを設定する。
  • デバイスを出荷時の設定にリセットする。
  • キーガードを無効にする。
  • パスワードや指紋の設定を禁止する。
  • Wi-Fi ネットワークの変更を管理する。DISALLOW_CONFIG_WIFI ユーザー制限で使用すると、デバイス所有者アプリは Wi-Fi ネットワーク選択設定へのアクセスを制御できます。
  • デバイスを再起動する。
  • PackageInstaller からパッケージをインストールする。
  • Settings.GlobalSettings.Secure、および Settings.System 設定のホワイトリスト セットを設定する。
  • パッケージのアンインストールをブロックする。

サンプルと関連リソース

検証

販売店デモモードはオプション機能であるため、CTS の対象外となります。テストは手動で行うか、デモアプリの単体テストで実施する必要があります。

Android 8.0 以前

Android 7.1.1 では、販売店デモモードが導入され、デモ動画を再生するためのシンプルな API が提供されました。この実装は Android 8.1 では削除されています。

ライフサイクル

販売店デモモードのフロー

図 1. 言語の選択画面での販売店デモモードのオプション

設定ウィザード(SUW)

販売店の従業員は、設定ウィザードの最初の画面で、言語のリストの下部にある [販売店デモ] を選択して販売店モードを直接有効にできます。このオプションは、出荷されたばかりの新しいデバイスで利用できます。一度ユーザー設定が完了すると、販売店モードは利用できなくなります。選択後、デバイスは SUW を短縮フローで終了します。

販売店デモのウィザードの使用

図 2. 言語の選択画面での販売店デモモードのオプション

ゲスト セッション

デバイスが販売店モードになると、新しいデモユーザーに切り替わり、(実装のセクションで説明されているように)オーバーレイ リソースで指定されたカスタム ランチャーが自動的に起動します。デフォルトでは、ユーザーが画面に触れてゲスト セッションを開始するまで、このカスタム ランチャーはデモ動画を繰り返し再生します。 その時点で、カスタム ランチャーはシステム ランチャーを起動して、終了します。 OEM は、カスタム ランチャーを変更して、終了時に別のサービスやアクティビティを追加で起動できます。詳しくは、実装のセクションをご覧ください。

販売店モードの完全性を維持するため、キーガードは無効になり、販売店モードに悪影響を及ぼす可能性のある以下のようなクイック設定の特定の操作も禁止されます。

  • 機内モードの切り替え
  • Wi-Fi アクセス ポイントの削除または変更(設定)
  • 携帯通信会社の変更(設定)
  • アクセス ポイントの設定(設定)
  • ユーザーの切り替え

また、無効にすることで販売店モードに影響を及ぼす可能性のある次のグローバル設定へのアクセスもブロックされます。

  • Wi-Fi 設定
  • モバイル ネットワーク設定オプション、特にアクセス ポイント
  • Bluetooth 設定
  • バックアップとリセット、日付と時刻、モバイル ネットワーク(一切表示されません)

ユーザーが一定の時間(デフォルトでは 90 秒間)操作しなかった場合、販売店モードではセッションを終了するか続行するかをユーザーに尋ねるシステム ダイアログが表示されます。ユーザーが終了を選択した場合や 5 秒間応答がなかった場合、販売店モードは現在のデモユーザーを強制終了 / ワイプして、新しいデモユーザーに切り替え、元の動画を再びループ再生します。電源ボタンを使って画面をオフにすると、数秒後に自動的にオンに戻ります。

デモセッションが終了すると、デバイスは自動でミュートされ、次のようなグローバル設定がリセットされます。

  • 明るさ
  • 自動回転
  • ライト
  • 言語
  • ユーザー補助

販売店モードの終了

販売店モードを終了するには、販売店の従業員は、デバイスをブートローダーから出荷時の設定にリセットする必要があります。

例とソース

動画をループ再生するカスタム ランチャーを次の場所で探します。

/packages/apps/RetailDemo

実装

RetailDemoModeService の有効化

設定ウィザードは、グローバル設定 Global.DEVICE_DEMO_MODE=true を設定して、デバイスが販売店モードになったことを示します。この設定に基づいて、RetailDemoModeService は、ユーザー 0 が開始される際にデモユーザーを作成して切り替え、オーバーレイ リソースで指定されたカスタム ランチャーを有効にし、SUW を無効にします。システム サーバーと SystemUI も、このフラグを使用して販売店モードのさまざまな側面を管理します。

カスタム ランチャーまたは動画プレーヤーの設定

OEM は、/frameworks/base/core/res/res/config.xml で指定されたフレームワーク リソース config_demoModeLauncherComponent をオーバーライドしてカスタム ランチャーを指定します。

たとえば、次のようにします。

<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>

/packages/apps/RetailDemo にある販売店デモ DemoPlayer アプリは、Android オープンソース プロジェクト(AOSP)のデフォルトのカスタム ランチャーです。アプリは /data/preloads/demo/retail_demo.mp4 で動画を探して、ループ再生します。ユーザーが画面に触れると、カスタム ランチャーがそのアクティビティ コンポーネントを無効にします。その結果、デフォルトのシステム ランチャーが起動します。

カスタム ランチャーは、デモ以外のシナリオでは表示されないように、そのカスタム コンポーネントをデフォルトで無効にする必要があります。デモのシナリオでは、システム サーバーは新しいデモセッションが開始すると、指定した config_demoModeLauncherComponent を有効にします。

また、設定ウィザードは、販売店モードに入ることを示すしるしとなる上記の動画を探します。動画がデモに含まれない場合は、販売店モードがサポートされていることを示す他の OEM 固有のしるしを探すように SUW を変更できます。

システム A/B パーティションがある場合、動画はシステム B パーティションの /preloads/demo に含まれている必要があります。これは、最初の起動時に /data/preloads/demo にコピーされます。

販売店モード固有の設定を行うには、Settings.Global.retail_demo_mode_constants を使用します。例: user_inactivity_timeout_ms=90000,warning_dialog_timeout_ms=10000

注: 90,000 ミリ秒が現在のタイムアウトのデフォルトですが、設定はカスタマイズ可能です。

サンプル画像の検索

この機能により、ギャラリー アプリに表示される特別なフォルダにサンプル写真を配置できます。写真はデモモードでのみ表示され、保護されたディレクトリにあるため、デモユーザーは変更できません。

Google アカウントの回避

ゲストユーザーには、アプリとユーザーが特定の操作を実行できないようにする管理対象のデバイス ポリシーやプロファイル ポリシーに類似した、特定の制限が設定されています。その制限の一つに DISALLOW_MODIFY_ACCOUNTS があります。 この制限により、AccountManager と設定にはアカウントを追加できません。一部の Google アプリは、この制限に反応してエラー メッセージを表示し、他のアプリ(YouTube やフォトなど)では、アカウントが求められなくなります。

OEM アプリは DISALLOW_MODIFY_ACCOUNTS が設定されているかどうかも確認する必要があります。しかしこれは一般的な問題で、販売店モードに固有の問題ではありません。企業でのユースケースですでに解決されている可能性があります。

システム ランチャーのカスタマイズ

OEM は自由にレイアウトを選択できますが、ホーム画面やホットシートには適切に機能するアプリを含める必要があります。

組み込みアプリの販売店デモモード向けのカスタマイズ

組み込みアプリには、販売店デモモード向けにカスタマイズした機能を含めることができます。これは、API UserManager.isDemoUser() を呼び出して、アプリがデモ環境で起動されているかどうかを確認することで実現できます。

デモ動画に関するガイドラインの遵守

デモ動画は縦向きのレイアウト(またはタブレットの場合はデバイスの自然な向き)で、5 秒を超える長さにする必要があります。表示するコンテンツは、24 時間年中無休で再生しても焼き付きが起こらないものにする必要があります。

メンテナンス

デバイスの販売店モードの解除

ブートローダーから出荷時の設定にリセットすることでのみ可能です。

システム ソフトウェアの自動 OTA

デフォルトでは、販売店モードが有効になっている場合、デバイス ポリシーが自動的に無線(OTA)アップデートに設定されます。販売店のデバイスは、オプションと指定されていても、確認なしにアップデートのダウンロード、再起動、インストールを行います(電池のしきい値を尊重します)。

注意: OTA にシステム A/B パーティションを使用していて、OTA を受信した場合、デバイスはシステム B パーティションで元の販売店モードのリソースを検出できなくなります。したがって、その後に出荷時の設定にリセットすると、販売店モードに戻れなくなります。

ウェブを介したデモ動画の更新

/packages/apps/RetailDemo の RetailDemo アプリは、ネットワーク接続がある場合にデモ動画を更新できます。動画をダウンロードするための URL は、RetailDemo アプリで次の文字列値をオーバーライドすることで設定できます。

<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>

地域ごとに異なる動画を使用する必要がある場合は、ロケール固有の文字列リソース res/values-*/strings.xml. を使用して、異なるダウンロード URL を設定できます。たとえば、米国と英国で異なる動画を使用する必要がある場合、対応するダウンロード URL をそれぞれ res/values-en-rUS/strings.xmlres/values-en-rGB/strings.xml で指定できます。

res/values-en-rUS/strings.xml 内:

<string name="retail_demo_video_download_url">download URL for US video goes here</string>

同様に res/values-en-rGB/strings.xml 内:

<string name="retail_demo_video_download_url">download URL for UK video goes here</string>

この動画はデバイスを再起動するたびに最大で 1 回ダウンロードされます。デバイスの動画の再生中、RetailDemo アプリは、ダウンロード URL が提供されていないか、その URL の動画が再生中の動画よりも新しいかどうかをバックグラウンドで確認します。

新しい場合、RetailDemo アプリはこの動画をダウンロードして再生を開始します。この動画がダウンロードされると、今後のデモセッションでの再生に使用されます。次回の再起動後まで確認は行われません。