Розничный демонстрационный режим

Android 7.1.1 представила поддержку на системном уровне для режима розничной демонстрации, чтобы клиенты могли изучить устройства в действии в розничных магазинах. Устройства настраиваются для розничной демонстрации с помощью приложения владельца устройства, чтобы гарантировать, что использование устройства ограничено только определенными приложениями демонстрационного режима. Конечные пользователи не должны иметь возможности добавлять личную учетную запись на розничном демонстрационном устройстве. Android 8.1 пересматривает эту поддержку для создания пользователей демонстрации с помощью API DevicePolicyManager createAndManageUser . Это обеспечивает гораздо большую настройку OEM для стандартного розничного режима с точки зрения управления пользователями и управления политикой устройства на демонстрационном устройстве.

Хотя API-интерфейсы DevicePolicyManager можно использовать в версиях до Android 8.1, пользователей демонстрационного типа ( DevicePolicyManager.MAKE_USER_DEMO ) нельзя создавать с помощью API createAndManageUser в версиях 8.0 и более ранних.

Реализация в Android 8.1 и более поздних версиях

В этом разделе рассматриваются усовершенствования платформы и описывается демонстрационное приложение для розничной продажи на базе Android 8.1 и более поздних версий.

Изменения платформы

Установить DEVICE_DEMO_MODE

Устройства, реализующие режим розничной демонстрации на основе владельца устройства, должны установить Settings.Global.DEVICE_DEMO_MODE на 1 перед подготовкой, чтобы указать, что устройство подготавливается для режима розничной демонстрации. SystemServer использует этот флаг для управления аспектами режима розничной торговли, такими как профиль питания и SystemUI.

Включить RetailDemoModeService

В устройствах, реализующих режим розничной демонстрации, мастер настройки устанавливает глобальный параметр Global.DEVICE_DEMO_MODE в true , чтобы указать, что устройство перешло в режим розничной торговли. Увидев этот параметр, RetailDemoModeService создает пользователя demo и переключается на него при запуске пользователя 0, включает пользовательский лаунчер, указанный в ресурсе наложения, и отключает SUW. System Server и SystemUI также используют этот флаг для управления аспектами режима розничной торговли.

Установить пользовательский лаунчер или видеоплеер

Производители устройств могут указать собственный модуль запуска, переопределив ресурс фреймворка config_demoModeLauncherComponent указанный в файле config.xml , следующим образом.

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

Розничное демо-приложение DemoPlayer, расположенное в /packages/apps/RetailDemo, является пользовательским лаунчером по умолчанию в Android Open Source Project (AOSP). Приложение ищет видео в разделе устройства, например /data/preloads/demo/retail_demo.mp4, и воспроизводит его в цикле. Когда пользователь касается экрана, пользовательский лаунчер отключает свой компонент активности, что приводит к запуску системного лаунчера по умолчанию.

Пользовательский лаунчер должен иметь свой пользовательский компонент, помеченный как отключенный по умолчанию, чтобы он не отображался в недемонстрационных сценариях. В демонстрационном сценарии System Server включает указанный config_demoModeLauncherComponent при запуске нового демонстрационного сеанса.

Мастер настройки также ищет ранее упомянутое видео, чтобы предоставить возможность войти в розничный режим. SUW можно изменить для поиска какого-либо другого специфичного для OEM признака того, что розничный режим поддерживается, если видео не является частью демонстрации. Если есть разделы системы A/B, раздел системы B должен содержать демонстрационное видео в /preloads/demo. Оно копируется в /data/preloads/demo при первой загрузке.

Настройте предварительно загруженные приложения для демонстрационного режима розничной торговли

Предварительно загруженные приложения можно настроить для режима розничной демонстрации, вызвав API UserManager.isDemoUser() чтобы проверить, запущено ли приложение в демонстрационной среде.

