Google Play EMM API תומך בשיטות ההפצה הבאות לאפליקציות ציבוריות ופרטיות:
- המשתמשים יכולים להתקין באופן ידני אפליקציות מחנות Google Play המנוהל.
- אדמינים ב-IT יכולים להתקין מרחוק אפליקציות במכשירים של המשתמשים.
התקנה ידנית של אפליקציות מחנות Google Play לארגונים
אפשר להגדיר אילו אפליקציות יהיו זמינות להתקנה על ידי המשתמש ב-policy
של Device
, ולהגדיר זאת באמצעות קריאה ל-Devices.update
. כשמגדירים מכשיר חדש, צריך להגדיר את המדיניות לפני שמוסיפים את חשבון Google Play המנוהל למכשיר. אחרת, המדיניות לא תחול למשך זמן קצר אחרי הוספת החשבון למכשיר.
ההתנהגות של חנות Play לארגונים מוגדרת לפי הערך של policy.productAvailabilityPolicy
:
all
: כל האפליקציות הציבוריות מחנות Play זמינות.whitelist
: רק האפליקציות שמפורטות ב-policy.productPolicy
זמינות.
בשני המקרים, כל האפליקציות ב-policy.productPolicy
מתווספות כברירת מחדל לפריסת החנות של הארגון. כשבוחרים באפשרות whitelist
, פריסת החנות של הארגון היא דף הבית של חנות Play המנוהלת. כשבוחרים באפשרות all
, אפשר לגשת אליה בכרטיסייה 'אפליקציות לעבודה'. כדי לאפשר ללקוחות להתאים אישית את פריסת החנות של הארגון, אפשר להטמיע את ה-iframe של Google Play לארגונים (מידע נוסף זמין במאמר ארגון האפליקציות באמצעות ה-iframe של Google Play לארגונים).
התקנה מרחוק של אפליקציות במכשירי המשתמשים
כדי להתקין מרחוק (נקראת גם התקנה ב-push) אפליקציה במכשיר של משתמש, מגדירים את הערך policy.productPolicy.autoInstallPolicy
ב-policy
של Device
. כשמגדירים מכשיר חדש, צריך להגדיר את המדיניות לפני שמוסיפים את חשבון Google Play המנוהל למכשיר. אחרת, המדיניות לא תחול למשך זמן קצר אחרי הוספת החשבון למכשיר.
אפשר להגדיר את autoInstallMode
לאפשרויות הבאות:
doNotAutoInstall
: האפליקציה לא מותקנת באופן אוטומטי.autoInstallOnce
: האפליקציה מותקנת באופן אוטומטי פעם אחת. אם המשתמש מסיר את האפליקציה, היא לא תותקן שוב.forceAutoInstall
: האפליקציה מותקנת באופן אוטומטי. אם המשתמש יבטל את ההתקנה, היא תותקן מחדש. במכשירים מנוהלים, ה-DPC צריך לחסום את הסרת ההתקנה באמצעותDevicePolicyManager.setUninstallBlocked
.
במקרה של כשל (איבוד חיבור, חוסר נפח אחסון וכו'), המערכת תנסה שוב באופן אוטומטי עד שההתקנה תתבצע. כדי למנוע בזבוז של סוללה ונתונים במקרה של כשלים שלא ניתן לשחזר, מופעלת אסטרטגיית ניסיון חוזר של השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
עדיפות ההתקנה
אפשר לבחור את סדר ההתקנות באמצעות ההגדרה autoInstallPriority
. הערך של העדיפות חייב להיות מספר שלם ללא סימן, וערך ברירת המחדל הוא 0. האפליקציות יותקנו לפי סדר או לפי עדיפות עולה, כלומר האפליקציות עם ערך העדיפות הנמוך יותר יותקנו קודם.
התקנת אילוצים
אפשר להגדיר אילוצים להתקנה של כל אפליקציה על ידי הגדרת autoInstallConstraint
, שמאפשרת לקבוע את המצב הנדרש של המכשיר במהלך ההתקנה:
- אם המכשיר צריך להיות מחובר לרשת Wi-Fi,
- אם המכשיר אמור להיות בטעינה,
- ואם המכשיר צריך להיות במצב חוסר פעילות (המשתמש לא משתמש בו באופן פעיל).
אם האילוצים לא ימולאו באופן מיידי, ההתקנות המושפעות יעמדו בתור עד שהאילוצים ימולאו.
ב-autoInstallConstraint
, כלל ה-AND חל בין השדות. לדוגמה, כדי להתקין את האפליקציה עם autoInstallConstraint
הבא, המכשיר צריך להיות גם טעון וגם מחובר לרשת ללא חיוב (למשל, Wi-Fi):
"autoInstallConstraint": [
"chargingStateConstraint" : "chargingRequired",
"networkTypeConstraint" : "unmeteredNetwork"
]
התקנה אוטומטית של אפליקציות במכשירים חדשים שהוקצתה להם הרשאה
Google Play EMM API שולח התראה מסוג NewDeviceEvent
כשמתבצע הקצאה ראשונית של מכשיר. כדי להתקין אפליקציות באופן אוטומטי במכשירים חדשים שהוקצתה להם תמיכה, צריך להאזין להתראות של NewDeviceEvent
. מכל NewDeviceEvent
, מאחזרים את userId
ו-deviceId
, ואז קוראים ל-Devices.update
כדי להגדיר את המדיניות למכשיר הזה.
במאמר הגדרת התראות מ-EMM מוסבר איך להירשם לקבלת התראות מ-EMM.
משוב על שגיאות בהתקנה האוטומטית של אפליקציות
שגיאות שקשורות להתקנת האפליקציה מדווחות דרך משוב על האפליקציה, וה-DPC יכול לעקוב אחרי ההודעה EnterprisePolicyStatus
שנשלחת דרך KeyedAppStatesService
.
כדי לפענח את הנתונים בקידוד Base64, ה-DPC צריך ליצור כיתות על סמך הגדרת ה-proto של EnterprisePolicyStatus
. הוראות ליצירת כיתות proto מפורטות במסמכי התיעוד של Protocol Buffers.
בעזרת הכיתות שנוצרו, ה-DPC יכול לפענח את האובייקט EnterprisePolicyStatus
:
EnterprisePolicyStatus enterprisePolicyStatus = EnterprisePolicyStatus.parseFrom(
BaseEncoding.base64().decode(base64EncodedString)
);
מדיניות המכשיר כוללת עכשיו את השדה האופציונלי החדש PolicyId
.
כשיוצרים או מעדכנים מדיניות, מערכת ה-EMM יכולה להגדיר את PolicyId
לכל ערך מחרוזת כדי לזהות גרסת Device Policy ספציפית.
אם האפשרות הזו זמינה, המשוב על התקנת האפליקציה יכלול את הערך של PolicyId
כדי ש-DPC יוכל להתאים את השגיאות שהתקבלו למדיניות ספציפית.
EnterprisePolicyStatus
message EnterprisePolicyStatus {
// Individual status for an app in the policy
repeated ApplicationStatus app_status = 1;
// Version of the policy for which this status applies.
PolicyVersion version = 2;
}
ApplicationStatus
// Individual status for an app.
message ApplicationStatus {
// The package name for the app.
string package_name = 1;
// The install status for the app. Only includes status for apps scheduled
// to be auto-installed via the policy resource.
AutoInstallStatus install_status = 2;
}
AutoInstallStatus
// Auto-install status for an app.
message AutoInstallStatus {
// The error causing the install to fail if state is INSTALL_ERROR.
EnterpriseAutoInstallError error = 1;
// The current install state of the app.
EnterpriseAutoInstallState state = 2;
}
PolicyVersion
// The version of the policy which these install states apply to.
message PolicyVersion {
// A policy id which may be optionally set by the EMM.
string policy_id = 1;
}
EnterpriseAutoInstallError
// Install errors resulting in failure to install an app.
enum EnterpriseAutoInstallError {
// Catch-all for unrecognized enum values.
ENTERPRISE_AUTO_INSTALL_ERROR_UNKNOWN = 0;
// The app could not be found.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_FOUND = 1;
// The app is not available in the user's country.
ENTERPRISE_AUTO_INSTALL_ERROR_UNAVAILABLE_COUNTRY = 2;
// The app is not compatible with the device hardware.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE = 3;
// No license remained to grant ownership of the app, and the user did not
// already own the app.
ENTERPRISE_AUTO_INSTALL_ERROR_NO_LICENSES_REMAINING = 4;
// Required permissions for the app have not been accepted.
ENTERPRISE_AUTO_INSTALL_ERROR_MISSING_PERMISSION = 5;
// The app is not available based on the enterprise availability policy.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_APPROVED_OR_UNAVAILABLE = 6;
// The app is not available to the user or device.
ENTERPRISE_AUTO_INSTALL_ERROR_APP_UNAVAILABLE = 7;
// Failed to grant license because the user already has ownership.
ENTERPRISE_AUTO_INSTALL_ERROR_INCOMPATIBLE_OWNERSHIP = 8;
// The admin has not accepted the terms of service.
ENTERPRISE_AUTO_INSTALL_ERROR_TOS_NOT_ACCEPTED = 9;
// The device does not have enough RAM.
ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_RAM = 10;
// The app is incompatible with the device carrier.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_CARRIER = 11;
// The app is incompatible with the country or carrier.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_COUNTRY_OR_CARRIER = 12;
// The app is incompatible with the safe search level.
ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_SAFE_SEARCH_LEVEL = 13;
// The app could not be installed due to an installer error.
ENTERPRISE_AUTO_INSTALL_ERROR_INSTALL_FAILED = 14;
// The app could not be installed due to network errors.
ENTERPRISE_AUTO_INSTALL_ERROR_NETWORK_FAILED = 15;
// The device does not have enough storage.
ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_STORAGE = 16;
}
EnterpriseAutoInstallState
// The current install state for an app.
enum EnterpriseAutoInstallState {
// Catch-all for unrecognized enum values.
INSTALL_STATE_UNKNOWN = 0;
// The app has been received by Play but an install attempt has not completed
// yet.
INSTALL_STATE_PENDING = 1;
// The latest install attempt failed and will be retried automatically.
INSTALL_STATE_ERROR = 2;
// The app has been installed.
INSTALL_STATE_INSTALLED = 3;
}
הפצת אפליקציות לבדיקות בקבוצות מוגדרות
בדיקות סגורות מאפשרות למפתחי אפליקציות לקבל משוב ממשתמשים מהימנים על גרסאות מוקדמות של האפליקציה. מפתחים יכולים להגדיר בדיקות סגורות ב-Google Play Console. אפשר להשתמש ב-Play EMM API כדי לאפשר למנהלי IT להפיץ גרסאות סגורות (שנקראות גם טראקים) של אפליקציות למשתמשים ספציפיים. לקוחות הארגון שלכם יכולים להשתמש בתכונה הזו לא רק כדי לבדוק אפליקציות של צד שלישי, אלא גם כדי לבדוק אפליקציות פרטיות שפותחו בתוך הארגון.
אפליקציות שעומדות בדרישות
לפני שמפתחים מוסיפים ארגון לרשימת הבודקים הסגורים של אפליקציה, האפליקציה צריכה לעמוד בקריטריונים הבאים:
- גרסה לייצור של האפליקציה פורסמת ב-Google Play.
- ב-Google Play Console, האפשרות Managed Google Play מופעלת בדף Advanced Settings (הגדרות מתקדמות) של האפליקציה.
- כל הגרסאות הסגורות של האפליקציה עומדות בדרישות של קוד הגרסה.
הוספת ארגון לבדיקות סגורות
מפתחי אפליקציות יכולים להוסיף ארגונים לבדיקות שמשתמשות בשיטות בדיקת אלפא סגורה או בדיקת אלפא באמצעות קבוצות Google. להוראות, אפשר לעיין במדריך בנושא הגדרה של בדיקה פתוחה, בדיקה בקבוצה מוגדרת או בדיקה פנימית. המפתח צריך להזין את מזהה הארגון (שנקרא גם מזהה הארגון) של כל ארגון שמשתתף. אדמינים ב-IT יכולים לספק את מזהה הארגון שלהם למפתחי אפליקציות של צד שלישי באופן הבא:
- נכנסים לחשבון בחנות Google Play לארגונים.
- לוחצים על Admin Settings (הגדרות אדמין).
- מעתיקים את המחרוזת של מזהה הארגון מהתיבה Organization information (פרטי הארגון) ושולחים אותה למפתח.
דרישות נוספות לאפליקציות פרטיות
באפליקציות פרטיות, המפתח צריך גם להוסיף את מזהה הארגון של כל ארגון שמשתתף בכרטיסייה Google Play לארגונים בדף ההגדרות המתקדמות של האפליקציה. להוראות, ראו פרסום אפליקציה פרטית.
הפצת טראקים סגורים למשתמשים
כדי לאחזר רשימה של טראקים שזמינים לארגון לאפליקציה מסוימת, צריך להפעיל את הפונקציה Products.get
. רשימת appTracks[]
שמופיעה בתגובה כוללת את הטראקים שזמינים לכל אפליקציה. הערך appTracks[].trackAlias
הוא שם של הטראק שאפשר להציג במסוף ה-EMM, והערך appTracks[].trackId
הוא המזהה של הטראק שאפשר לקרוא במכונה.
כדי לתת למשתמש גישה לטראק סגור של אפליקציה, מגדירים את הערך policy.productPolicy[].trackIds[]
ב-policy
של Device
. אם יש כמה טראקים זמינים למכשיר, תותקן הגרסה הזמינה עם קוד הגרסה הגבוה ביותר.
מזהי הטראקים יוסרו באופן אוטומטי מהקריאה ל-Products.get
בתרחישים מסוימים, כמו:
- גרסה של המסלול באפליקציה מועברת למסלול אחר או לסביבת הייצור.
- הגרסה בסביבת הייצור מתעדכנת בגרסה גבוהה יותר מזו של המסלול.
- מפתח מפסיק את הטראק.
מעקב אחר רישיונות לאפליקציות בתשלום
באפליקציות בתשלום, האובייקט Grouplicenses
עוקב אחרי מספר הרישיונות שבבעלות הארגון ומספר הרישיונות שבשימוש. אפשר להתקשר למספר Grouplicenses.get
כדי לקבל את פרטי הרישיון של אפליקציה.
כדי שאפשר יהיה להתקין אפליקציה בתשלום במכשיר, לארגון צריכה להיות רישיון לאפליקציה. אם יש רישיון, האפליקציה מותקנת במכשיר ונוצר אובייקט Entitlements
. אובייקט Entitlements
מקשר רישיון למשתמש ומקטין את מספר הרישיונות הזמינים לאפליקציה. אם אין רישיונות זמינים, התקנת האפליקציה נכשלת ולא נוצר אובייקט Entitlements
.
לא נעשה שימוש באובייקטים Grouplicenses
ו-Entitlements
באפליקציות שמופצות ללא תשלום.