פיתוח בקר לניהול מדיניות מכשירים

במדריך הזה מוסבר איך לפתח בקר לניהול מדיניות מכשירים (DPC) עבור מכשירים בפריסה ארגונית של Android. אפליקציית DPC, שהייתה ידועה בעבר כנאמן מידע של מדיניות העבודה, שולט בכללי מדיניות המכשירים המקומיים באפליקציות במכשירים שונים.

מידע על בקרי DPC

בפריסה ארגונית של Android, לארגון יש שליטה היבטים שונים של מכשירי המשתמש, כמו בידוד במהלך העבודה מידע ממשתמשים מידע אישי, הגדרה מראש של אפליקציות שאושרו עבור את הסביבה, או השבתת יכולות המכשיר (לדוגמה, המצלמה).

בתור ספק 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 דואגת לעדכון ומבטיחה גם תאימות לעדכונים עתידיים תהליך הקצאת חשבונות Play. צפייה בחשבונות Google Play מנוהלים לקבלת פרטים, תמיכה בהקצאת הרשאות ידנית.
  • תמיכה בהגדרות מנוהלות: השימוש ב-Play EMM API לטיפול בהגדרות מנוהלות של אפליקציות שאושרו הוא היא הדרך הקלה ביותר להטמיע הגדרות מנוהלות ב-DPC. תמיכה בקר DPC הספרייה מאפשרת לך להעניק גישה ל-Google Play כמשימה של החלת חשבונות מנוהלים הגדרות אישיות (לשעבר 'הגבלות אפליקציות') כפי שהוגדרו על ידי האדמין באמצעות ה-EMM במסוף. השימוש ב-Play EMM API לטיפול בהגדרות מנוהלות מאפשר הגדרת האפליקציה שתחול באופן אטומי במהלך ההתקנה. צפייה החלת הגדרות מנוהלות לעבודה של אפליקציות לקבלת מידע נוסף על האופן שבו אפשר להפעיל את היכולת הזו בקר ה-DPC.

כדי להוריד את הספרייה, צריך לפעול לפי השלבים הבאים. המשימות שמפורטות במדריך הזה להניח שנעשה שימוש בספריית התמיכה של בקר DPC.

הורדת ספריית התמיכה של בקר DPC

כדי להשתמש בספריית התמיכה של בקרי DPC, צריך להוריד את הספרייה מקהילת ספקי ה-EMM של Android Enterprise. עליכם להוסיף את הספרייה לקובץ build.gradle ולטפל בדברים אחרים ואת יחסי התלות בזמן יצירת אפליקציית בקר DPC. לדוגמה, הספרייה דורשת גרסה 11.4.0. ספריית הלקוח לאימות של Google Play Services.

  1. מוסיפים את הספרייה לקובץ build.gradle:

    מגניב

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. הוספת 11.4.0 ספריית הלקוח לאימות של Google Play Services לקובץ build.gradle:

    מגניב

    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_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.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);
    }
}

סיום ההפעלה של פרופיל העבודה

לאחר ההקצאה של הפרופיל, המערכת תפעיל את ה-DPC השיטה DeviceAdminReceiver.onProfileProvisioningComplete() של האפליקציה. שינוי מברירת המחדל שיטת הקריאה החוזרת הזו כדי לסיים את ההפעלה של פרופיל העבודה.

DeviceAdminReceiver.onProfileProvisioningComplete() טיפוסי הטמעת הקריאה החוזרת מבצעת את הפעולות הבאות:

הפעלת פרופיל העבודה

אחרי השלמת המשימות האלה, צריך לקרוא לפונקציה של מנהל מדיניות המכשיר שיטה 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 לניהול.

לקבלת מידע על החלת כללי מדיניות מכשיר, אפשר לעיין במאמר מדיניות.

החלה של הגדרות מנוהלות לאפליקציות לעבודה

הגדרות מנוהלות מאפשרות לך לספק ללקוחות שלך את היכולת להגדיר מראש את האפליקציות שאושרו לפריסה ולעדכן אותן אפליקציות בקלות במקרים שבהם צריך לשנות את ההגדרות. הגדרת אפליקציה לפני מבטיחה שאבטחת הארגון וכללי מדיניות אחרים מתקיימים אחרי ההתקנה של האפליקציה במכשיר היעד.

