Android 7.1.1 แนะนำการสนับสนุนระดับระบบสำหรับโหมดสาธิตการขายปลีก เพื่อให้ลูกค้าสามารถตรวจสอบอุปกรณ์ที่ใช้งานจริงได้ที่ร้านค้าปลีก อุปกรณ์ได้รับการตั้งค่าสำหรับการสาธิตการขายปลีกโดยใช้แอปเจ้าของอุปกรณ์เพื่อให้แน่ใจว่าการใช้งานอุปกรณ์ถูกจำกัดไว้เฉพาะบางแอปในโหมดสาธิตเท่านั้น ผู้ใช้ต้องไม่สามารถเพิ่มบัญชีส่วนตัวบนอุปกรณ์สาธิตขายปลีกได้ Android 8.1 แก้ไขการสนับสนุนนี้เพื่อสร้าง ผู้ใช้สาธิต ผ่าน DevicePolicyManager createAndManageUser API สิ่งนี้ทำให้สามารถปรับแต่ง OEM ได้มากขึ้นสำหรับโหมดการขายปลีกมาตรฐานในแง่ของการจัดการผู้ใช้และการจัดการนโยบายอุปกรณ์บนอุปกรณ์สาธิต
แม้ว่า API ของ DevicePolicyManager จะใช้ได้กับเวอร์ชันก่อน Android 8.1 แต่ผู้ใช้ ประเภทสาธิต ( DevicePolicyManager.MAKE_USER_DEMO
) ไม่สามารถสร้างด้วย createAndManageUser API ในเวอร์ชัน 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 จะสร้างผู้ใช้สาธิตและสลับไปใช้เมื่อผู้ใช้ 0 เริ่มทำงาน เปิดใช้งานตัวเรียกใช้งานแบบกำหนดเองที่ระบุในทรัพยากรแบบซ้อนทับ และปิดใช้งาน SUW System Server และ SystemUI ยังใช้แฟล็กนี้เพื่อจัดการลักษณะของโหมดขายปลีก
ตั้งค่าตัวเรียกใช้งานหรือเครื่องเล่นวิดีโอที่กำหนดเอง
ผู้ผลิตอุปกรณ์สามารถระบุ Launcher ที่กำหนดเองได้โดยการแทนที่ทรัพยากรเฟรมเวิ 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 (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
ด้วยข้อจำกัดนี้ ตัวจัดการ บัญชี และ การตั้งค่า ไม่อนุญาตให้เพิ่มบัญชี แอป 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 เปิดใช้งาน Device Owner (DO) และ Profile Owner (PO) เพื่อบังคับใช้นโยบายอุปกรณ์ต่างๆ ฟังก์ชัน DevicePolicyManager บางอย่างที่ใช้ได้สำหรับโหมดสาธิตการค้าปลีกมีดังต่อไปนี้
สร้างและจัดการผู้ใช้
รีบูทอุปกรณ์
ตั้งค่าแพ็คเกจที่อนุญาต LockTask
ติดตั้งแพ็คเกจผ่าน PackageInstaller
บล็อกแพ็คเกจไม่ให้ถอนการติดตั้ง
เปิดใช้งานการอัปเดตระบบอัตโนมัติ อุปกรณ์จะดาวน์โหลดและใช้การอัปเดต OTA โดยอัตโนมัติ
ปิดใช้งานคีย์การ์ด
ป้องกันการตั้งรหัสผ่านหรือลายนิ้วมือ
ตั้งค่ารายการที่อนุญาตของ Settings.Global , Settings.Secure และ Settings.System settings
ตั้งค่านโยบายสิทธิ์เป็น
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
-
อัปเดตวิดีโอสาธิตโดยใช้เว็บ
แอป 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 จะดาวน์โหลดและเริ่มเล่นวิดีโอ เมื่อดาวน์โหลดวิดีโอแล้ว วิดีโอนั้นจะใช้สำหรับเล่นในเซสชันการสาธิตทั้งหมดนับจากนี้เป็นต้นไป ไม่มีการตรวจสอบเกิดขึ้นอีกจนกว่าจะรีบูตครั้งถัดไป
คำแนะนำเกี่ยวกับวิดีโอสาธิต
วิดีโอสาธิตต้องอยู่ในเลย์เอาต์แนวตั้ง หรือหากเป็นแท็บเล็ต ให้วางในแนวธรรมชาติของอุปกรณ์ และมีความยาวไม่เกิน 5 วินาที เนื้อหาต้องไม่ทำให้เกิดการเบิร์นอิน เนื่องจากเนื้อหาจะเล่นอย่างต่อเนื่องเมื่อแสดง
ดู คำจำกัดความของนักพัฒนาซอฟต์แวร์ Android สำหรับ ผู้ใช้ โปรไฟล์ และบัญชี เอกสารประกอบ API ของ Device Policy Manager และ แอปเจ้าของอุปกรณ์ตัวอย่าง สำหรับข้อมูลเพิ่มเติม
การตรวจสอบ
CTS ไม่ครอบคลุมโหมดสาธิตการขายปลีกเนื่องจากเป็นคุณลักษณะเสริม การทดสอบจะต้องดำเนินการด้วยตนเองหรือด้วยการทดสอบหน่วยสำหรับแอปสาธิต
เซสชันการสาธิต
การตั้งค่าเซสชันการสาธิต
อุปกรณ์สาธิตการขายปลีกอาจบูตเข้าสู่โหมดสาธิตการขายปลีก หากกำหนดค่าสำหรับโหมดสาธิตจากโรงงาน อีกทางหนึ่ง พนักงานขายปลีกอาจเปิดใช้งานโหมดขายปลีกโดยตรงจากวิซาร์ดการตั้งค่า
รูปที่ 2 โหมดสาธิตการขายปลีก
แสดงเซสชันการสาธิต
เมื่ออุปกรณ์เข้าสู่โหมดขายปลีก อุปกรณ์จะสลับเป็นผู้ใช้สาธิตใหม่และเริ่มใช้งาน Launcher แบบกำหนดเองโดยอัตโนมัติซึ่งระบุไว้ในทรัพยากรโอเวอร์เลย์ตามที่อธิบายไว้ใน Implementation ตามค่าเริ่มต้น ตัวเรียกใช้ที่กำหนดเองนี้จะเล่นวิดีโอสาธิตซ้ำจนกว่าผู้ใช้จะสัมผัสหน้าจอเพื่อเริ่มเซสชันผู้ใช้สาธิต ในขณะนั้น ตัวเรียกใช้งานแบบกำหนดเองจะเริ่มต้นตัวเรียกใช้งานระบบแล้วออก OEM สามารถปรับเปลี่ยน Launcher แบบกำหนดเองเพื่อเปิดบริการหรือกิจกรรมอื่นเพิ่มเติมเมื่อออก
เพื่อรักษาความสมบูรณ์ของโหมดขายปลีก คีย์การ์ดจะถูกปิดใช้งานและการดำเนินการบางอย่างจากการตั้งค่าด่วนที่อาจส่งผลเสียต่อโหมดขายปลีกก็ไม่ได้รับอนุญาตเช่นกัน รวมถึงสิ่งต่อไปนี้
- สลับโหมดเครื่องบิน
- การถอดหรือแก้ไขจุดเชื่อมต่อ Wi-Fi (การตั้งค่า)
- การเปลี่ยนผู้ให้บริการ (การตั้งค่า)
- การกำหนดค่าฮอตสปอต (การตั้งค่า)
- การสลับผู้ใช้
นอกจากนี้ การเข้าถึงยังถูกบล็อกการตั้งค่าส่วนกลางบางอย่างที่อาจส่งผลต่อโหมดค้าปลีกด้วยการปิดใช้งานสิ่งต่อไปนี้:
- การตั้งค่า Wi-Fi
- ตัวเลือกการกำหนดค่าเครือข่ายมือถือ โดยเฉพาะฮอตสปอต
- การกำหนดค่าบลูทูธ
- สำรองและรีเซ็ต วันที่และเวลา และเครือข่ายมือถือ (ไม่แสดงเลย)
หากผู้ใช้ไม่ได้ใช้งานเป็นระยะเวลาหนึ่ง (90 วินาทีตามค่าเริ่มต้น) โหมดขายปลีกจะแสดงกล่องโต้ตอบระบบเพื่อแจ้งให้ผู้ใช้ออกจากเซสชันหรือดำเนินการต่อ หากผู้ใช้เลือกที่จะออกหรือหากไม่มีการตอบสนองเป็นเวลาห้าวินาที โหมดขายปลีกจะลบผู้ใช้สาธิตปัจจุบันออก เปลี่ยนไปใช้ผู้ใช้สาธิตใหม่ และวนซ้ำวิดีโอต้นฉบับอีกครั้ง หากปิดหน้าจอโดยใช้ปุ่มเปิดปิด หน้าจอจะกลับมาเปิดใหม่โดยอัตโนมัติหลังจากผ่านไปสองสามวินาที
หลังจากออกจากเซสชันการสาธิต อุปกรณ์จะปิดเสียงตัวเองและรีเซ็ตการตั้งค่าส่วนกลางบางอย่าง รวมถึงสิ่งต่อไปนี้:
- ความสว่าง
- หมุนอัตโนมัติ
- ไฟฉาย
- ภาษา
- การเข้าถึง
ออกจากโหมดสาธิตการขายปลีก
ในการออกจากโหมดขายปลีก พนักงานขายปลีกต้องตรวจสอบให้แน่ใจว่าอุปกรณ์สาธิตไม่ได้ลงทะเบียนภายใต้การจัดการอุปกรณ์ และโรงงานจะรีเซ็ตอุปกรณ์จากตัวโหลดบูต