במדריך הזה מוסבר איך לפתח בקר מדיניות מכשיר (DPC) למכשירים בפריסת Android Enterprise. אפליקציית DPC, שנקראה בעבר בקר מדיניות של מקום העבודה, שולטת במדיניות המקומית של המכשיר ובאפליקציות המערכת במכשירים.
מידע על בקרי DPC
בפריסת Android Enterprise, הארגון שומר על שליטה בהיבטים שונים של מכשירי המשתמשים, כמו הפרדה בין מידע שקשור לעבודה לבין נתונים אישיים של המשתמשים, הגדרה מראש של אפליקציות מאושרות לסביבה או השבתה של יכולות המכשיר (לדוגמה, המצלמה).
כספק EMM, אתם מפתחים אפליקציית DPC שהלקוחות שלכם יכולים להשתמש בה בשילוב עם מסוף ה-EMM והשרת שלכם. הלקוח פורס את ה-DPC במכשירי המשתמשים שהוא מנהל. ה-DPC משמש כגשר בין מסוף ה-EMM (והשרת) לבין המכשיר. אדמינים משתמשים במסוף ה-EMM כדי לבצע מגוון משימות, כולל הגדרת מכשירים ואפליקציות.
ה-DPC יוצר ומנהל את פרופיל העבודה במכשיר שבו הוא מותקן. פרופיל העבודה מצפין מידע שקשור לעבודה ושומר אותו בנפרד מהאפליקציות והנתונים האישיים של המשתמשים. לפני יצירת פרופיל העבודה, פלטפורמת ה-DPC יכולה גם להקצות חשבון Google Play לארגונים לשימוש במכשיר.
במדריך הזה מוסבר איך לפתח DPC שיכול ליצור ולנהל פרופילים לצרכי עבודה.
ספריית תמיכה ב-DPC למערכות EMM
ספריית התמיכה של DPC ל-EMM כוללת כלי עזר ומחלקות עזר שמסייעים בהקצאה ובניהול של מכשירי Android בסביבה ארגונית. הספרייה מאפשרת לכם ליהנות מתכונות חשובות באפליקציות שלכם ל-DPC:
- תמיכה בהקצאת הרשאות לחשבונות Google Play לארגונים: הקצאת הרשאות לחשבונות Google Play לארגונים מאפליקציית ה-DPC מחייבת שהאפליקציות Google Play ו-Google Play Services יעמדו בדרישות המינימליות של הגרסה. עם זאת, עדכון האפליקציות האלה יכול להיות מורכב. ספריית התמיכה ב-DPC דואגת לעדכן את האפליקציות האלה, וגם מוודאת תאימות לעדכונים עתידיים בתהליך הקצאת ההרשאות לחשבונות מנוהלים ב-Google Play. פרטים נוספים זמינים במאמר בנושא תמיכה בהקצאת חשבונות ב-Google Play לארגונים.
- תמיכה בהגדרות מנוהלות: הדרך הקלה ביותר להטמיע הגדרות מנוהלות ב-DPC היא באמצעות Play EMM API לטיפול בהגדרות מנוהלות באפליקציות שאושרו. ספריית התמיכה של DPC מאפשרת להעביר ל-Google Play את המשימה של החלת הגדרות מנוהלות (לשעבר, הגבלות על אפליקציות) כפי שהוגדרו על ידי האדמין באמצעות מסוף ה-EMM. שימוש ב-Play EMM API לטיפול בתצורות מנוהלות מאפשר להחיל את תצורת האפליקציה באופן אטומי במהלך ההתקנה. מידע נוסף על הפעלת היכולת הזו ב-DPC זמין במאמר החלת הגדרות מנוהלות על אפליקציות לצרכים עסקיים.
כדי להוריד את הספרייה, פועלים לפי השלבים הבאים. ההנחיות המפורטות במדריך הזה מבוססות על שימוש בספריית התמיכה של DPC.
הורדה של ספריית התמיכה של DPC
כדי להשתמש בספריית התמיכה של DPC, מורידים את הספרייה מקהילת ספקי ה-EMM של Android Enterprise. כשמבצעים build לאפליקציית ה-DPC, צריך להוסיף את הספרייה לקובץ build.gradle ולטפל בתלויות אחרות. לדוגמה, הספרייה דורשת את ספריית הלקוח של Google Play Services auth בגרסה 11.4.0.
- מוסיפים את הספרייה לקובץ
build.gradle:
Groovy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- מוסיפים את
ספריית הלקוח של Google Play Services auth בגרסה 11.4.0 לקובץ build.gradle:
Groovy
implementation 'com.google.android.gms:play-services-auth:11.4.0'
Kotlin
implementation("com.google.android.gms:play-services-auth:11.4.0")
כדי שהספרייה תפעל, נדרשות הרשאות מסוימות. לכן, כשמעלים את אפליקציית ה-DPC ל-Google Play, צריך להוסיף את ההרשאות האלה למניפסט של האפליקציה:
<uses-permission android:name= "android.permission.DOWNLOAD_WITHOUT_NOTIFICAT>ION<"/ uses-permission android:name= "android.permission>.GE<T_ACCOUNTS"/ uses-permission android:name= "android.per>mis<sion.MANAGE_ACCOUNTS"/ uses-permission android:name= "andro>id.<permission.WRITE_SYNC_SETTINGS"/ uses-permission android:name= "com.google.andr>oid.providers.gsf.permission.READ_GSERVICES"/
בנוסף לשלבי ההגדרה והפריסה המקדימים האלה, צריך גם לאתחל את הפונקציונליות הספציפית של הספרייה בקוד ה-DPC, בהתאם ליכולת שרוצים להטמיע. הפרטים מופיעים בקטעים הרלוונטיים שבהמשך.
יצירת בקר DPC
בונים את ה-DPC על בסיס המודל הקיים שמשמש לאפליקציות לניהול מכשירים.
באופן ספציפי, האפליקציה צריכה להיות מחלקת משנה של
DeviceAdminReceiver (מחלקה מחבילת android.app.admin), כפי שמתואר במאמר בנושא
ניהול מכשירים.
יצירת פרופיל עבודה
דוגמה שמראה איך ליצור פרופיל עבודה בסיסי זמינה ב- BasicManagedProfile ב-GitHub.
כדי ליצור פרופיל עבודה במכשיר שכבר יש בו פרופיל אישי, צריך קודם לבדוק אם המכשיר תומך בפרופיל עבודה. לשם כך, בודקים אם קיימת תכונת המערכת FEATURE_MANAGED_USERS:
Kotlin
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
אם המכשיר תומך בפרופילים של עבודה, יוצרים פרופיל עבודה על ידי שליחת intent עם פעולה של ACTION_PROVISION_MANAGED_PROFILE. (בחלק מהמסמכים, פרופיל מנוהל הוא מונח כללי שמשמעותו זהה לפרופיל עבודה בהקשר של Android בארגון). צריך לכלול את שם החבילה של מנהל המכשיר כתוספת:
Kotlin
val provisioningActivity = getActivity() // You'll need the package name for the DPC app. val myDPCPackageName = "com.example.myDPCApp" // Set up the provisioning intent val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java) provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()) if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE) provisioningActivity.finish() }
Java
Activity provisioningActivity = getActivity(); // You'll need the package name for the DPC app. String myDPCPackageName = "com.example.myDPCApp"; // Set up the provisioning intent Intent provisioningIntent = new Intent("android.app.action.PROVISION_MANAGED_PROFILE"); ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class); provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()); if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager()) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE); provisioningActivity.finish(); }
המערכת מגיבה לכוונת המשתמש באופן הבא:
- בודק שהמכשיר מוצפן. אם לא, המערכת תבקש מהמשתמש להצפין את המכשיר לפני ההמשך.
- יוצר פרופיל עבודה.
- הסרת אפליקציות לא נדרשות מפרופיל העבודה.
- מעתיק את אפליקציית ה-DPC לפרופיל העבודה ומגדיר את ה-DPC עצמו כבעלים של הפרופיל.
כדי לבדוק אם ההקצאה הצליחה, מחליפים את הערך של
onActivityResult():
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data) } }
Java
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return; } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data); } }
סיום ההפעלה של פרופיל העבודה
אחרי שהפרופיל מוקצה, המערכת קוראת לשיטה
DeviceAdminReceiver.onProfileProvisioningComplete() של אפליקציית ה-DPC. צריך לבטל את שיטת הקריאה החוזרת הזו כדי לסיים את ההפעלה של פרופיל העבודה.
הטמעה אופיינית של DeviceAdminReceiver.onProfileProvisioningComplete()callback:
- האימות מוודא שהמכשיר עומד בדרישות של מדיניות המכשיר של EMM, כפי שמתואר במאמר הגדרת מדיניות מכשיר.
- ההגדרה הזו מפעילה את אפליקציות המערכת שהאדמין הפך לזמינות בפרופיל העבודה באמצעות
DevicePolicyManager.enableSystemApp(). - אם במכשיר נעשה שימוש ב-Google Play לארגונים, המערכת מוסיפה את החשבון המתאים לפרופיל העבודה כדי שאפשר יהיה להתקין במכשיר אפליקציות שאושרו.
- קבוצת חשבונות Google Play לארגונים: פרטים נוספים זמינים במאמרים איך מוודאים שסביבת העבודה מתאימה לקבוצת חשבונות Google Play לארגונים ואיך מוסיפים קבוצת חשבונות Google Play לארגונים.
- חשבונות Google: משתמשים ב-
AccountManager.addAccount().
הפעלת פרופיל העבודה
אחרי שמסיימים את המשימות האלה, מתקשרים לשיטת
setProfileEnabled() של מנהל מדיניות המכשיר כדי להפעיל את פרופיל העבודה:
Kotlin
// Get the device policy manager val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val componentName = myDeviceAdminReceiver.getComponentName(this) // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile") // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName)
Java
// Get the device policy manager DevicePolicyManager myDevicePolicyMgr = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName componentName = myDeviceAdminReceiver.getComponentName(this); // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile"); // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName);
הגדרת כללי מדיניות למכשירים
אפליקציית ה-DPC מחילה את מדיניות המכשיר שהוגדרה על ידי האדמין כדי לעמוד בדרישות ובמגבלות של הארגון. לדוגמה, מדיניות האבטחה עשויה לדרוש שהמכשירים יינעלו אחרי מספר מסוים של ניסיונות כושלים להזנת סיסמה. ה-DPC שולח שאילתה למסוף ה-EMM כדי לקבל את כללי המדיניות הנוכחיים, ואז מחיל את כללי המדיניות באמצעות API של Device Administration.
מידע על החלת כללי מדיניות על מכשירים מופיע במאמר בנושא כללי מדיניות.
החלת הגדרות אישיות מנוהלות על אפליקציות לשימוש בעבודה
הגדרות מנוהלות מאפשרות לכם לספק ללקוחות את היכולת להגדיר מראש את האפליקציות שהם אישרו לפריסה, ולעדכן את האפליקציות האלה בקלות כשצריך לשנות את ההגדרה. הגדרת אפליקציה לפני הפריסה מבטיחה שהאפליקציה תעמוד בדרישות האבטחה ובמדיניות אחרת של הארגון כשהיא תותקן במכשיר היעד.
יכולות האפליקציה מוגדרות על ידי מפתח האפליקציה בסכימת XML (סכימת ההגדרות המנוהלות) שמצורפת לאפליקציה כשהיא מועלית ל-Google Play (מפתחי אפליקציות יכולים לקרוא את המאמר הגדרת הגדרות מנוהלות לפרטים נוספים).
אתם מאחזרים את הסכימה מהאפליקציה כדי להציג אותה לאדמינים של הלקוחות במסוף ה-EMM, מספקים ממשק משתמש שבו מוצגות האפשרויות השונות שמוגדרות בסכימה, ומאפשרים לאדמינים להגדיר מראש את ההגדרות של האפליקציה. ההגדרה המנוהלת שנקבעה על ידי האדמין מאוחסנת בדרך כלל בשרת ה-EMM, שמשתמש ב-Play EMM API כדי להגדיר את Managedconfigurationsfordevice או את Managedconfigurationsforuser. פרטים נוספים זמינים במאמר בנושא הגדרות מנוהלות דרך Play.
אפשר להחיל הגדרות מנוהלות על האפליקציה באמצעות Play EMM API (הגישה המומלצת) או ישירות מ-DPC (כפי שמתואר במאמר החלת הגדרות מנוהלות ישירות מ-DPC). יש כמה יתרונות לשימוש ב-Play EMM API, כולל הטמעה קלה כי אפשר להשתמש ב-ספריית התמיכה של DPC כדי לפשט משימות DPC. בנוסף, Play EMM API:
- ההגדרה מוגדרת באופן אטומי כשמתקינים אפליקציה חדשה, וכך מוודאים שהאפליקציה מוכנה בפעם הראשונה שהמשתמש מפעיל אותה.
- מאפשרת לכם לנהל הגדרות אישיות ברמת המשתמש, כדי שלא תצטרכו לעקוב אחרי הקצאת ההרשאות ברמת המכשיר.
החלת הגדרות מנוהלות באמצעות Play EMM API
כדי להשתמש ב-Play EMM API להגדרות מנוהלות, ה-DPC צריך לאפשר ל-Google Play להגדיר הגדרות. ספריית התמיכה של DPC מבצעת את המשימה הזו בשבילכם באמצעות העברת ההגדרה שנשלחת מ-Google Play.
כדי להשתמש ב-Play EMM API, צריך להוריד את ספריית התמיכה של DPC ואז להפעיל את התמיכה בהגדרות מנוהלות ב-DPC.
הפעלת תמיכה בהגדרות מנוהלות ב-DPC
מייבאים את הכיתה הזו ב-DPC:
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
מאתחלים את ספריית ההגדרות המנוהלות. בדוגמה הזו, admin הוא ComponentName של DeviceAdminReceiver.
Kotlin
var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)
Java
ManagedConfigurationsSupport managedConfigurationsSupport = new ManagedConfigurationsSupport(context, admin);
הפעלת הגדרות אישיות מנוהלות:
Kotlin
managedConfigurationsSupport.enableManagedConfigurations()
Java
managedConfigurationsSupport.enableManagedConfigurations();
אחרי שמפעילים את הספרייה הזו באפליקציית ה-DPC, אפשר להשתמש ב-Google Play EMM API במסוף ובשרת ה-EMM כדי להחיל הגדרות מנוהלות על אפליקציות שאושרו, במקום לקודד את המשימות האלה ישירות באפליקציית ה-DPC. פרטים נוספים זמינים במאמר בנושא הגדרות מנוהלות דרך Play.
החלת הגדרות אישיות מנוהלות ישירות מ-DPC
כדי לשנות את הגדרות התצורה של אפליקציה ישירות מ-DPC, קוראים לשיטה DevicePolicyManager.setApplicationRestrictions() ומעבירים פרמטרים עבור DeviceAdminReceiver של אפליקציית DPC, שם החבילה של אפליקציית היעד וBundle שכולל את ההגדרה המנוהלת של האפליקציה כפי שהוגדרה על ידי האדמין. פרטים נוספים זמינים במאמרים איך מתבצעת האינטראקציה בין DPC לבין מסוף EMM והגדרת הגדרות מנוהלות. עם זאת, חשוב לדעת שלא מומלץ להשתמש בגישה החלופית הזו להחלת הגדרות אישיות מנוהלות בפריסות של חשבונות מנוהלים ב-Google Play לארגונים.
תמיכה בהקצאת חשבונות Google Play לארגונים
ספריית התמיכה של DPC כוללת תמיכה בהקצאת חשבונות Google Play לארגונים. כדי להשתמש בתמיכה הזו, קודם צריך לאתחל את הספרייה, ואז אפשר לוודא את סביבת העבודה ולהוסיף חשבון Google Play לארגונים.
הפעלת תמיכה בחשבונות Google Play לארגונים בכלי DPC
מייבאים את הכיתה הזו ב-DPC:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
מאתחלים את ספריית התאימות להקצאת הרשאות. בדוגמה הזו, admin הוא ComponentName של
DeviceAdminReceiver.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
איך מוודאים את סביבת העבודה של חשבונות Google Play לארגונים
אחרי ש-DPC מספק מכשיר במצב בעלים של פרופיל (ACTION_PROVISION_MANAGED_PROFILE) או במצב ניהול ברמת בעלים (ACTION_PROVISION_MANAGED_DEVICE), צריך לוודא שהמכשיר יכול לתמוך ב-Google Play לארגונים על ידי קריאה ל:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
הקריאה החוזרת מדווחת על הצלחה או כישלון של התהליך הזה. כשהקריאה החוזרת (callback) מוחזרת בהצלחה, אפשר להוסיף חשבון Google Play לארגונים. אם הפונקציה להחזרת ערך (callback) מדווחת על שגיאה, צריך להציג למשתמש הנחיה לוודא שיש למכשיר חיבור לרשת (לדוגמה, אם ההורדה נכשלת). במקרים אחרים, צריך לדווח על הכשל ל-Google.
Kotlin
object : WorkingEnvironmentCallback() { override fun onSuccess() { // Can now provision the managed Google Play Account } override fun onFailure(error: Error) { // Notify user, handle error (check network connection) } }
Java
new WorkingEnvironmentCallback() { @Override public void onSuccess() { // Can now provision the managed Google Play Account } @Override public void onFailure(Error error) { // Notify user, handle error (check network connection) } }
הוספת חשבון Google Play לארגונים
AccountManager
יכול להוסיף חשבון Google Play לארגונים למכשיר. כדי לפשט את האינטראקציה עם AccountManager, אפשר להשתמש בפונקציית העזר (שמוצגת בדוגמה שלמטה) מתוך ספריית התמיכה של DPC. הפונקציה מטפלת באסימון שמוחזר על ידי שרת Google Play ומאפשרת הקצאת הרשאות לחשבון Google Play לארגונים. הפונקציה מחזירה ערך כשהחשבון המנוהל ב-Google Play לארגונים נמצא במצב תקין:
Kotlin
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
Java
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
-
token—אסימון אימות המשתמש שנוצר על ידי קריאת Google Play EMM APIUsers.generateAuthenticationToken(). -
accountAddedCallback—מחזירה את חשבון Google Play לארגונים שנוסף למכשיר בהצלחה. הקריאה החוזרת הזו צריכה לכלול את השיטותonAccountReady()ו-onFailure().
Kotlin
val workAccountAddedCallback = object : WorkAccountAddedCallback() { override fun onAccountReady(account: Account, deviceHint: String) { // Device account was successfully added to the device // and is ready to be used. } override fun onFailure(error: Error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } }
Java
WorkAccountAddedCallback workAccountAddedCallback = new WorkAccountAddedCallback() { @Override public void onAccountReady(Account account, String deviceHint) { // Device account was successfully added to the device // and is ready to be used. } @Override public void onFailure(Error error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } };
מסמכים קשורים
- מידע נוסף על Device Administration API זמין במאמר בנושא Device Administration.
- מידע על שיטות הקצאת הרשאות ב-Android Enterprise זמין במאמר הקצאת הרשאות למכשירים במדריך למפתחים של Android Enterprise.
- דוגמה ב-GitHub שמראה איך ליצור פרופיל עבודה בסיסי זמינה במאמר BasicManagedProfile.
- אפשר לראות דוגמה ב-GitHub שמראה איך להגדיר הגדרות באפליקציות אחרות כבעלי פרופיל: AppRestrictionEnforcer.