ב-Android 7.1.1 נוספה תמיכה ברמת המערכת למצב ההדגמה לקמעונאים, כדי שהלקוחות יוכלו לבחון את המכשירים בפעולה בחנויות קמעונאיות. מכשירים מוגדרים להדגמה לקמעונאים באמצעות אפליקציה של בעלות על המכשיר, כדי להבטיח שהשימוש במכשיר יהיה מוגבל לאפליקציות מסוימות במצב הדגמה בלבד. משתמשי קצה לא יכולים להוסיף חשבון אישי במכשיר הדגמה לצרכן. מערכת Android 8.1 משנה את התמיכה הזו כדי ליצור משתמשי הדגמה דרך ה-API של DevicePolicyManager createAndManageUser. כך יצרני ציוד מקורי יכולים להתאים אישית את המצב הרגיל של מכשיר הדגמה לצורכי קמעונאות, במונחים של ניהול משתמשים וניהול מדיניות המכשיר.
אפשר להשתמש בממשקי ה-API של DevicePolicyManager בגרסאות שקדמו ל-Android 8.1, אבל אי אפשר ליצור משתמשים מסוג demo (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. גם System Server וגם SystemUI משתמשים בדגל הזה כדי לנהל היבטים של מצב קמעונאי.
הגדרת מרכז אפליקציות או נגן וידאו בהתאמה אישית
יצרני מכשירים יכולים לציין מרכז אפליקציות מותאם אישית על ידי שינוי משאב ה-framework 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). מומלץ לאפליקציות של יצרני ציוד מקורי לבדוק גם אם הערך של 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.
אפשר להקצות בעלות על מכשיר רק באמצעות בעלי התפקידים בניהול המכשירים או האפליקציה ניהול תצורה.
ממשקי API במחלקה DevicePolicyManager מאפשרים לבעלי המכשיר (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
עדכון סרטון ההדגמה באינטרנט
אפליקציית 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 מורידה ומתחילה להפעיל את הסרטון. אחרי שמורידים את הסרטון, הוא ישמש להפעלה בכל סשנים של הדגמה ואילך. הבדיקות לא יקרו שוב עד אחרי ההפעלה מחדש הבאה.
הנחיות לסרטוני הדגמה
סרטוני ההדגמה צריכים להיות בפריסה לאורך. לחלופין, אם טאבלט, הם צריכים להיות בכיוון הטבעי של המכשיר, והם יכולים להיות בכל אורך של יותר מחמש שניות. התוכן לא יכול לגרום לבעיות של 'שריפה' (burn-in), כי הוא יופעל כל הזמן כשהמסך מוצג.
מידע נוסף זמין בהגדרות למפתחי Android של משתמשים, פרופילים וחשבונות, במסמכי התיעוד של Device Policy Manager API ובאפליקציה לדוגמה של בעלי המכשיר.
אימות
CTS לא כולל את מצב ההדגמה לקמעונאים כי הוא תכונה אופציונלית. צריך לבצע את הבדיקות באופן ידני או באמצעות בדיקות יחידה (unit testing) של אפליקציית ההדגמה.
סשן הדגמה
הגדרת סשן הדגמה
מכשירי הדגמה לקמעונאים עשויים להפעיל את מצב ההדגמה לקמעונאים אם הם מוגדרים למצב הדגמה כבר במפעל. לחלופין, עובדים בתחום הקמעונאות יכולים להפעיל את מצב הקמעונאי ישירות מאשף ההגדרה.
איור 2. מצב הדגמה לקמעונאים
הצגת סשן הדגמה
כשהמכשיר עובר למצב קמעונאי, הוא עובר למשתמש הדגמה חדש ומפעיל באופן אוטומטי את מרכז האפליקציות המותאם אישית שצוין במשאב שכבת-העל, כפי שמתואר בקטע הטמעה. כברירת מחדל, מרכז האפליקציות המותאם אישית הזה מפעיל את סרטון ההדגמה שוב ושוב עד שהמשתמש נוגע במסך כדי להתחיל סשן הדגמה של המשתמש. באותו זמן, מרכז האפליקציות המותאם אישית מפעיל את מרכז האפליקציות ואז יוצא. יצרני ציוד מקורי יכולים לשנות את מרכז האפליקציות המותאם אישית כדי להפעיל פעילות או שירות נוסף בזמן היציאה.
כדי לשמור על התקינות של מצב קמעונאי, מגן המקשים מושבת. בנוסף, אסור לבצע פעולות מסוימות מההגדרות המהירות שעלולות להשפיע לרעה על המצב הקמעונאי, כולל הפעולות הבאות.
- המתג של מצב הטיסה.
- הסרה או שינוי של נקודות גישה ל-Wi-Fi (הגדרות).
- שינוי ספק (הגדרות).
- הגדרת נקודה לשיתוף אינטרנט (הגדרות).
- החלפת משתמשים.
בנוסף, הגישה חסומה גם לחלק מההגדרות הגלובליות שיכולות להשפיע על מצב הקמעונאי, על ידי השבתת האפשרויות הבאות:
- הגדרות Wi-Fi.
- אפשרויות תצורה של רשתות סלולריות, במיוחד נקודות לשיתוף אינטרנט (Hotspot).
- הגדרת Bluetooth.
- גיבוי ואיפוס, תאריך ושעה ורשתות סלולריות (הן לא מופיעות בכלל).
אם המשתמש לא פעיל למשך פרק זמן מסוים (ברירת המחדל של 90 שניות), במצב הקמעונאי מוצגת תיבת דו-שיח של המערכת שבה תתבקשו לצאת מהסשן או להמשיך. אם המשתמש בוחר לצאת או אם לא הייתה תגובה במשך חמש שניות, מצב הקמעונאי מסיר את משתמש ההדגמה הנוכחי, עובר למשתמש ההדגמה החדש ועובר שוב על הסרטון המקורי. אם המסך נכבה באמצעות לחצן ההפעלה, הוא נדלק מחדש באופן אוטומטי אחרי כמה שניות.
אחרי שתצאו מסשן הדגמה, המכשירים יכובו ויאופסו הגדרות גלובליות מסוימות, כולל:
- בהירות
- סיבוב אוטומטי
- פנס
- Language
- נגישות
יציאה ממצב ההדגמה לקמעונאים
כדי לצאת ממצב קמעונאי, עובדי הקמעונאות צריכים לוודא שמכשיר ההדגמה לא רשום לניהול המכשירים ולאפס את המכשיר להגדרות המקוריות ממטען ההפעלה.