اندروید ۷.۱.۱ پشتیبانی سطح سیستمی برای حالت نمایشی خردهفروشی را معرفی کرد تا مشتریان بتوانند دستگاههای در حال کار را در فروشگاههای خردهفروشی بررسی کنند. دستگاهها با استفاده از یک برنامه مالک دستگاه برای نمایش خردهفروشی تنظیم میشوند تا اطمینان حاصل شود که استفاده از دستگاه فقط به برنامههای حالت نمایشی خاص محدود میشود. کاربران نهایی نباید بتوانند یک حساب شخصی را در یک دستگاه نمایشی خردهفروشی اضافه کنند. اندروید ۸.۱ این پشتیبانی را برای ایجاد کاربران نمایشی از طریق رابط برنامهنویسی کاربردی createAndManageUser مربوط به DevicePolicyManager اصلاح میکند. این امر امکان سفارشیسازی بسیار بیشتر OEM را در حالت خردهفروشی استاندارد از نظر مدیریت کاربر و مدیریت سیاست دستگاه در دستگاه نمایشی فراهم میکند.
در حالی که APIهای DevicePolicyManager را میتوان در نسخههای قبل از اندروید ۸.۱ استفاده کرد، کاربران نسخه آزمایشی ( DevicePolicyManager.MAKE_USER_DEMO ) را نمیتوان با API createAndManageUser در نسخههای ۸.۰ و قبل از آن ایجاد کرد.
پیادهسازی در اندروید ۸.۱ و بالاتر
این بخش به بهبودهای پلتفرم میپردازد و برنامهی آزمایشی خردهفروشی را در اندروید ۸.۱ و بالاتر شرح میدهد.
تغییرات پلتفرم
تنظیم حالت نمایشی دستگاه (DEMO_MODE)
دستگاههایی که حالت نمایشی خردهفروشی مبتنی بر مالک دستگاه را پیادهسازی میکنند، باید قبل از آمادهسازی، Settings.Global.DEVICE_DEMO_MODE را روی ۱ تنظیم کنند تا نشان دهند که دستگاه برای حالت نمایشی خردهفروشی آمادهسازی شده است. SystemServer از این پرچم برای مدیریت جنبههای حالت خردهفروشی، مانند مشخصات توان و SystemUI، استفاده میکند.
فعال کردن سرویس RetailDemoMode
در دستگاههایی که حالت نمایشی خردهفروشی را پیادهسازی میکنند، ویزارد راهاندازی، تنظیم سراسری Global.DEVICE_DEMO_MODE را روی true تنظیم میکند تا نشان دهد که دستگاه وارد حالت خردهفروشی شده است. با مشاهده این تنظیم، RetailDemoModeService یک کاربر نمایشی ایجاد میکند و هنگام شروع کاربر 0 به آن سوئیچ میکند، لانچر سفارشی مشخص شده در یک منبع پوششی را فعال میکند و SUW را غیرفعال میکند. سرور سیستم و 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 قرار دارد، لانچر سفارشی پیشفرض در پروژه متنباز اندروید (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 و تنظیمات اجازه اضافه کردن حسابها را نمیدهند. برخی از برنامههای گوگل به این محدودیت واکنش نشان میدهند و پیام خطا نشان میدهند و برخی دیگر درخواست ایجاد حساب نمیکنند (مانند YouTube و Photos). توصیه میکنیم برنامههای OEM نیز بررسی کنند که آیا DISALLOW_MODIFY_ACCOUNTS تنظیم شده است یا خیر و بر اساس آن سناریو را مدیریت کنند.
بهروزرسانیهای سیستم
به طور پیشفرض، وقتی حالت خردهفروشی فعال است، سیاست دستگاه روی بهروزرسانی خودکار از طریق هوا (OTA) تنظیم شده است. دستگاههای خردهفروشی بدون تعامل کاربر، بهروزرسانی را دانلود، راهاندازی مجدد و نصب میکنند (با توجه به آستانههای باتری).
اپلیکیشن نسخه نمایشی خرده فروشی
پیادهسازی حالت نمایشی خردهفروشی مبتنی بر مالک دستگاه، نیازمند تنظیم یک برنامه کنترلکننده سیاست دستگاه به عنوان مالک دستگاه است. AOSP شامل یک پیادهسازی مرجع از برنامه RetailDemo در /packages/apps/RetailDemo است.
برنامههای مالک دستگاه نیازی به امتیازات بالا یا پیشنصب روی تصویر سیستم ندارند و میتوانند در طول فرآیند راهاندازی یا تأمین، دانلود شوند. آنها عمدتاً مانند برنامههای سنتی پیادهسازی میشوند، با تفاوتهای زیر:
همه برنامههای مالک دستگاه باید کامپوننت DeviceAdminReceiver را که به عنوان توکن مجوز برای همه APIهای DevicePolicyManager عمل میکند، توسعه دهند. این کامپوننت باید مجوز
android.permission.BIND_DEVICE_ADMINرا در خود نگه دارد، سیاستهای ویژه درخواستی را به عنوان فراداده شامل کند و intentهای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 ویدیو را دانلود و شروع به پخش میکند. پس از دانلود ویدیو، از آن برای پخش در تمام جلسات آزمایشی بعدی استفاده میشود. هیچ یک از بررسیها تا بعد از راهاندازی مجدد بعدی انجام نمیشود.
دستورالعملهای ویدیوی نمایشی
ویدیوهای نمایشی باید در حالت عمودی یا در صورت استفاده با تبلت، در جهت طبیعی دستگاه باشند و میتوانند بیش از پنج ثانیه باشند. محتوا نباید باعث سوختگی تصویر شود، زیرا هنگام نمایش به طور مداوم پخش میشود.
برای اطلاعات بیشتر به تعاریف توسعهدهنده اندروید از کاربران، پروفایلها و حسابها، مستندات API مدیریت سیاست دستگاه و نمونه برنامه مالک دستگاه مراجعه کنید.
اعتبارسنجی
CTS حالت آزمایشی خردهفروشی را پوشش نمیدهد زیرا این یک ویژگی اختیاری است. آزمایش باید به صورت دستی یا با تستهای واحد برای برنامه آزمایشی انجام شود.
جلسه آزمایشی
راه اندازی جلسه آزمایشی
دستگاههای نمایشی خردهفروشی اگر از کارخانه برای حالت نمایشی پیکربندی شده باشند، میتوانند در حالت نمایشی خردهفروشی بوت شوند. از طرف دیگر، کارمندان خردهفروشی میتوانند حالت خردهفروشی را مستقیماً از طریق ویزارد راهاندازی فعال کنند.

شکل ۲. حالت نمایش خردهفروشی
نمایش جلسه دمو
وقتی دستگاه وارد حالت خردهفروشی میشود، به یک کاربر آزمایشی جدید تغییر حالت میدهد و بهطور خودکار لانچر سفارشی مشخصشده در منبع پوششی را همانطور که در پیادهسازی توضیح داده شده است، اجرا میکند. بهطور پیشفرض، این لانچر سفارشی، ویدیوی آزمایشی را بهطور مکرر پخش میکند تا زمانی که کاربر برای شروع جلسه آزمایشی کاربر، صفحه را لمس کند. در آن زمان، لانچر سفارشی، لانچر سیستم را اجرا کرده و سپس خارج میشود. تولیدکنندگان اصلی تجهیزات (OEM) میتوانند لانچر سفارشی را تغییر دهند تا علاوه بر آن، سرویس یا فعالیت دیگری را نیز در هنگام خروج اجرا کند.
به منظور حفظ یکپارچگی حالت فروشگاه، محافظ کلید غیرفعال است و برخی اقدامات از تنظیمات سریع که میتوانند بر حالت فروشگاه تأثیر منفی بگذارند، از جمله موارد زیر نیز مجاز نیستند.
- تغییر حالت هواپیما.
- حذف یا تغییر نقاط دسترسی Wi-Fi (تنظیمات).
- تغییر اپراتور (تنظیمات).
- پیکربندی هات اسپات (تنظیمات).
- تعویض کاربر.
علاوه بر این، دسترسی به برخی از تنظیمات کلی که میتوانند با غیرفعال کردن موارد زیر بر حالت خردهفروشی تأثیر بگذارند، مسدود شده است:
- تنظیمات وای فای.
- گزینههای پیکربندی شبکه تلفن همراه، به ویژه هاتاسپاتها.
- پیکربندی بلوتوث.
- پشتیبانگیری و بازنشانی، تاریخ و زمان و شبکههای تلفن همراه (اصلاً نمایش داده نمیشوند).
اگر کاربر برای مدتی (به طور پیشفرض ۹۰ ثانیه) بیکار باشد، حالت خردهفروشی یک پنجره محاورهای سیستمی نشان میدهد تا کاربر را به خروج از جلسه یا ادامه دادن ترغیب کند. اگر کاربر خروج را انتخاب کند یا اگر به مدت پنج ثانیه پاسخی دریافت نکند، حالت خردهفروشی کاربر نمایشی فعلی را حذف میکند، به یک کاربر نمایشی جدید تغییر میدهد و دوباره ویدیوی اصلی را پخش میکند. اگر صفحه با استفاده از دکمه پاور خاموش شود، پس از چند ثانیه به طور خودکار روشن میشود.
پس از خروج از جلسه آزمایشی، دستگاهها خود را بیصدا میکنند و برخی از تنظیمات کلی، از جمله موارد زیر را بازنشانی میکنند:
- روشنایی
- چرخش خودکار
- چراغ قوه
- زبان
- دسترسیپذیری
خروج از حالت نمایشی خردهفروشی
برای خروج از حالت خردهفروشی، کارمندان خردهفروشی باید اطمینان حاصل کنند که دستگاه آزمایشی تحت مدیریت دستگاه ثبت نشده است و دستگاه را از طریق بوت لودر به تنظیمات کارخانه بازنشانی کنند.