Определенные ограничения устанавливаются в демо-пользователе, аналогично политикам управляемых устройств или профилей, которые запрещают приложениям и пользователям выполнять определенные операции. Одним из таких ограничений является DISALLOW_MODIFY_ACCOUNTS . С этим ограничением AccountManager и Settings не позволяют добавлять учетные записи. Некоторые приложения Google реагируют на это ограничение и показывают сообщение об ошибке, а другие не запрашивают учетную запись (например, YouTube и Photos). Мы рекомендуем, чтобы OEM-приложения также проверяли, установлено ли DISALLOW_MODIFY_ACCOUNTS , и обрабатывали сценарий соответствующим образом.

Обновления системы

По умолчанию, когда включен режим розничной торговли, политика устройства настроена на автоматическое обновление по воздуху (OTA). Розничные устройства будут загружать, перезагружать и устанавливать обновление (соблюдая пороговые значения батареи) без взаимодействия с пользователем.

Розничное демо-приложение

Реализация режима розничной демонстрации на основе владельца устройства требует, чтобы приложение Device Policy Controller было установлено в качестве владельца устройства. AOSP содержит справочную реализацию приложения RetailDemo в /packages/apps/RetailDemo .

Приложения владельца устройства не требуют повышенных привилегий или предварительной установки на образе системы и могут быть загружены во время процесса настройки или подготовки. Они в основном реализованы как традиционные приложения, со следующими отличиями:

  • Все приложения владельца устройства должны расширять компонент DeviceAdminReceiver , который служит токеном авторизации для всех API DevicePolicyManager . Компонент должен содержать разрешение android.permission.BIND_DEVICE_ADMIN , включать запрошенные специальные политики в качестве метаданных и фильтровать намерения android.app.action.PROFILE_PROVISIONING_COMPLETE и android.app.action.DEVICE_ADMIN_ENABLED .

  • Флаг DevicePolicyManager#MAKE_USER_DEMO , который устанавливается для создания специальных пользователей демо-типа, является скрытым API. Этот флаг имеет значение константы 0x4.

  • Право собственности на устройство должно быть назначено только через держателя роли управления устройством или приложение ManagedProvisioning .

API в классе DevicePolicyManager позволяют владельцу устройства (DO) и владельцу профиля (PO) применять различные политики устройств. Некоторые из функций DevicePolicyManager , применимые для режима розничной демонстрации, перечислены ниже.

  • Создавайте и управляйте пользователями.

  • Перезагрузите устройство.

  • Установите разрешенные пакеты LockTask.

  • Установка пакетов через PackageInstaller .

  • Блокировать удаление пакетов.

  • Включить автоматическое обновление системы. Устройства будут автоматически загружать и применять обновления OTA.

  • Отключите блокировку клавиатуры.

  • Запретите установку паролей или отпечатков пальцев.

  • Установите разрешенный набор настроек Settings.Global , Settings.Secure и Settings.System .

  • Установите политику разрешений на PERMISSION_POLICY_AUTO_GRANT , которая автоматически предоставляет все разрешения времени выполнения. Разрешения также могут быть предоставлены более узко: одно разрешение для одного приложения. Это не относится к разрешениям app-ops, которые пользователи по-прежнему должны предоставлять на основе пользователя и приложения.

  • Установите ограничения для пользователей, относящиеся к розничному режиму, как определено в UserManager , следующим образом.

    • DISALLOW_MODIFY_ACCOUNTS
    • DISALLOW_USB_FILE_TRANSFER
    • DISALLOW_DEBUGGING_FEATURES
    • DISALLOW_CONFIG_WIFI
    • DISALLOW_CONFIG_BLUETOOTH
    • DISALLOW_INSTALL_UNKNOWN_SOURCES
    • DISALLOW_CONFIG_MOBILE_NETWORKS

Обновите демо-видео через Интернет

Приложение RetailDemo в /packages/apps/RetailDemo имеет возможность обновлять демо-видео при наличии сетевого подключения. URL-адрес для загрузки видео можно настроить, переопределив следующее строковое значение в приложении RetailDemo.

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

Если в разных регионах необходимо использовать разные видео, можно настроить разные URL-адреса загрузки с помощью локальных строковых ресурсов в res/values-*/strings.xml . Например, если в США и Великобритании необходимо использовать разные видео, можно разместить соответствующие URL-адреса загрузки в res/values-en-rUS/strings.xml и res/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>
    