יכולות האפליקציה מוגדרות על ידי מפתח האפליקציה בסכימת XML ( שמתלווה לאפליקציה בזמן ההעלאה ל-Google Play (למפתחי אפליקציות, אפשר לקרוא פרטים נוספים במאמר הגדרת הגדרות מנוהלות).

מאחזרים את הסכימה הזו מהאפליקציה כדי להציג אותה לאדמינים של לקוחות במסוף ה-EMM, לספק ממשק משתמש שבו האפשרויות השונות מוגדרות ולאפשר לאדמינים לקבוע מראש את הגדרות האפליקציה. ההגדרה המנוהלת שנקבעה על ידי האדמין היא בדרך כלל בשרת ה-EMM, ולאחר מכן משתמשת הפעלת EMM API להגדרה הגדרות מנוהלות במכשיר או managed configurationsforuser. צפייה הגדרות מנוהלות ב-Play.

ניתן להפעיל הגדרות מנוהלות באפליקציה באמצעות ממשק ה-API של Play EMM (גישה מומלצת) או ישירות מה-DPC (כפי שמתואר במאמר החלת הגדרות מנוהלות) ישירות מה-DPC). שימוש ב-API של Play EMM יש כמה יתרונות, כולל הטמעה קלה, כי אפשר להשתמש ספריית התמיכה של DPC מאפשרת לפשט משימות בקר DPC. כמו כן, ממשק ה-API של Play EMM:

  • המדיניות הזו קובעת את התצורה באופן אטומי כשאפליקציה חדשה מותקנת, כדי להבטיח שהאפליקציה מוכנה בפעם הראשונה שהמשתמש מפעיל אותה.
  • כשבוחרים באפשרות הזו, ניתן לנהל את ההגדרות ברמת המשתמש, וכך להימנע ממעקב אחרי ההקצאה לכל מכשיר בנפרד.

להחיל הגדרות מנוהלות באמצעות הפעלת ממשק API של EMM

כדי להשתמש ב-API של Play EMM להגדרות מנוהלות, ה-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() ומעבירים לרכיבי ה-DPC של אפליקציית ה-DPC DeviceAdminReceiver, שם החבילה של אפליקציית היעד, וה-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);

הקריאה החוזרת מדווחת על ההצלחה או הכשל של התהליך הזה. כשהקריאה החוזרת מוחזרת בהצלחה, ניתן להוסיף חשבון Google Play מנוהל. אם המיקום הקריאה החוזרת מדווחת על שגיאה, ולבקש מהמשתמש לוודא למכשיר יש חיבור לרשת (לדוגמה, אם ההורדה נכשלה). בעוד לדווח על הכשל ל-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 של מסגרת Android יכולים להוסיף למכשיר חשבון Google Play מנוהל. כדי לפשט את האינטראקציה עם AccountManager, צריך להשתמש בפונקציה העוזרת (Helper) (מוצגת בדוגמה למטה) מספריית התמיכה של DPC. הפונקציה מטפל באסימון המוחזר על ידי שרת Google Play ומאפשר את ההקצאה חשבון Google Play המנוהל. הפונקציה חוזרת כש Google Play לארגונים החשבון במצב חוקי:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token – אסימון אימות המשתמש שנוצר על ידי Google השמעת השיחה Users.generateAuthenticationToken() ב-API ל-EMM.
  • accountAddedCallback – החזרת חשבון Google Play המנוהל שנוסף בהצלחה למכשיר. הקריאה החוזרת (callback) הזו צריכה לכלול 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 זמין בכתובת מכשיר ניהול.
  • מידע נוסף על שיטות להקצאת הרשאות ידנית ב-Android Enterprise הקצאת מכשירים בקטע מדריך למפתחים של Android Enterprise.
  • לדוגמה של GitHub שמדגימה איך ליצור פרופיל עבודה בסיסי: לעיון ב-BasicManagedProfile.
  • לדוגמה של GitHub שמדגימה איך לקבוע הגדרות אישיות באפליקציות אחרות בעלי הפרופיל, ראו AppRestrictionEnforcer.