یک کنترلر خط مشی دستگاه بسازید

این راهنما نحوه توسعه یک کنترل‌کننده خط‌مشی دستگاه (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 حداقل الزامات نسخه را داشته باشند. با این حال، به روز رسانی این برنامه ها می تواند پیچیده باشد. کتابخانه پشتیبانی DPC از به‌روزرسانی این برنامه‌ها مراقبت می‌کند، و همچنین سازگاری با به‌روزرسانی‌های آینده فرآیند تأمین حساب‌های مدیریت‌شده Google Play را تضمین می‌کند. برای جزئیات بیشتر به پشتیبانی ارائه حساب های مدیریت شده Google Play مراجعه کنید.
  • پشتیبانی از پیکربندی‌های مدیریت‌شده : استفاده از Play EMM API برای مدیریت پیکربندی‌های مدیریت‌شده برای برنامه‌های تأییدشده، ساده‌ترین راه برای پیاده‌سازی پیکربندی‌های مدیریت‌شده در DPC شما است. کتابخانه پشتیبانی DPC به شما این امکان را می‌دهد که وظیفه اعمال پیکربندی‌های مدیریت‌شده (که قبلاً محدودیت‌های برنامه بود) را که توسط سرپرست با استفاده از کنسول EMM تنظیم شده است، به Google Play واگذار کنید. استفاده از Play EMM API برای مدیریت پیکربندی های مدیریت شده به پیکربندی برنامه اجازه می دهد تا در حین نصب به صورت اتمی اعمال شود. برای اطلاعات بیشتر درباره نحوه فعال کردن این قابلیت در DPC خود ، به اعمال تنظیمات مدیریت شده در برنامه های کاری مراجعه کنید.

برای دانلود کتابخانه مراحل زیر را دنبال کنید. وظایف مشروح در این راهنما استفاده از کتابخانه پشتیبانی DPC را فرض می کند.

کتابخانه پشتیبانی DPC را دانلود کنید

برای استفاده از کتابخانه پشتیبانی DPC، کتابخانه را از انجمن Android Enterprise EMM Provider دانلود کنید. شما باید کتابخانه را به فایل build.gradle خود اضافه کنید و از وابستگی های دیگر در هنگام ساخت برنامه DPC خود مراقبت کنید. برای مثال، کتابخانه به 11.4.0 Google Play Services auth library client نیاز دارد.

  1. کتابخانه را به فایل build.gradle اضافه کنید:

    شیار

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

    کاتلین

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
  2. کتابخانه 11.4.0 Google Play Services auth client را به فایل build.gradle اضافه کنید:

    شیار

    implementation 'com.google.android.gms:play-services-auth:11.4.0'

    کاتلین

    implementation("com.google.android.gms:play-services-auth:11.4.0")

کتابخانه برای اجرا به مجوزهای خاصی نیاز دارد، بنابراین هنگام آپلود در Google Play باید اینها را به مانیفست برنامه DPC خود اضافه کنید:

  <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 ) را همانطور که در Device Administration توضیح داده شده است، طبقه بندی کند.

یک نمایه کاری ایجاد کنید

برای نمونه ای که نحوه ایجاد یک نمایه کاری پایه را نشان می دهد، به BasicManagedProfile در GitHub مراجعه کنید.

برای ایجاد نمایه کاری در دستگاهی که قبلاً نمایه شخصی دارد، ابتدا با بررسی وجود ویژگی سیستم FEATURE_MANAGED_USERS ، دریابید که آیا دستگاه می‌تواند از نمایه کاری پشتیبانی کند یا خیر:

کاتلین

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

جاوا

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

اگر دستگاه از نمایه‌های کاری پشتیبانی می‌کند، با ارسال یک هدف با عملکرد ACTION_PROVISION_MANAGED_PROFILE ، یک نمایه کاری ایجاد کنید. (در برخی از اسناد، نمایه مدیریت شده یک اصطلاح کلی است که به معنای همان نمایه کاری در زمینه Android در سازمان است.) نام بسته سرپرست دستگاه را به عنوان یک اضافه اضافه کنید:

کاتلین

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()
}

جاوا

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() را لغو کنید:

کاتلین

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)
    }
}

جاوا

@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 کارهای زیر را انجام می دهد:

پروفایل کاری را فعال کنید

پس از تکمیل این وظایف، برای فعال کردن نمایه کاری، متد setProfileEnabled() مدیر خط مشی دستگاه را فراخوانی کنید:

کاتلین

// 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)

جاوا

// 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 برای خط‌مشی‌های فعلی سؤال می‌کند، سپس خط‌مشی‌ها را با استفاده از Device Administration API اعمال می‌کند.