Это видео загружается максимум один раз за каждую перезагрузку устройства. Когда видео на устройстве воспроизводится, приложение RetailDemo проверяет в фоновом режиме, указан ли URL-адрес загрузки и является ли видео по этому URL-адресу более новым, чем воспроизводимое.

Если это так, приложение RetailDemo загружает и начинает воспроизводить видео. После загрузки видео оно используется для воспроизведения во всех последующих демонстрационных сеансах. Ни одна из проверок не повторяется до следующей перезагрузки.

Руководство по демонстрационному видео

Демонстрационные видео должны быть в портретной ориентации или, если это планшет, в естественной ориентации устройства, и могут быть любой продолжительности более пяти секунд. Контент не должен приводить к выгоранию, так как он будет воспроизводиться постоянно при отображении.

Дополнительную информацию см. в определениях пользователей, профилей и учетных записей для разработчиков Android , документации API Device Policy Manager и приложении Sample Device Owner .

Проверка

CTS не охватывает режим розничной демонстрации, поскольку это необязательная функция. Тестирование должно проводиться вручную или с помощью модульных тестов для демонстрационного приложения.

Демонстрационная сессия

Настройка демо-сессии

Устройства для демонстрации в розничной торговле могут загружаться в режиме демонстрации в розничной торговле, если они настроены для демонстрационного режима на заводе. В качестве альтернативы сотрудники розничной торговли могут включить режим розничной торговли непосредственно из мастера настройки.

Retail demo mode

Рисунок 2. Режим розничной демонстрации

Демонстрационная сессия

Когда устройство переходит в режим розничной торговли, оно переключается на нового пользователя демо и автоматически запускает пользовательский лаунчер, указанный в ресурсе оверлея, как описано в разделе Реализация . По умолчанию этот пользовательский лаунчер воспроизводит демо-видео на повторе, пока пользователь не коснется экрана, чтобы начать сеанс демо-пользователя. В это время пользовательский лаунчер запускает системный лаунчер и затем завершает работу. OEM-производители могут изменять пользовательский лаунчер, чтобы дополнительно запускать другую службу или действие при выходе.

Для поддержания целостности режима розничной торговли отключена защита клавиатуры, а также запрещены некоторые действия из быстрых настроек, которые могут негативно повлиять на режим розничной торговли, включая следующие.

  • Переключение режима полета.
  • Удаление или изменение точек доступа Wi-Fi (Настройки).
  • Смена оператора (Настройки).
  • Настройка точки доступа (Настройки).
  • Переключение пользователей.

Кроме того, доступ к некоторым глобальным настройкам, которые могут повлиять на розничный режим, также блокируется путем отключения следующих функций:

  • Настройки Wi-Fi.
  • Параметры конфигурации сотовой сети, в частности точек доступа.
  • Конфигурация Bluetooth.
  • Резервное копирование и сброс, Дата и время и Мобильные сети (они вообще не отображаются).

Если пользователь бездействует в течение некоторого времени (по умолчанию 90 секунд), режим розничной торговли отображает системный диалог, предлагающий пользователю либо выйти из сеанса, либо продолжить. Если пользователь выбирает выход или если в течение пяти секунд нет ответа, режим розничной торговли удаляет текущего пользователя демо, переключается на нового пользователя демо и снова циклически воспроизводит исходное видео. Если экран выключается с помощью кнопки питания, он автоматически включается через несколько секунд.

После выхода из демонстрационного сеанса устройства отключают звук и сбрасывают некоторые глобальные настройки, включая следующие:

  • Яркость
  • Автоповорот
  • Фонарик
  • Язык
  • Доступность

Выйти из демонстрационного режима розничной торговли

Чтобы выйти из режима розничной торговли, сотрудники розничной торговли должны убедиться, что демонстрационное устройство не зарегистрировано в системе управления устройствами, и выполнить сброс настроек устройства до заводских через загрузчик.