ב-Android 7.1.1 נוספה תמיכה ברמת המערכת במצב הדגמה לקמעונאים, כדי שלקוחות יוכלו לבדוק את המכשירים בפעולה בחנויות קמעונאיות. המכשירים מוגדרים להדגמה קמעונאית באמצעות אפליקציה של בעלי המכשיר, כדי להבטיח שהשימוש במכשיר מוגבל רק לאפליקציות מסוימות במצב הדגמה. משתמשי קצה לא יכולים להוסיף חשבון לשימוש אישי במכשיר הדגמה קמעונאי. ב-Android 8.1, התמיכה הזו עודכנה כדי לאפשר יצירה של משתמשי הדגמה באמצעות DevicePolicyManager createAndManageUser API. האפשרות הזו מאפשרת ליצרני ציוד מקורי (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 יוצר משתמש הדגמה ועובר אליו כשמשתמש 0 מופעל, מפעיל את משגר האפליקציות המותאם אישית שצוין במשאב שכבת העל ומשבית את SUW. גם SystemUI וגם SystemServer משתמשים בדגל הזה כדי לנהל היבטים של מצב קמעונאי.
הגדרה של מרכז אפליקציות או נגן וידאו בהתאמה אישית
יצרני מכשירים יכולים לציין אפליקציית הפעלה בהתאמה אישית על ידי שינוי ברירת המחדל של משאב המסגרת 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 (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 ותמונות). מומלץ שאפליקציות 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.
חסימת האפשרות להסיר חבילות.
הפעלת עדכוני מערכת אוטומטיים. העדכונים יורדו ויוחלו על המכשירים באופן אוטומטי.
משביתים את אמצעי האבטחה.
למנוע הגדרת סיסמאות או טביעות אצבע.
מגדירים קבוצה של הגדרות 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>
In 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 Developer, בתיעוד של Device Policy Manager API ובדוגמה לאפליקציה של בעלי מכשירים.
אימות
מערכת CTS לא מכסה את מצב ההדגמה הקמעונאית כי זו תכונה אופציונלית. הבדיקה צריכה להתבצע באופן ידני או באמצעות בדיקות יחידה באפליקציית ההדגמה.
שיעור הדגמה
הגדרת סשן הדגמה
יכול להיות שמכשירי הדגמה לקמעונאים יופעלו במצב הדגמה אם הם הוגדרו למצב הדגמה במפעל. לחלופין, עובדים בחנויות קמעונאיות יכולים להפעיל את מצב הקמעונאות ישירות מאשף ההגדרה.
איור 2. מצב הדגמה לקמעונאים
הצגת סשן הדגמה
כשמכניסים את המכשיר למצב תצוגה, הוא עובר למשתמש הדגמה חדש ומתחיל אוטומטית את מרכז האפליקציות המותאם אישית שצוין במשאב השכבה, כמו שמתואר בהטמעה. כברירת מחדל, משגר האפליקציות המותאם אישית הזה מפעיל את סרטון ההדגמה בלולאה עד שהמשתמש נוגע במסך כדי להתחיל סשן של משתמש הדגמה. בשלב הזה, מרכז האפליקציות המותאם אישית מפעיל את מרכז האפליקציות של המערכת ואז יוצא. יצרני ציוד מקורי (OEM) יכולים לשנות את מרכז האפליקציות המותאם אישית כדי להפעיל בנוסף שירות או פעילות אחרים ביציאה.
כדי לשמור על השלמות של מצב הקמעונאות, מסך הנעילה מושבת וגם פעולות מסוימות מההגדרות המהירות שעלולות להשפיע לרעה על מצב הקמעונאות אסורות, כולל הפעולות הבאות.
- המתג של מצב טיסה.
- הסרה או שינוי של נקודות גישה ל-Wi-Fi (הגדרות).
- שינוי הספק (הגדרות).
- הגדרת נקודה לשיתוף אינטרנט (הגדרות).
- החלפת משתמשים.
בנוסף, הגישה חסומה גם לחלק מההגדרות הכלליות שיכולות להשפיע על מצב התצוגה הקמעונאית, על ידי השבתת ההגדרות הבאות:
- הגדרות ה-Wi-Fi.
- אפשרויות להגדרת רשתות סלולריות, במיוחד נקודות לשיתוף אינטרנט (Hotspot).
- הגדרת Bluetooth.
- גיבוי ואיפוס, תאריך ושעה ורשתות סלולריות (הן לא מופיעות בכלל).
אם המשתמש לא פעיל במשך תקופה מסוימת (90 שניות כברירת מחדל), מוצג ב'מצב קמעונאי' דו-שיח של המערכת שבו המשתמש מתבקש לצאת מהסשן או להמשיך. אם המשתמש בוחר לצאת או אם לא מתקבלת תגובה במשך חמש שניות, מצב התצוגה בחנויות מסיר את משתמש ההדגמה הנוכחי, עובר למשתמש הדגמה חדש וחוזר על הסרטון המקורי. אם המסך כבוי באמצעות לחצן ההפעלה, הוא יופעל מחדש באופן אוטומטי אחרי כמה שניות.
אחרי שיוצאים מהדמו, המכשירים מושתקים וחלק מההגדרות הגלובליות מאופסות, כולל ההגדרות הבאות:
- בהירות
- סיבוב אוטומטי
- פנס
- שפה
- נגישות
יציאה ממצב ההדגמה לקמעונאים
כדי לצאת ממצב קמעונאי, עובדים בחנויות קמעונאיות צריכים לוודא שמכשיר ההדגמה לא רשום בניהול המכשירים, ולאפס את המכשיר להגדרות המקוריות מתוכנת האתחול.