Android 7.1.1에는 고객이 소매 매장에서 작동하는 기기를 살펴볼 수 있도록 소매 데모 모드를 위한 시스템 수준의 지원이 도입되었습니다. 기기 소유자 앱으로 소매 데모에 맞게 기기를 설정하여 기기 사용이 특정 데모 모드 앱 전용으로 제한되도록 합니다. 소매 데모 기기에는 최종 사용자가 개인 계정을 추가할 수 없어야 합니다. Android 8.1은 DevicePolicyManager의 createAndManageUser API를 통해 데모 사용자를 생성할 수 있도록 이 지원을 수정합니다. 이렇게 하면 데모 기기의 사용자 관리 및 기기 정책 관리 측면에서 표준 전시 모드에 훨씬 더 많은 OEM 맞춤설정을 적용할 수 있습니다.
DevicePolicyManager API는 Android 8.1보다 낮은 버전에서 사용할 수 있지만, demo-type 사용자(DevicePolicyManager.MAKE_USER_DEMO
)는 버전 8.0 이하에서 createAndManagerUser API로 만들 수 없습니다.
Android 8.1 이상에서의 구현
이 섹션에서는 Android 8.1 이상에서의 주요 플랫폼 개선사항과 소매 데모 앱을 설명합니다.
플랫폼 변경사항
DEVICE_DEMO_MODE 설정
기기 소유자 기반의 소매 데모 모드를 구현하는 기기는 프로비저닝 전에 Settings.Global.DEVICE_DEMO_MODE
를 1로 설정하여 이 기기가 소매 데모 모드로 프로비저닝되어 있음을 나타내야 합니다.
SystemServer는 이 플래그를 사용하여 전시 모드 관점에서 여러 사항을 관리합니다(예: 전력 프로필, SystemUI).
RetailDemoModeService 사용 설정
소매 데모 모드를 구현하는 기기에서는 설정 마법사가 전역 설정 Global.DEVICE_DEMO_MODE
를 true
로 설정하여 기기가 전시 모드로 전환되었음을 나타냅니다. RetailDemoModeService는 이 설정을 확인하면 데모 사용자를 만들고 사용자 0이 시작할 때 데모 사용자로 전환합니다. 그런 다음, 오버레이 리소스에 지정된 맞춤 런처를 사용 설정하고 SUW를 사용 중지합니다. 시스템 서버 및 SystemUI 또한 이 플래그를 사용하여 전시 모드 관점에서 여러 사항을 관리합니다.
맞춤 런처 또는 동영상 플레이어 설정
기기 제조업체는 다음과 같이 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
를 사용 설정합니다.
또한 설정 마법사는 앞서 언급한 동영상을 찾아 전시 모드 전환을 위한 어포던스를 제공합니다. SUW는 동영상이 데모의 일부가 아닐 경우 전시 모드가 지원된다는 다른 OEM 관련 신호를 찾도록 수정될 수 있습니다. 시스템 A/B 파티션이 있는 경우 시스템 B 파티션은 /preloads/demo에 데모 동영상을 포함해야 합니다. 이는 최초 부팅 시 /data/preloads/demo에 복사됩니다.
소매 데모 모드용 미리 로드된 앱 맞춤설정
미리 로드된 앱은 앱이 데모 환경에서 실행되는지를 확인하기 위해 UserManager.isDemoUser()
API를 호출하여 소매 데모 모드용 환경을 맞춤설정할 수 있습니다.
앱 및 사용자가 특정 작업을 실행할 수 없도록 차단하는 관리 기기/프로필 정책과 마찬가지로 데모 사용자에게도 특정 제한사항이 적용됩니다.
이러한 제한사항 중 하나는 DISALLOW_MODIFY_ACCOUNTS
입니다. 이 제한사항이 적용되면 AccountManager 및 Settings에서 계정 추가를 허용하지 않습니다. 일부 Google 앱은 이러한 제한사항에 반응하여 오류 메시지를 표시하며, 다른 앱(예: YouTube 및 포토)은 계정과 관련된 메시지를 표시하지 않습니다. OEM 앱도 DISALLOW_MODIFY_ACCOUNTS
가 설정되어 있는지 확인하고 그에 따라 시나리오를 처리하는 것이 좋습니다.
시스템 업데이트
기본적으로 전시 모드가 사용 설정되면 기기 정책이 무선 업데이트(OTA)로 자동 설정됩니다. 소매 기기는 사용자 상호작용 없이 업데이트를 다운로드하고 재부팅하고 설치합니다(배터리 잔량 준수).
소매 데모 앱
기기 소유자 기반의 소매 데모 모드 구현에서는 기기 정책 컨트롤러 앱을 기기 소유자로 설정해야 합니다. 참조용 RetailDemo 앱 구현은 AOSP의 /packages/apps/RetailDemo에 포함됩니다.
기기 소유자 앱은 승격된 권한이나 시스템 이미지에 사전 설치가 필요하지 않으며 설정 또는 프로비저닝 프로세스 중에 다운로드할 수 있습니다. 대부분 기존 앱처럼 구현되지만 다음과 같은 차이점이 있습니다.
모든 기기 소유자 앱은 모든 DevicePolicyManager 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입니다.
기기 소유권은 기기 관리 역할 보유자 또는 ManagedProvisioning 앱을 통해서만 할당해야 합니다.
DevicePolicyManager 클래스의 API를 사용하면 기기 소유자(DO)와 프로필 소유자(PO)가 다양한 기기 정책을 시행할 수 있습니다. 소매 데모 모드에 적용할 수 있는 DevicePolicyManager 기능 중 일부는 다음과 같습니다.
사용자를 만들고 관리합니다.
기기를 재부팅합니다.
LockTask에서 허용하는 패키지를 설정합니다.
PackageInstaller를 통해 패키지를 설치합니다.
패키지가 설치 제거되지 않도록 차단합니다.
자동 시스템 업데이트를 사용 설정합니다. 기기에서 자동으로 OTA 업데이트를 다운로드하여 적용합니다.
키가드를 사용 중지합니다.
비밀번호 또는 지문 설정을 방지합니다.
Settings.Global, Settings.Secure, Settings.System 설정의 허용 목록 세트를 설정합니다.
권한 정책을
PERMISSION_POLICY_AUTO_GRANT
로 설정하여 모든 런타임 권한을 자동으로 부여합니다. 권한은 범위를 좁혀 부여할 수도 있습니다(예: 단일 앱에 단일 권한 부여). 이는 사용자가 계속해서 사용자별, 앱별로 부여해야 하는 앱 운영 권한에는 적용되지 않습니다.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
웹을 사용하여 데모 동영상 업데이트
/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.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-rUS/strings.xml에 다음 줄을 추가합니다.
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
기기를 재부팅할 때마다 많아야 한 번 동영상이 다운로드됩니다. 기기에서 동영상이 재생되고 있다면 RetailDemo 앱은 다운로드 URL이 제공되고 URL의 동영상이 재생 중인 동영상보다 최신인지 백그라운드에서 확인합니다.
최신 동영상인 경우 RetailDemo 앱은 동영상을 다운로드하여 재생합니다. 다운로드된 동영상은 앞으로의 모든 데모 세션에서 재생됩니다. 다음 재부팅이 있을 때까지 이러한 확인 작업은 다시 실행되지 않습니다.
데모 동영상 가이드라인
데모 동영상은 세로 모드 레이아웃이거나 기기의 자연스러운 방향(태블릿인 경우)이어야 하며 길이는 5초를 넘어야 합니다. 콘텐츠는 화면에 있을 경우 계속 재생되므로 번인 현상이 발생해서는 안 됩니다.
자세한 내용은 사용자, 프로필, 계정의 Android 개발자 정의, 기기 정책 관리자 API 문서, 샘플 기기 소유자 앱을 참고하세요.
유효성 검사
CTS는 선택적 기능이므로 소매 데모 모드에 적용할 수 없습니다. 테스트는 수동으로 실행하거나 데모 앱용 단위 테스트로 실행해야 합니다.
데모 세션
데모 세션 설정
소매 데모 기기는 공장에서 데모 모드로 구성된 경우 소매 데모 모드로 부팅될 수 있습니다. 또는 매장 직원이 설정 마법사에서 직접 전시 모드를 사용 설정할 수 있습니다.
그림 2. 소매 데모 모드
데모 세션 표시
전시 모드로 전환된 기기는 구현에 설명한 대로 새 데모 사용자로 전환 후 오버레이 리소스에 지정된 맞춤 런처를 자동으로 시작합니다. 기본적으로 이 맞춤 런처는 사용자가 화면을 터치하여 데모 사용자 세션을 시작할 때까지 데모 동영상을 반복해서 재생합니다. 이때 맞춤 런처는 시스템 런처를 시작한 다음 종료됩니다. OEM은 종료 시 다른 서비스나 활동을 추가로 실행하도록 맞춤 런처를 변경할 수 있습니다.
전시 모드의 무결성을 유지하려면 키가드가 사용 중지되어야 하며 전시 모드에 부정적 영향을 미칠 수 있는 빠른 설정의 특정 작업도 금지되어야 합니다. 예를 들면 다음과 같습니다.
- 비행기 모드 전환
- Wi-Fi 액세스 포인트 제거 또는 수정(설정)
- 이동통신사 변경(설정)
- 핫스팟 구성(설정)
- 사용자 전환
또한 다음을 사용 중지함으로써 전시 모드에 영향을 미칠 수 있는 일부 전역 설정의 액세스도 차단됩니다.
- Wi-Fi 설정
- 셀룰러 네트워크 구성 옵션(특히 핫스팟)
- 블루투스 구성
- 백업 및 재설정, 날짜 및 시간, 모바일 네트워크(아예 표시되지 않음)
사용자가 일정 시간(기본 90초) 동안 움직임이 없으면 전시 모드는 시스템 대화상자를 표시하여 사용자에게 세션을 종료하거나 계속하도록 요청합니다. 사용자가 종료를 선택하거나 5초간 응답이 없으면 전시 모드는 현재 데모 사용자를 삭제하고 새 데모 사용자로 전환하며, 원래 동영상을 다시 재생하는 과정을 반복합니다. 전원 버튼을 사용하여 화면을 끄면 몇 초 후에 자동으로 다시 켜집니다.
데모 세션 종료 후에는 기기가 자동으로 음소거되고 다음을 비롯한 일부 전역 설정이 재설정됩니다.
- 밝기
- 자동 회전
- 손전등
- 언어
- 접근성
소매 데모 모드 종료
전시 모드를 종료하려는 매장 직원은 데모 기기가 기기 관리에 등록되어 있지 않은지 확인하고 부트로더에서 기기를 초기화해야 합니다.