این راهنما نحوه توسعه یک کنترلکننده سیاست دستگاه (DPC) را برای دستگاههای موجود در یک سیستم عامل سازمانی اندروید شرح میدهد. یک برنامه DPC که قبلاً با نام کنترلکننده سیاست کاری شناخته میشد، سیاستهای دستگاه محلی و برنامههای سیستمی را در دستگاهها کنترل میکند.
درباره DPC ها
در یک استقرار سازمانی اندروید، یک سازمان کنترل جنبههای مختلف دستگاههای کاربر، مانند جداسازی اطلاعات مربوط به کار از دادههای شخصی کاربران، از پیش پیکربندی برنامههای تأیید شده برای محیط یا غیرفعال کردن قابلیتهای دستگاه (به عنوان مثال، دوربین) را حفظ میکند.
به عنوان یک EMM، شما یک برنامه DPC توسعه میدهید که میتواند توسط مشتریان شما در ارتباط با کنسول و سرور EMM شما مورد استفاده قرار گیرد. مشتری شما DPC را در دستگاههای کاربری که مدیریت میکند، مستقر میکند. DPC به عنوان پلی بین کنسول EMM (و سرور) شما و دستگاه عمل میکند. یک مدیر از کنسول EMM برای انجام طیف وسیعی از وظایف، از جمله پیکربندی تنظیمات دستگاه و برنامهها، استفاده میکند.
DPC پروفایل کاری را در دستگاهی که روی آن نصب شده است، ایجاد و مدیریت میکند. پروفایل کاری اطلاعات مربوط به کار را رمزگذاری کرده و آن را از برنامهها و دادههای شخصی کاربران جدا نگه میدارد. قبل از ایجاد پروفایل کاری، DPC همچنین میتواند یک حساب Google Play مدیریتشده را برای استفاده در دستگاه فراهم کند.
این راهنما به شما نشان میدهد که چگونه یک DPC ایجاد کنید که بتواند پروفایلهای کاری را ایجاد و مدیریت کند.
کتابخانه پشتیبانی DPC برای EMMها
کتابخانه پشتیبانی DPC برای EMMها شامل کلاسهای کمکی و کمکی است که تأمین و مدیریت دستگاههای اندروید را در محیط سازمانی تسهیل میکند. این کتابخانه به شما امکان میدهد از ویژگیهای مهم برنامههای DPC خود بهرهمند شوید:
- پشتیبانی از تأمین حسابهای مدیریتشده گوگل پلی : تأمین حسابهای مدیریتشده گوگل پلی از برنامه DPC مستلزم آن است که برنامههای گوگل پلی و سرویسهای گوگل پلی حداقل الزامات نسخه را برآورده کنند. با این حال، بهروزرسانی این برنامهها میتواند پیچیده باشد. کتابخانه پشتیبانی DPC بهروزرسانی این برنامهها را بر عهده میگیرد و همچنین سازگاری با بهروزرسانیهای آینده فرآیند تأمین حسابهای مدیریتشده گوگل پلی را تضمین میکند. برای جزئیات بیشتر به پشتیبانی از تأمین حسابهای مدیریتشده گوگل پلی مراجعه کنید.
- پشتیبانی از پیکربندیهای مدیریتشده : استفاده از Play EMM API برای مدیریت پیکربندیهای مدیریتشده برای برنامههای تأییدشده، سادهترین راه برای پیادهسازی پیکربندیهای مدیریتشده در DPC شماست. کتابخانه پشتیبانی DPC به شما امکان میدهد وظیفه اعمال پیکربندیهای مدیریتشده (که قبلاً محدودیتهای برنامه نامیده میشدند) را که توسط مدیر با استفاده از کنسول EMM شما تنظیم شده است، به Google Play واگذار کنید. استفاده از Play EMM API برای مدیریت پیکربندیهای مدیریتشده، امکان اعمال پیکربندی برنامه را به صورت خودکار در حین نصب فراهم میکند. برای اطلاعات بیشتر در مورد نحوه فعال کردن این قابلیت در DPC خود، به بخش «اعمال پیکربندیهای مدیریتشده برای برنامههای کاری» مراجعه کنید.
برای دانلود کتابخانه، مراحل زیر را دنبال کنید. وظایف شرح داده شده در این راهنما، استفاده از کتابخانه پشتیبانی DPC را در نظر میگیرند.
کتابخانه پشتیبانی DPC را دانلود کنید
برای استفاده از کتابخانه پشتیبانی DPC، آن را از انجمن ارائه دهنده EMM اندروید انترپرایز دانلود کنید. شما باید این کتابخانه را به فایل build.gradle خود اضافه کنید و هنگام ساخت برنامه DPC خود، سایر وابستگیها را نیز در نظر بگیرید. به عنوان مثال، این کتابخانه به کتابخانه کلاینت احراز هویت Google Play Services نسخه 11.4.0 نیاز دارد.
- کتابخانه را به فایل
build.gradleاضافه کنید:گرووی
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
کاتلین
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- کتابخانه کلاینت احراز هویت سرویسهای گوگل پلی نسخه ۱۱.۴.۰ را به فایل build.gradle اضافه کنید:
گرووی
implementation 'com.google.android.gms:play-services-auth:11.4.0'
کاتلین
implementation("com.google.android.gms:play-services-auth:11.4.0")
این کتابخانه برای اجرا به مجوزهای خاصی نیاز دارد، بنابراین هنگام آپلود در گوگل پلی باید این مجوزها را به مانیفست برنامه 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 یک پروفایل کاری ایجاد کنید. (در برخی مستندات، پروفایل مدیریتشده یک اصطلاح کلی است که به معنای همان پروفایل کاری در زمینه اندروید در سازمان است.) نام بسته ادمین دستگاه را به عنوان یک مورد اضافی وارد کنید:
کاتلین
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() موارد زیر را انجام میدهد:
- تأیید میکند که دستگاه با سیاستهای دستگاه EMM، همانطور که در «تنظیم سیاستهای دستگاه» توضیح داده شده است، مطابقت دارد.
- برنامههای سیستمی را که مدیر با استفاده از
DevicePolicyManager.enableSystemApp()در نمایه کاری در دسترس قرار داده است، فعال میکند. - اگر دستگاه از Google Play مدیریتشده استفاده میکند، حساب مناسب را به نمایه کاری اضافه کنید تا برنامههای تأییدشده بتوانند روی دستگاه نصب شوند.
- حسابهای گوگل پلی مدیریتشده : برای جزئیات بیشتر به «اطمینان از محیط کار برای حسابهای گوگل پلی مدیریتشده» و «افزودن یک حساب گوگل پلی مدیریتشده» مراجعه کنید.
- حسابهای Google : از
AccountManager.addAccount()استفاده کنید.
فعال کردن نمایه کاری
پس از انجام این وظایف، متد 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 برای سیاستهای فعلی پرس و جو میکند و سپس این سیاستها را با استفاده از رابط برنامهنویسی مدیریت دستگاه ( DAP) اعمال میکند.
برای اطلاعات در مورد نحوه اعمال سیاستهای دستگاه، به بخش سیاستها مراجعه کنید.
اعمال پیکربندیهای مدیریتشده به برنامههای کاری
پیکربندیهای مدیریتشده به شما این امکان را میدهند که به مشتریان خود این امکان را بدهید که برنامههایی را که برای استقرار تأیید کردهاند، از قبل پیکربندی کنند و در صورت نیاز به تغییر پیکربندی، آن برنامهها را به راحتی بهروزرسانی کنند. پیکربندی یک برنامه قبل از استقرار، تضمین میکند که سیاستهای امنیتی و سایر سیاستهای سازمان پس از نصب برنامه روی دستگاه هدف رعایت میشوند.
قابلیتهای برنامه توسط توسعهدهنده برنامه در یک طرح XML (طرح پیکربندیهای مدیریتشده) تعریف میشوند که هنگام آپلود در گوگل پلی همراه برنامه است (توسعهدهندگان برنامه، برای جزئیات بیشتر به بخش «تنظیم پیکربندیهای مدیریتشده » مراجعه کنید).
شما این طرحواره را از برنامه بازیابی میکنید تا برای مدیران مشتری خود در کنسول EMM نمایش داده شود، یک رابط کاربری ارائه دهید که در آن گزینههای مختلف تعریف شده در طرحواره نمایش داده شود و مدیران را قادر سازد تنظیمات برنامه را از قبل پیکربندی کنند. پیکربندی مدیریتشده حاصل که توسط مدیر تنظیم میشود، معمولاً در سرور EMM ذخیره میشود که سپس از API Play EMM برای تنظیم Managedconfigurationsfordevice یا Managedconfigurationsforuser استفاده میکند. برای جزئیات بیشتر به Managed Configurations through Play مراجعه کنید.
پیکربندیهای مدیریتشده را میتوان با استفاده از API Play EMM (رویکرد پیشنهادی) یا مستقیماً از DPC (که در بخش «اعمال پیکربندیهای مدیریتشده مستقیماً از DPC » توضیح داده شده است) به برنامه اعمال کرد. استفاده از API Play EMM مزایای متعددی دارد، از جمله پیادهسازی آسان، زیرا میتوانید از کتابخانه پشتیبانی DPC برای سادهسازی وظایف DPC استفاده کنید. علاوه بر این، API Play EMM:
- پیکربندی را به صورت خودکار هنگام نصب یک برنامه جدید تنظیم میکند، بنابراین اطمینان حاصل میشود که برنامه در اولین باری که کاربر آن را اجرا میکند، آماده است.
- به شما امکان میدهد پیکربندیها را بر اساس هر کاربر مدیریت کنید، بنابراین میتوانید از نظارت بر تأمین منابع بر اساس هر دستگاه جلوگیری کنید.
اعمال پیکربندیهای مدیریتشده با استفاده از Play EMM API
برای استفاده از API Play EMM برای پیکربندیهای مدیریتشده، DPC باید به Google Play اجازه تنظیم پیکربندیها را بدهد. کتابخانه پشتیبانی DPC با پروکسی کردن پیکربندی ارسالشده توسط Google Play، این کار را برای شما انجام میدهد.
برای استفاده از API مربوط به Play EMM، کتابخانه پشتیبانی 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 خود، میتوانید از API EMM گوگل پلی در کنسول و سرور EMM خود برای اعمال پیکربندیهای مدیریتشده به برنامههای تأیید شده استفاده کنید، به جای اینکه این وظایف را مستقیماً در DPC کدنویسی کنید. برای جزئیات بیشتر به Managed Configurations through Play مراجعه کنید.
اعمال پیکربندیهای مدیریتشده مستقیماً از DPC
برای تغییر تنظیمات پیکربندی یک برنامه مستقیماً از DPC، متد DevicePolicyManager.setApplicationRestrictions() را فراخوانی کنید و پارامترهای مربوط به DeviceAdminReceiver برنامه DPC، نام بسته برنامه هدف و Bundle شامل پیکربندی مدیریتشده برنامه که توسط مدیر تنظیم شده است را ارسال کنید. برای جزئیات بیشتر به بخش «نحوه تعامل کنسول DPC و EMM» و «تنظیم پیکربندیهای مدیریتشده» مراجعه کنید. با این حال، توجه داشته باشید که این رویکرد جایگزین برای اعمال پیکربندیهای مدیریتشده در استقرارهای مدیریتشده حسابهای Google Play توصیه نمیشود.
پشتیبانی مدیریتشده از حساب گوگل پلی
کتابخانه پشتیبانی DPC شامل پشتیبانی برای تأمین حسابهای مدیریتشده گوگل پلی است. برای استفاده از این پشتیبانی، ابتدا باید کتابخانه را راهاندازی اولیه کنید و سپس میتوانید از محیط کاری مطمئن شوید و یک حساب مدیریتشده گوگل پلی اضافه کنید .
پشتیبانی از حسابهای گوگل پلی مدیریتشده را در DPC خود راهاندازی کنید.
این کلاس را در DPC خود وارد کنید:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
کتابخانه سازگاری تأمین را مقداردهی اولیه کنید. در این مثال، "admin" ComponentName DeviceAdminReceiver است.
کاتلین
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
جاوا
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
محیط کاری حسابهای مدیریتشده گوگل پلی را تضمین کنید
پس از اینکه DPC دستگاهی را در حالت مالک پروفایل ( ACTION_PROVISION_MANAGED_PROFILE ) یا حالت مالک دستگاه ( ACTION_PROVISION_MANAGED_DEVICE ) آماده کرد، با فراخوانی موارد زیر مطمئن شوید که دستگاه میتواند از حسابهای گوگل پلی مدیریتشده پشتیبانی کند:
کاتلین
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
جاوا
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
این فراخوانی، موفقیت یا شکست این فرآیند را گزارش میدهد. هنگامی که فراخوانی با موفقیت انجام شود، میتوان یک حساب Google Play مدیریتشده اضافه کرد. اگر فراخوانی خطایی را گزارش دهد، از کاربر میخواهد که مطمئن شود دستگاه به شبکه متصل است (برای مثال، اگر دانلود ناموفق باشد). در موارد دیگر، این شکست را به Google گزارش دهید.
کاتلین
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) } }
افزودن حساب گوگل پلی مدیریتشده
AccountManager چارچوب اندروید میتواند یک حساب گوگل پلی مدیریتشده را به دستگاه اضافه کند. برای سادهسازی تعامل با AccountManager ، از تابع کمکی (که در مثال زیر نشان داده شده است) از کتابخانه پشتیبانی DPC استفاده کنید. این تابع توکن برگردانده شده توسط سرور گوگل پلی را مدیریت میکند و آمادهسازی حساب گوگل پلی مدیریتشده را تسهیل میکند. این تابع زمانی برمیگردد که حساب گوگل پلی مدیریتشده در وضعیت معتبری باشد:
کاتلین
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
جاوا
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
-
token— توکن احراز هویت کاربر که توسط فراخوانیUsers.generateAuthenticationToken()در رابط برنامهنویسی کاربردی EMM گوگل پلی تولید میشود. -
accountAddedCallback— حساب گوگل پلی مدیریتشدهای که با موفقیت به دستگاه اضافه شده است را برمیگرداند. این فراخوانی باید شامل متدهای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). } };
مستندات مرتبط
- برای کسب اطلاعات بیشتر در مورد API مدیریت دستگاه، به مدیریت دستگاه مراجعه کنید.
- برای آشنایی با روشهای تأمین Android Enterprise، به بخش دستگاههای تأمینکننده در راهنمای توسعهدهندگان Android Enterprise مراجعه کنید.
- برای نمونهای از GitHub که نحوه ایجاد یک پروفایل کاری پایه را نشان میدهد، به BasicManagedProfile مراجعه کنید.
- برای نمونهای از گیتهاب که نحوه تنظیم پیکربندیها روی برنامههای دیگر به عنوان مالک پروفایل را نشان میدهد، به AppRestrictionEnforcer مراجعه کنید.