این راهنما نحوه توسعه کنترلکننده خطمشی دستگاه (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» حداقل شرایط نسخه را برآورده کنند. اما بهروزرسانی این برنامهها میتواند پیچیده باشد. کتابخانه پشتیبانی DPC بهروزرسانی این برنامهها را برعهده میگیرد و همچنین سازگاری با بهروزرسانیهای آتی فرایند تدارک «حسابهای Google Play» مدیریتشده را تضمین میکند. برای جزئیات، به پشتیبانی آمادهسازی حسابهای Google Play مدیریتشده مراجعه کنید.
- پشتیبانی از پیکربندیهای مدیریتشده: استفاده از Play EMM API برای رسیدگی به پیکربندیهای مدیریتشده برای برنامههای تأییدشده، سادهترین راه برای پیادهسازی پیکربندیهای مدیریتشده در DPC شما است. «کتابخانه پشتیبانی DPC» به شما امکان میدهد وظیفه اعمال پیکربندیهای مدیریتشده (محدودیتهای برنامه سابق) را که سرپرست بااستفاده از کنسول EMM شما تنظیم کرده است به Google Play واگذار کنید. استفاده از Play EMM API برای مدیریت پیکربندیهای مدیریتشده به پیکربندی برنامه اجازه میدهد بهطور اتمی درطول نصب اعمال شود. برای کسب اطلاعات بیشتر درباره نحوه فعال کردن این قابلیت در DPC، به اعمال پیکربندیهای مدیریتشده در برنامههای کاری مراجعه کنید.
برای بارگیری کتابخانه، مراحل زیر را دنبال کنید. تکالیف شرحدادهشده در این راهنما استفاده از «کتابخانه پشتیبانی DPC» را فرض میکند.
بارگیری کتابخانه پشتیبانی DPC
برای استفاده از «کتابخانه پشتیبانی DPC»، کتابخانه را از انجمن ارائهدهنده EMM در Android Enterprise بارگیری کنید. باید کتابخانه را به فایل build.gradle خود اضافه کنید و هنگام ساختن برنامه DPC خود، به سایر وابستگیها توجه کنید. برای مثال، کتابخانه به نسخه ۱۱.۴.۰ کتابخانه مشتری احراز هویت خدمات Google Play نیاز دارد.
- کتابخانه را به فایل
build.gradleاضافه کنید:
شیک
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
کاتلین
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- نسخه ۱۱.۴.۰
کتابخانه کارخواه اصالتسنجی «خدمات Google Play» را به فایل 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) باشد، همانطور که در
مدیریت دستگاه شرح داده شده است.
ایجاد نمایه کاری
برای نمونهای که نحوه ایجاد نمایه کاری پایه را نشان میدهد، 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()
کارهای زیر را انجام میدهد:
- تأیید میکند که دستگاه از خطمشیهای دستگاه EMM پیروی میکند، همانطور که در راهاندازی خطمشیهای دستگاه شرح داده شده است.
- برنامههای سیستمی را که سرپرست بااستفاده از
DevicePolicyManager.enableSystemApp()در نمایه کاری دردسترس قرار داده است فعال میکند. - اگر دستگاه از Google Play مدیریتشده استفاده میکند، حساب مناسب را به نمایه کاری اضافه میکند تا برنامههای تأییدشده بتوانند در دستگاه نصب شوند.
- حسابهای Google Play مدیریتشده: برای جزئیات، اطمینان از محیط کاری برای حسابهای Google Play مدیریتشده و افزودن حساب 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 را برای خطمشیهای فعلی پُرسمان میکند، سپس خطمشیها را بااستفاده از میانای برنامهسازی کاربردی مدیریت دستگاه اعمال میکند.
برای اطلاعات درباره نحوه اعمال خطمشیهای دستگاه، به خطمشیها مراجعه کنید.
اعمال پیکربندیهای مدیریتشده برای برنامههای کاری
پیکربندیهای مدیریتشده به شما امکان میدهند تا به مشتریانتان این توانایی را بدهید که برنامههایی را که برای استقرار تأیید کردهاند ازپیش پیکربندی کنند و وقتی پیکربندی نیاز به تغییر دارد، آن برنامهها را بهراحتی بهروز کنند. پیکربندی برنامه قبلاز استقرار تضمین میکند که خطمشیهای امنیتی و سایر خطمشیهای سازمان هنگام نصب برنامه در دستگاه هدف رعایت میشود.
قابلیتهای برنامه توسط توسعهدهنده برنامه در طرحواره 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 است.
کاتلین
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، نام بسته برنامه هدف، و Bundle شامل پیکربندی مدیریتشده برنامه را که توسط سرپرست تنظیم شده است ارسال کنید. برای جزئیات بیشتر، نحوه تعامل کنسول EMM و DPC و راهاندازی پیکربندیهای مدیریتشده را ببینید. بااینحال، توجه داشته باشید که این رویکرد جایگزین برای اعمال پیکربندیهای مدیریتشده در استقرارهای «حسابهای Google Play مدیریتشده» توصیه نمیشود.
پشتیبانی از تدارک «حساب Google Play مدیریتشده»
کتابخانه پشتیبانی DPC شامل پشتیبانی برای تدارک «حسابهای Google Play» مدیریتشده است. برای استفاده از این پشتیبانی، ابتدا باید کتابخانه را مقداردهی اولیه کنید، سپس میتوانید از محیط کاری مطمئن شوید و «حساب Google Play» مدیریتشده اضافه کنید.
مقداردهی اولیه پشتیبانی از «حسابهای Google Play» مدیریتشده در DPC شما
این کلاس را در DPC خود وارد کنید:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
کتابخانه سازگاری آمادهسازی را مقداردهی اولیه کنید. در این مثال، «سرپرست»
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);
فراخوانی برگشتی موفقیت یا شکست این فرایند را گزارش میکند. وقتی فراخوانی برگشتی با موفقیت برگردد، میتوان «حساب 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) } }
افزودن «حساب 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 APIUsers.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، به تدارک دستگاهها در راهنمای توسعهدهنده Android Enterprise مراجعه کنید.
- برای نمونه GitHub که نحوه ایجاد نمایه کاری پایه را نشان میدهد، BasicManagedProfile را ببینید.
- برای نمونه GitHub که نشان میدهد چگونه میتوان پیکربندیها را در برنامههای دیگر بهعنوان مالک نمایه تنظیم کرد، به AppRestrictionEnforcer مراجعه کنید.