برای اطلاعات در مورد نحوه اعمال خط‌مشی‌های دستگاه، به خط‌مشی‌ها مراجعه کنید.

پیکربندی های مدیریت شده را در برنامه های کاری اعمال کنید

پیکربندی‌های مدیریت‌شده به شما این امکان را می‌دهند که به مشتریان خود این امکان را بدهید که برنامه‌هایی را که برای استقرار تأیید کرده‌اند، از قبل پیکربندی کنند و در صورت نیاز به تغییر پیکربندی، آن برنامه‌ها را به راحتی به‌روزرسانی کنند. پیکربندی یک برنامه قبل از استقرار تضمین می کند که امنیت سازمان و سایر سیاست ها پس از نصب برنامه در دستگاه مورد نظر رعایت می شود.

قابلیت‌های برنامه توسط توسعه‌دهنده برنامه در یک طرح 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" نام مؤلفه DeviceAdminReceiver است.

کاتلین

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

جاوا

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

فعال کردن تنظیمات مدیریت شده:

کاتلین

managedConfigurationsSupport.enableManagedConfigurations()

جاوا

managedConfigurationsSupport.enableManagedConfigurations();

با راه‌اندازی این کتابخانه در DPC، می‌توانید از Google Play EMM API در کنسول و سرور EMM خود برای اعمال پیکربندی‌های مدیریت‌شده در برنامه‌های تأییدشده، به جای کدگذاری مستقیم این وظایف در DPC استفاده کنید. برای جزئیات بیشتر به تنظیمات مدیریت شده از طریق Play مراجعه کنید.

تنظیمات مدیریت شده را مستقیماً از DPC اعمال کنید

برای تغییر تنظیمات پیکربندی برنامه به طور مستقیم از DPC، روش DevicePolicyManager.setApplicationRestrictions() را فراخوانی کنید و پارامترها را برای DeviceAdminReceiver برنامه DPC، نام بسته برنامه مورد نظر، و بسته شامل پیکربندی مدیریت شده برنامه که توسط سرپرست تنظیم شده است، ارسال کنید. برای جزئیات ، نحوه تعامل کنسول 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 است.

کاتلین

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

جاوا

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

از محیط کاری حساب‌های مدیریت‌شده Google Play اطمینان حاصل کنید

پس از اینکه DPC دستگاهی را در حالت مالک نمایه ( ACTION_PROVISION_MANAGED_PROFILE ) یا حالت مالک دستگاه ( ACTION_PROVISION_MANAGED_DEVICE ) ارائه کرد، مطمئن شوید که دستگاه می‌تواند از حساب‌های Google Play مدیریت شده با تماس گرفتن پشتیبانی کند:

کاتلین

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

جاوا

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

callback موفقیت یا شکست این فرآیند را گزارش می کند. وقتی پاسخ تماس با موفقیت برگشت، می‌توان یک حساب Google Play مدیریت شده اضافه کرد. اگر پاسخ تماس خطایی را گزارش کرد، از کاربر بخواهید مطمئن شود که دستگاه به شبکه متصل است (به عنوان مثال، اگر دانلود انجام نشد). در موارد دیگر، شکست را به گوگل گزارش دهید.

کاتلین

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)
    }
}

جاوا

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 ، از تابع کمکی (در مثال زیر نشان داده شده است) از کتابخانه پشتیبانی DPC استفاده کنید. این تابع رمز بازگردانده شده توسط سرور Google Play را کنترل می کند و تهیه حساب مدیریت شده Google Play را تسهیل می کند. وقتی حساب مدیریت شده Google Play در حالت معتبر باشد، این تابع برمی گردد:

کاتلین

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

جاوا

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token — رمز احراز هویت کاربر که توسط تماس Google Play EMM API Users.generateAuthenticationToken() ایجاد می‌شود.
  • accountAddedCallback —حساب مدیریت شده Google Play را که با موفقیت به دستگاه اضافه شده است برمی گرداند. این فراخوانی باید شامل متدهای onAccountReady() و onFailure() باشد.

کاتلین

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).
    }
}

جاوا

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، به دستگاه‌های Provision در راهنمای توسعه‌دهنده Android Enterprise مراجعه کنید.
  • برای نمونه GitHub که نحوه ایجاد نمایه کاری پایه را نشان می دهد، به BasicManagedProfile مراجعه کنید.
  • برای نمونه‌ای از GitHub که نحوه تنظیم تنظیمات روی برنامه‌های دیگر را به عنوان مالک نمایه نشان می‌دهد، به AppRestrictionEnforcer مراجعه کنید.