این صفحه یک نمای کلی از APIهای سازمانی، ویژگیها و تغییرات رفتاری موجود در Android 9 ارائه میکند.
رابط کاربری پروفایل کاری
اندروید 9 (سطح API 28) شامل تغییرات رابط کاربری در راهانداز پیشفرض است تا به کاربران کمک کند برنامههای شخصی و کاری را جدا کنند. سازندگان دستگاههایی که از این پشتیبانی میکنند میتوانند برنامههای کاربران را در برگههای کاری و شخصی جداگانه ارائه کنند. ما همچنین با قرار دادن سوئیچ در برگه کاری راهانداز، روشن و خاموش کردن نمایه کاری را برای کاربران دستگاه آسانتر کردهایم.
![](https://developer.android.com/static/images/about/versions/pie/p-work-profile.jpg?hl=fa)
هنگام تهیه نمایههای کاری و دستگاههای مدیریتشده، Android 9 شامل تصاویر متحرک میشود تا به کاربران دستگاه کمک کند تا این ویژگیها را درک کنند.
جابهجایی برنامهها در نمایهها
اندروید 9 شامل APIهایی برای راهاندازی نمونه دیگری از یک برنامه در نمایه دیگری است تا به کاربران کمک کند بین حسابها جابهجا شوند. به عنوان مثال، یک برنامه ایمیل میتواند رابط کاربری ایجاد کند که به کاربر اجازه میدهد بین نمایه شخصی و نمایه کاری جابجا شود تا به دو حساب ایمیل دسترسی پیدا کند. همه برنامهها میتوانند این APIها را برای راهاندازی فعالیت اصلی همان برنامه در صورتی که قبلاً در نمایه دیگر نصب شده باشد، فراخوانی کنند. برای افزودن تغییر حساب بین پروفایل به برنامه خود، مراحل زیر را دنبال کنید تا روش های فراخوانی کلاس CrossProfileApps
را دنبال کنید:
- برای دریافت لیستی از پروفایل هایی که می توانید نمونه دیگری از برنامه را در آن راه اندازی کنید
getTargetUserProfiles()
فراخوانی کنید. این روش بررسی می کند که برنامه در پروفایل ها نصب شده باشد. - با تماس
getProfileSwitchingIconDrawable()
نمادی دریافت کنید که می توانید از آن برای نمایش نمایه دیگری استفاده کنید. - برای دریافت متن محلی که از کاربر می خواهد پروفایل ها را تغییر دهد
getProfileSwitchingLabel()
را فراخوانی کنید. - برای راه اندازی نمونه ای از برنامه خود در نمایه دیگر
startMainActivity()
را فراخوانی کنید.
بررسی کنید که فعالیت اصلی که میخواهید راهاندازی کنید در فایل مانیفست برنامهتان با یک کنش هدف ACTION_MAIN
اعلام شده باشد و شامل یک دسته هدف CATEGORY_LAUNCHER
باشد.
به صورت برنامهریزی نمایههای کاری را روشن یا خاموش کنید
راهانداز پیشفرض (یا برنامههایی که دارای مجوز MANAGE_USERS
یا MODIFY_QUIET_MODE
) میتوانند نمایه کاری را با فراخوانی UserManager.requestQuietModeEnabled()
روشن یا خاموش کنند. میتوانید مقدار بازگشتی را بررسی کنید تا بدانید که آیا کاربر باید اعتبار خود را قبل از تغییر وضعیت تأیید کند یا خیر. از آنجا که ممکن است تغییر فوراً اتفاق نیفتد، به پخش ACTION_MANAGED_PROFILE_AVAILABLE
یا ACTION_MANAGED_PROFILE_UNAVAILABLE
گوش دهید تا بدانید چه زمانی باید رابط کاربری را بهروزرسانی کنید.
برنامه شما میتواند وضعیت نمایه کاری را با تماس UserManager.isQuietModeEnabled()
بررسی کند.
هر برنامه ای را روی یک دستگاه قفل کنید
با شروع اندروید 9، صاحبان دستگاه و دارندگان نمایه (از کاربران ثانویه) میتوانند با قرار دادن برنامه در حالت قفل کردن، هر برنامه را روی صفحه دستگاه قفل کنند. پیش از این، توسعه دهندگان برنامه مجبور بودند از حالت قفل کردن کار در برنامه های خود پشتیبانی کنند . اندروید 9 همچنین APIهای کار قفل را به صاحبان پروفایل کاربران ثانویه غیروابسته نیز گسترش می دهد. برای قفل کردن یک برنامه روی صفحه، مراحل زیر را دنبال کنید:
- با
DevicePolicyManager.setLockTaskPackages()
تماس بگیرید تا برنامه های مجاز را برای حالت کار قفل کنید. - با
ActivityOptions.setLockTaskEnabled()
تماس بگیرید تا یک برنامه مجاز را در حالت قفل کردن کار راه اندازی کنید.
برای متوقف کردن یک برنامه در حالت قفل کار، برنامه را از لیست مجوزهای حالت کار قفل با استفاده از DevicePolicyManager.setLockTaskPackages()
حذف کنید.
ویژگی های رابط کاربری سیستم را فعال کنید
وقتی حالت کار قفل فعال است، صاحبان دستگاه و صاحبان نمایه میتوانند با فراخوانی DevicePolicyManager.setLockTaskFeatures()
و ارسال قسمتی از پرچمهای ویژگی زیر، ویژگیهای رابط کاربری سیستم را در دستگاه فعال کنند:
-
LOCK_TASK_FEATURE_NONE
-
LOCK_TASK_FEATURE_SYSTEM_INFO
-
LOCK_TASK_FEATURE_HOME
-
LOCK_TASK_FEATURE_NOTIFICATIONS
را فقط می توان در ترکیب باLOCK_TASK_FEATURE_HOME
استفاده کرد. -
LOCK_TASK_FEATURE_KEYGUARD
-
LOCK_TASK_FEATURE_OVERVIEW
فقط می تواند در ترکیب باLOCK_TASK_FEATURE_HOME
استفاده شود. -
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
میتوانید با DevicePolicyManager.getLockTaskFeatures()
تماس بگیرید تا لیستی از ویژگیهای موجود در دستگاه را هنگامی که حالت کار قفل فعال است، دریافت کنید. وقتی دستگاهی از حالت کار قفل خارج میشود، به حالتی که توسط سایر خطمشیهای دستگاه تعیین شده است، برمیگردد.
محاوره های خطا را سرکوب کنید
در برخی از محیطها، مانند نمایشهای خردهفروشی یا نمایش اطلاعات عمومی، ممکن است نخواهید کادرهای محاورهای خطا را به کاربران نشان دهید. یک کنترلکننده خطمشی دستگاه (DPC) میتواند با افزودن محدودیت کاربر DISALLOW_SYSTEM_ERROR_DIALOGS
، دیالوگهای خطای سیستم را برای برنامههای خراب یا بیپاسخ سرکوب کند. این محدودیت زمانی که توسط مالک دستگاه اعمال میشود، همه گفتگوها را تحت تأثیر قرار میدهد، اما وقتی محدودیت توسط مالکان نمایه اعمال میشود، فقط گفتگوهای خطا که در کاربر اصلی یا ثانویه نشان داده شده است، سرکوب میشوند. این محدودیت بر نمایههای کاری تأثیر نمیگذارد.
در اندروید 9، برنامههایی که در حالت تمام صفحه همهجانبه اجرا میشوند، حباب یادآوری را در حالت کار قفل نشان نمیدهند. حباب یادآور پانلی است که به کاربران نشان داده می شود (در اولین راه اندازی) که نحوه خروج از حالت غوطه ور را توضیح می دهد.
پشتیبانی از چندین کاربر در دستگاه های اختصاصی
اندروید 9 مفهوم یک کاربر زودگذر را برای دستگاه های اختصاصی (که قبلاً دستگاه های COSU نامیده می شد) معرفی می کند. کاربران زودگذر، کاربران کوتاه مدتی هستند که برای مواردی در نظر گرفته شده اند که چند کاربر یک دستگاه اختصاصی واحد را به اشتراک می گذارند. این شامل جلسات عمومی کاربر در دستگاههایی مانند کیوسکهای ورود به کتابخانه یا مهماننوازی، و همچنین جلسات دائمی بین مجموعه ثابتی از کاربران در دستگاهها، بهعنوان مثال، کارگران شیفت میشود.
کاربران زودگذر باید در پس زمینه ایجاد شوند. آنها به عنوان کاربران ثانویه در یک دستگاه ایجاد می شوند و (به همراه برنامه ها و داده های مرتبط) با توقف، جابجایی یا راه اندازی مجدد دستگاه حذف می شوند. برای ایجاد یک کاربر زودگذر، صاحبان دستگاه می توانند:
- هنگام فراخوانی
DevicePolicyManager.createAndManageUser()
پرچمMAKE_USER_EPHEMERAL
را تنظیم کنید. - برای راهاندازی کاربر زودگذر در پسزمینه
DevicePolicyManager.startUserInBackground()
را فراخوانی کنید.
توجه داشته باشید، برنامههایی که Android 9 را هدف قرار میدهند، هنگام فراخوانی createAndManageUser()
باید UserManager.UserOperationException
را بگیرند. متد getUserOperationResult()
استثنا را فراخوانی کنید تا متوجه شوید که چرا کاربر ایجاد نشده است.
اعلان های رویداد را دریافت کنید
DeviceAdminReceiver
اعلان هایی را برای رویدادهای زیر دریافت می کند:
-
onUserStarted()
: زمانی که کاربر شروع به کار می کند فراخوانی می شود. -
onUserSwitched()
: هنگامی که سوئیچ کاربر تکمیل می شود فراخوانی می شود. -
onUserStopped()
: همراه باonUserRemoved()
زمانی که کاربر متوقف می شود یا از سیستم خارج می شود فراخوانی می شود.
نمایش پیام های رویداد برای کاربران
صاحبان دستگاه می توانند پیام هایی را که هنگام شروع و پایان جلسات خود به کاربران نمایش داده می شود پیکربندی کنند:
- از
DevicePolicyManager.setStartUserSessionMessage()
برای تنظیم پیامی که هنگام شروع جلسه کاربر به کاربر نمایش داده می شود، استفاده کنید. برای بازیابی پیام، باDevicePolicyManager.getStartUserSessionMessage()
تماس بگیرید. - از
DevicePolicyManager.setEndUserSessionMessage()
برای تنظیم پیامی که پس از پایان جلسه کاربر به کاربر نمایش داده می شود، استفاده کنید. برای بازیابی پیام، باDevicePolicyManager.getEndUserSessionMessage()
تماس بگیرید.
از سیستم خارج شوید و کاربران را متوقف کنید
صاحبان دستگاه می توانند از DevicePolicyManager.setLogoutEnabled()
استفاده کنند تا مشخص کنند که خروج از سیستم برای کاربران ثانویه فعال است یا خیر. برای بررسی فعال بودن خروج از سیستم، با DevicePolicyManager.isLogoutEnabled()
تماس بگیرید.
دارندگان نمایه کاربران ثانویه می توانند برای توقف کاربر ثانویه و بازگشت به کاربر اصلی DevicePolicyManager.logoutUser()
را فراخوانی کنند.
صاحبان دستگاه می توانند از DevicePolicyManager.stopUser()
برای متوقف کردن کاربر ثانویه مشخص شده استفاده کنند.
ذخیره بسته
برای سادهسازی ارائهدهی کاربر در دستگاههای مشترک با مجموعه ثابتی از کاربران، مانند دستگاههایی برای کارگران شیفت، میتوان بستههایی را که برای جلسات چند کاربره مورد نیاز است ذخیره کرد:
با
DevicePolicyManager.setKeepUninstalledPackages()
تماس بگیرید تا لیست بسته هایی را که باید به عنوان APK نگهداری شوند مشخص کنید. برای بازیابی لیستی از این بسته ها، باDevicePolicyManager.getKeepUninstalledPackages()
تماس بگیرید.برای نصب بسته ای که پس از حذف از طریق
setKeepUninstalledPackages()
نگه داشته شده است،DevicePolicyManager.installExistingPackage()
را فراخوانی کنید.
روش ها و ثابت های اضافی
Android 9 همچنین شامل روش ها و ثابت های زیر برای پشتیبانی بیشتر از جلسات کاربر در دستگاه های مشترک است:
-
DevicePolicyManager.getSecondaryUsers()
لیستی از تمام کاربران ثانویه یک دستگاه را دریافت می کند. -
DISALLOW_USER_SWITCH
یک محدودیت کاربری است که می توانید با فراخوانیDevicePolicyManager.addUserRestriction()
را فعال کنید تا تغییر کاربری را مسدود کنید. -
LEAVE_ALL_SYSTEM_APPS_ENABLED
یک پرچم موجود برایDevicePolicyManager.createAndManageUser()
است. وقتی تنظیم شود، برنامههای سیستم در حین تهیه کاربر غیرفعال نمیشوند. -
UserManager.UserOperationException
توسطDevicePolicyManager.createAndManageUser()
پرتاب می شود زمانی که یک کاربر نمی تواند ایجاد شود — استثنا حاوی دلیل شکست است.
داده های بسته را پاک کنید و حساب ها را حذف کنید
صاحبان دستگاه و صاحبان نمایه می توانند برای پاک کردن داده های کاربر برای یک بسته معین clearApplicationUserData()
را فراخوانی کنند. برای حذف یک حساب از AccountManager
، صاحبان دستگاه و نمایه می توانند removeAccount()
را فراخوانی کنند.
محدودیت های کاربر و افزایش کنترل بر تنظیمات
اندروید 9 مجموعهای از محدودیتهای کاربر را برای DPCها و همچنین توانایی پیکربندی APN، زمان و منطقه زمانی و تنظیمات سیستم در یک دستگاه معرفی میکند.
APN ها را پیکربندی کنید
دارندگان دستگاه می توانند از روش های زیر در کلاس DevicePolicyManager
برای پیکربندی APN ها در دستگاه استفاده کنند:
-
addOverrideApn()
-
updateOverrideApn()
-
removeOverrideApn()
-
getOverrideApns()
-
setOverrideApnEnabled()
-
isOverrideApnEnabled()
زمان و منطقه زمانی را پیکربندی کنید
دارندگان دستگاه می توانند از روش های زیر در کلاس DevicePolicyManager
برای تنظیم زمان و منطقه زمانی در دستگاه استفاده کنند:
اعمال محدودیت های کاربر در تنظیمات مهم
اندروید 9 محدودیت های کاربر را برای غیرفعال کردن ویژگی ها و تنظیمات سیستم اضافه می کند. برای افزودن یک محدودیت، DevicePolicyManager.addUserRestriction()
را با یکی از ثابت های UserManager
زیر فراخوانی کنید:
-
DISALLOW_AIRPLANE_MODE
-
DISALLOW_AMBIENT_DISPLAY
-
DISALLOW_CONFIG_BRIGHTNESS
-
DISALLOW_CONFIG_DATE_TIME
-
DISALLOW_CONFIG_LOCATION
-
DISALLOW_CONFIG_SCREEN_TIMEOUT
-
DISALLOW_PRINTING
اگر DISALLOW_CONFIG_BRIGHTNESS
و DISALLOW_CONFIG_SCREEN_TIMEOUT
روی دستگاهی اعمال شوند، مالکان دستگاه همچنان میتوانند با استفاده از API DevicePolicyManager.setSystemSetting()
تنظیمات روشنایی صفحه ، حالت روشنایی صفحه و تنظیمات مهلت زمانی صفحه را روی دستگاه تنظیم کنند.
داده های اندازه گیری شده
صاحبان دستگاه و مالکان نمایه می توانند از استفاده برنامه ها از شبکه های داده اندازه گیری شده دستگاه جلوگیری کنند. هنگامی که کاربر به دلیل هزینه، محدودیت داده یا مشکلات باتری و عملکرد، به مصرف سنگین داده حساس باشد، شبکه اندازهگیری شده در نظر گرفته میشود. برای جلوگیری از استفاده برنامهها از شبکههای اندازهگیری، با DevicePolicyManager.setMeteredDataDisabledPackages()
تماس بگیرید و فهرستی از نامهای بسته را ارسال کنید. برای بازیابی برنامههای محدود کنونی، با DevicePolicyManager.getMeteredDataDisabledPackages()
تماس بگیرید.
برای کسب اطلاعات بیشتر در مورد داده های اندازه گیری شده در Android، بهینه سازی استفاده از داده شبکه را بخوانید.
DPC ها را مهاجرت کنید
کنترلکنندههای خطمشی دستگاه (DPC) میتوانند مالکیت دستگاه یا نمایه کاری خود را به DPC دیگری منتقل کنند. میتوانید مالکیت را برای انتقال برخی از ویژگیها به API مدیریت Android ، انتقال دستگاهها از DPC قدیمی خود یا کمک به سرپرستان فناوری اطلاعات در انتقال به EMM انتقال دهید. از آنجایی که شما فقط مالکیت DPC را تغییر میدهید، نمیتوانید از این ویژگی برای تغییر نوع مدیریت استفاده کنید، به عنوان مثال، انتقال از یک دستگاه مدیریتشده به نمایه کاری یا بالعکس.
میتوانید از منبع XML سیاستهای سرپرست دستگاه استفاده کنید تا نشان دهید که این نسخه از DPC شما از انتقال پشتیبانی میکند. یک DPC هدف نشان میدهد که میتواند با گنجاندن عنصری به نام <support-transfer-ownership>
مالکیت را دریافت کند. مثال زیر نشان می دهد که چگونه می توانید این کار را در فایل XML سرپرست دستگاه DPC خود انجام دهید:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<support-transfer-ownership />
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
</uses-policies>
</device-admin>
DPCهایی که می خواهند مالکیت را به برنامه جدید DPC منتقل کنند، می توانند با فراخوانی متد DeviceAdminInfo
supportsTransferOwnership()
بررسی کنند که آیا نسخه DPC هدف از مهاجرت پشتیبانی می کند. قبل از انتقال مالکیت، این مسئولیت منبع DPC است که DPC هدف را با مقایسه امضاهای برنامه تأیید کند. کلاس PackageManager
شامل متدهایی برای کار با امضاهای کد است.
Android سیستم منبع DPC و خطمشیهای کاربر را از طریق انتقال مالکیت حفظ میکند — DPCها نیازی به انتقال این موارد ندارند. یک DPC منبع میتواند دادههای سفارشی را با استفاده از جفتهای کلید-مقدار در یک PersistableBundle
به DPC هدف ارسال کند. پس از انتقال موفقیت آمیز، DPC هدف می تواند این داده ها را با فراخوانی DevicePolicyManager.getTransferOwnershipBundle()
بازیابی کند.
مراحل انتقال مالکیت دستگاه مدیریت شده یا نمایه کاری یکسان است:
- منبع DPC بررسی میکند که نسخه DPC هدف از مهاجرت پشتیبانی میکند و تأیید میکند که امضای برنامه DPC هدف با مقدار مورد انتظار مطابقت دارد.
- منبع DPC،
transferOwnership()
برای شروع انتقال فراخوانی می کند. - این سیستم DPC مورد نظر را به عنوان سرپرست فعال تبدیل می کند و آن را به عنوان مالک دستگاه مدیریت شده یا نمایه کاری تعیین می کند.
- DPC هدف، callback
onTransferOwnershipComplete()
را دریافت می کند و می تواند خود را با استفاده از مقادیر آرگومانbundle
پیکربندی کند. - اگر مشکلی در انتقال رخ دهد، سیستم مالکیت را به منبع DPC باز می گرداند. اگر DPC منبع شما باید تأیید کند که انتقال مالکیت با موفقیت انجام شده است، با
isAdminActive()
تماس بگیرید تا بررسی کنید که منبع DPC دیگر مدیر فعال نیست.
وقتی مالک نمایه تغییر میکند، همه برنامههای در حال اجرا در نمایه کاری، پخش ACTION_PROFILE_OWNER_CHANGED
را دریافت میکنند. برنامههایی که روی دستگاه مدیریتشده اجرا میشوند، پخش ACTION_DEVICE_OWNER_CHANGED
را هنگامی که مالک دستگاه تغییر میکند، دریافت میکنند.
نمایه های کار در دستگاه های کاملاً مدیریت شده
انتقال دو نمونه از DPC در حال اجرا به عنوان مالک دستگاه و مالک نمایه در دو مرحله انجام می شود. هنگامی که نمایه شخصی و نمایه کاری وابسته هستند ، انتقال را به ترتیب زیر تکمیل کنید:
- ابتدا، مالکیت نمایه کاری را منتقل کنید.
- منتظر تماس
DeviceAdminReceiver
onTransferAffiliatedProfileOwnershipComplete()
بمانید تا تأیید شود که نمایه کاری به DPC هدف منتقل شده است. - در نهایت، مالکیت دستگاه مدیریت شده را به DPC هدف منتقل کنید.
بهروزرسانیهای هوایی (OTA) را به تعویق بیندازید
دارندگان دستگاهها میتوانند بهروزرسانیهای سیستم OTA را برای دستگاهها تا ۹۰ روز به تعویق بیاندازند تا نسخه سیستمعامل در حال اجرا بر روی این دستگاهها را در دورههای حساس (مانند تعطیلات) ثابت کنند. این سیستم یک بافر اجباری 60 روزه را پس از هر دوره یخ زدگی تعریف شده اعمال می کند تا از یخ زدن دستگاه به طور نامحدود جلوگیری کند.
در طول دوره یخ زدگی:
- دستگاهها هیچ اعلانی درباره بهروزرسانیهای OTA در انتظار دریافت نمیکنند.
- دستگاه ها هیچ به روز رسانی OTA را در سیستم عامل نصب نمی کنند.
- کاربران دستگاه نمیتوانند بهصورت دستی بهروزرسانیهای OTA را در تنظیمات بررسی کنند.
برای تنظیم دوره توقف، با SystemUpdatePolicy.setFreezePeriods()
تماس بگیرید. از آنجایی که دوره انجماد سالانه تکرار می شود، تاریخ شروع و پایان دوره با اعداد صحیح نشان داده می شود که تعداد روزهای شروع سال را شمارش می کنند. روز شروع باید حداقل 60 روز پس از پایان هر دوره انجماد قبلی شروع شود. دارندگان دستگاه می توانند با SystemUpdatePolicy.getFreezePeriods()
تماس بگیرند تا لیستی از دوره های انجماد را که قبلاً روی شیء خط مشی به روز رسانی سیستم تنظیم شده است دریافت کنند. DevicePolicyManager.getSystemUpdatePolicy()
بهروزرسانی شده است تا دورههای توقف تنظیم شده توسط مالک دستگاه را برگرداند.
اشتراکگذاری را در نمایه کاری محدود کنید
دارندگان نمایه میتوانند با افزودن محدودیت کاربری DISALLOW_SHARE_INTO_MANAGED_PROFILE
، از اشتراکگذاری دادههای شخصی کاربران در نمایه کاری در دستگاه جلوگیری کنند. این محدودیت از مدیریت و اشتراک گذاری قصد زیر جلوگیری می کند:
- برنامههای نمایه شخصی دادهها و فایلها را با برنامههای نمایه کاری به اشتراک میگذارند.
- با برنامههای نمایه کار کنید که موارد را از نمایه شخصی انتخاب میکنند - به عنوان مثال، تصاویر یا فایلها.
پس از تنظیم این محدودیت، DPC شما همچنان میتواند با فراخوانی addCrossProfileIntentFilter()
هدفهای فعالیت بین پروفایل را مجاز کند.
کلیدهای سخت افزاری و گواهی ماشین
Android 9 API هایی را اضافه می کند تا به شما کمک کند با کلیدها و گواهی هایی کار کنید که می توانید آنها را برای شناسایی ایمن دستگاه ها ترکیب کنید. یک DPC که در حالتهای مالک نمایه یا مالک دستگاه اجرا میشود، یا نصبکننده گواهی تفویضشده ، میتواند کارهای زیر را انجام دهد:
- کلیدها و گواهیها را در سختافزار امن (مانند یک محیط اجرای مطمئن (TEE) یا Secure Element (SE)) دستگاه Android ایجاد کنید. کلیدهای تولید شده هرگز سخت افزار امن را ترک نمی کنند و می توانند از KeyChain اندروید استفاده شوند. با
DevicePolicyManager.generateKeyPair()
تماس بگیرید که الگوریتم را تامین می کند (بهKeyPairGenerator
مراجعه کنید) و هر شناسه سخت افزاری که می خواهید تأیید شود، مانند شماره سریال یا IMEI. برای کسب اطلاعات بیشتر در مورد تغییرات سخت افزاری ایمن، به پیشرفت های امنیتی Android 9 مراجعه کنید. - یک گواهی را با یک کلید تولید شده توسط دستگاه موجود مرتبط کنید.
DevicePolicyManager.setKeyPairCertificate()
را فراخوانی کنید که نام مستعار کلید موجود و زنجیره گواهی را ارائه میکند - با گواهی برگ شروع میشود و زنجیره اعتماد را به ترتیب شامل میشود. - قبل از استفاده از کلید مطمئن شوید که سخت افزار ایمن از آن محافظت می کند. برای بررسی مکانیسمهایی که از کلید محافظت میکنند، مراحل موجود در تأیید کلید را دنبال کنید.
- دارندگان دستگاه و نصبکنندگان گواهی تفویض شده میتوانند بیانیه امضاشده شناسههای سختافزار دستگاهها را با نسخههای سیستم Android دریافت کنند.
DevicePolicyManager.generateKeyPair()
را با ارسال یک یا چندID_TYPE_BASE_INFO
،ID_TYPE_SERIAL
،ID_TYPE_IMEI
، یاID_TYPE_MEID
در آرگومانidAttestationFlags
فراخوانی کنید. گواهی برگشتی شامل شناسه های سخت افزاری در پرونده گواهی است. اگر نمیخواهید شناسههای سختافزار گنجانده شود،0
پاس کنید. مالکان نمایه فقط میتوانند اطلاعات سازنده را دریافت کنند (با عبور ازID_TYPE_BASE_INFO
). برای بررسی اینکه آیا دستگاه میتواند شناسهها را تأیید کند، باisDeviceIdAttestationSupported()
تماس بگیرید. - با غیرقابل انتخاب کردن گواهیهای کلید، از سوء استفاده کاربران دستگاه از کلیدهای سازمانی (در کارهای غیر سازمانی) جلوگیری کنید. این سیستم گواهیهای غیرقابل انتخاب را در پانل انتخابگر شامل نمیشود. در روش بازخوانی
DeviceAdminReceiver.onChoosePrivateKeyAlias()
، نام مستعار را به کلید سازمانی خود برگردانید تا سیستم به طور خودکار گواهی را از طرف کاربر انتخاب کند. برای غیرقابل انتخاب کردن یک کلید، متدهایDevicePolicyManager
زیر را فراخوانی کنید:-
setKeyPairCertificate()
و برای آرگومانisUserSelectable
false
ارسال کنید. -
installKeyPair (ComponentName, PrivateKey, Certificate[], String, int)
وINSTALLKEY_SET_USER_SELECTABLE
را از آرگومانflags
حذف کنید.
-
با ترکیب این API ها، شرکت ها می توانند به طور ایمن دستگاه ها را شناسایی کرده و قبل از ارائه دسترسی، یکپارچگی آنها را تأیید کنند:
- دستگاه Android یک کلید خصوصی جدید در سخت افزار امن تولید می کند. از آنجا که کلید خصوصی هرگز سخت افزار امن را ترک نمی کند، مخفی باقی می ماند.
- دستگاه از کلید برای ایجاد و ارسال درخواست امضای گواهی (CSR) به سرور استفاده می کند. CSR شامل سوابق تصدیق حاوی شناسههای دستگاه است.
- سرور زنجیره گواهی را تأیید می کند (ریشه شده در گواهی Google) و فراداده دستگاه را از رکورد گواهی استخراج می کند.
- سرور تأیید می کند که سخت افزار ایمن از کلید خصوصی محافظت می کند و شناسه های دستگاه با سوابق شرکت مطابقت دارند. سرور همچنین میتواند بررسی کند که سیستم Android و نسخههای وصلهای مطابق با الزامات هستند.
- سرور یک گواهی از CSR تولید می کند و گواهی را به دستگاه ارسال می کند.
- دستگاه گواهی را با کلید خصوصی (که در سخت افزار ایمن باقی مانده است) جفت می کند و برنامه ها را قادر می سازد به خدمات سازمانی متصل شوند.
API های امنیتی بیشتر، ویژگی ها و تغییرات
شناسههای گزارشهای امنیتی و گزارشهای شبکه
اندروید 9 شامل شناسههایی در گزارشهای امنیتی و فعالیتهای شبکه است. شناسه عددی بهطور یکنواخت برای هر رویداد افزایش مییابد، و باعث میشود مدیران فناوری اطلاعات بتوانند شکافها را در گزارشهای خود تشخیص دهند. از آنجا که گزارش های امنیتی و گزارش های شبکه مجموعه های جداگانه ای هستند، سیستم مقادیر ID جداگانه را حفظ می کند.
برای دریافت مقدار ID SecurityEvent.getId()
، DnsEvent.getId()
یا ConnectEvent.getId()
را فراخوانی کنید. هر زمان که یک DPC ورود به سیستم را فعال می کند یا هنگامی که دستگاه راه اندازی مجدد می شود، سیستم شناسه را بازنشانی می کند. گزارشهای امنیتی که با فراخوانی DevicePolicyManager.retrievePreRebootSecurityLogs()
واکشی میشوند، شامل این شناسهها نیستند.
ثبت امنیت
گزارش امنیتی به هر SecurityEvent
یک سطح گزارش اختصاص می دهد. برای دریافت سطح log، getLogLevel()
را فراخوانی کنید. این روش یک مقدار سطح گزارش را برمیگرداند که میتواند یکی از این موارد باشد: LEVEL_INFO
، LEVEL_WARNING
، یا LEVEL_ERROR
.
Android 9 رویدادهای فهرست شده در جدول زیر را در گزارشهای امنیتی ثبت میکند. برای بررسی تگ یک رویداد، getTag()
را فراخوانی کنید. برای بازیابی داده های رویداد، getData()
را فراخوانی کنید.
برچسب بزنید | شرح رویداد |
---|---|
TAG_CERT_AUTHORITY_INSTALLED | تلاشی برای نصب یک گواهی ریشه جدید در فضای ذخیرهسازی اعتبار سیستم. |
TAG_CERT_AUTHORITY_REMOVED | تلاش برای حذف یک گواهی ریشه از فضای ذخیرهسازی اعتبار سیستم. |
TAG_CERT_VALIDATION_FAILURE | در حین اتصال، یک گواهی Wi-Fi در بررسی اعتبارسنجی ناموفق بود. |
TAG_CRYPTO_SELF_TEST_COMPLETED | سیستم خودآزمایی رمزنگاری را تکمیل کرد. |
TAG_KEYGUARD_DISABLED_FEATURES_SET | یک برنامه سرپرست ویژگیهای یک دستگاه یا صفحه قفل نمایه کاری را غیرفعال کرد. |
TAG_KEY_DESTRUCTION | تلاش برای حذف یک کلید رمزنگاری |
TAG_KEY_GENERATED | تلاش برای تولید یک کلید رمزنگاری جدید. |
TAG_KEY_IMPORT | تلاش برای وارد کردن یک کلید رمزنگاری جدید. |
TAG_KEY_INTEGRITY_VIOLATION | اندروید یک رمزگذاری یا کلید احراز هویت آسیب دیده را شناسایی کرد. |
TAG_LOGGING_STARTED | ثبت گزارش امنیتی شروع به ضبط کرد. |
TAG_LOGGING_STOPPED | ثبت گزارش امنیتی ضبط را متوقف کرد. |
TAG_LOG_BUFFER_SIZE_CRITICAL | بافر گزارش امنیتی به 90 درصد ظرفیت خود رسید. |
TAG_MAX_PASSWORD_ATTEMPTS_SET | یک برنامه مدیریت تعداد تلاشهای مجاز برای گذرواژه نادرست را تنظیم میکند. |
TAG_MAX_SCREEN_LOCK_TIMEOUT_SET | یک برنامه مدیریت حداکثر زمان قفل صفحه را تعیین می کند. |
TAG_MEDIA_MOUNT | دستگاه رسانه ذخیره سازی قابل جابجایی را نصب کرده است. |
TAG_MEDIA_UNMOUNT | دستگاه رسانه ذخیره سازی قابل جابجایی را از حالت نصب خارج کرد. |
TAG_OS_SHUTDOWN | سیستم اندروید خاموش شد |
TAG_OS_STARTUP | سیستم اندروید راه اندازی شد. |
TAG_PASSWORD_COMPLEXITY_SET | یک برنامه مدیریت الزامات پیچیدگی رمز عبور را تنظیم می کند. |
TAG_PASSWORD_EXPIRATION_SET | یک برنامه مدیریت مدت زمان انقضای رمز عبور را تعیین می کند. |
TAG_PASSWORD_HISTORY_LENGTH_SET | یک برنامه مدیریت طول تاریخچه رمز عبور را تعیین می کند و از استفاده مجدد از رمزهای عبور قدیمی جلوگیری می کند. |
TAG_REMOTE_LOCK | یک برنامه سرپرست دستگاه یا نمایه کاری را قفل کرد. |
TAG_USER_RESTRICTION_ADDED | یک برنامه مدیریت محدودیتی برای کاربر تعیین کرده است. |
TAG_USER_RESTRICTION_REMOVED | یک برنامه مدیریت محدودیت کاربر را حذف کرد. |
TAG_WIPE_FAILURE | تلاش برای پاک کردن یک دستگاه یا نمایه کاری ناموفق بود. |
چالش صفحه قفل نمایه کاری
با شروع Android 9، صاحبان نمایه میتوانند از کاربران بخواهند با استفاده از محدودیت کاربری DISALLOW_UNIFIED_PASSWORD
یک چالش صفحه قفل جداگانه برای نمایه کاری خود تنظیم کنند. برای بررسی اینکه آیا کاربر همان چالش صفحه قفل را برای دستگاه و نمایه کاری خود تنظیم کرده است یا خیر، با DevicePolicyManager.isUsingUnifiedPassword()
تماس بگیرید.
اگر دستگاهی دارای یک صفحه قفل نمایه کاری جداگانه باشد، DevicePolicyManager.setMaximumTimeToLock()
فقط یک مهلت زمانی قفل صفحه را برای نمایه کاری به جای کل دستگاه تنظیم می کند.
دسترسی به ابزارهای توسعه دهنده
برای کمک به حفظ دادههای کاری در نمایه کاری، ابزار Android Debug Bridge (adb) نمیتواند به فهرستها و فایلهای موجود در نمایه کاری دسترسی داشته باشد.
پشتیبانی از گزینه های بیومتریک بیشتر
اندروید 9 کنترل دقیقی بر احراز هویت سخت افزاری بیومتریک در صفحه قفل نمایه کاری اضافه می کند. متد DevicePolicyManager.setKeyguardDisabledFeatures()
موجود را با KEYGUARD_DISABLE_FACE
و KEYGUARD_DISABLE_IRIS
فراخوانی کنید. برای غیرفعال کردن همه روشهای احراز هویت بیومتریک ارائه شده توسط دستگاه، KEYGUARD_DISABLE_BIOMETRICS
را اضافه کنید.
منسوخ شدن خطمشیهای سرپرست دستگاه
Android 9 خطمشیهای فهرستشده در زیر را برای دستگاههای DPC با استفاده از سرپرست دستگاه بهعنوان منسوخشده علامتگذاری میکند. این خطمشیها مانند گذشته در اندروید 9 به کار خود ادامه میدهند. با شروع نسخه اندروید 10، همین سیاست ها در صورت فراخوانی توسط سرپرست دستگاه، یک SecurityException ایجاد می کنند.
-
USES_POLICY_DISABLE_CAMERA
-
USES_POLICY_DISABLE_KEYGUARD_FEATURES
-
USES_POLICY_EXPIRE_PASSWORD
-
USES_POLICY_LIMIT_PASSWORD
برخی از برنامه ها از ادمین دستگاه برای مدیریت دستگاه مصرف کننده استفاده می کنند. به عنوان مثال، قفل کردن و پاک کردن دستگاه گم شده. خطمشیهای زیر برای فعال کردن این امر همچنان در دسترس خواهند بود:
برای اطلاعات بیشتر درباره این تغییرات، منسوخ شدن سرپرست دستگاه را بخوانید.
ثبت نام با کد QR ساده
کتابخانه QR داخلی
Android 9 همراه با یک کتابخانه QR برای ساده کردن ارائه دستگاه با کد QR ارائه می شود. مدیران فناوری اطلاعات دیگر نیازی به وارد کردن دستی جزئیات Wi-Fi برای راهاندازی دستگاه ندارند. در عوض، با اندروید 9 میتوان این جزئیات Wi-Fi را در یک کد QR گنجاند. وقتی یک سرپرست فناوری اطلاعات کد QR را با دستگاه متعلق به شرکت اسکن میکند، دستگاه بهطور خودکار به Wi-Fi متصل میشود و بدون ورودی دستی اضافی وارد فرآیند تأمین میشود.
روش تهیه کد QR از امکانات اضافی زیر برای تعیین جزئیات Wi-Fi پشتیبانی می کند:
-
EXTRA_PROVISIONING_WIFI_HIDDEN
-
EXTRA_PROVISIONING_WIFI_PAC_URL
-
EXTRA_PROVISIONING_WIFI_PASSWORD
-
EXTRA_PROVISIONING_WIFI_PROXY_BYPASS
-
EXTRA_PROVISIONING_WIFI_PROXY_HOST
-
EXTRA_PROVISIONING_WIFI_PROXY_PORT
-
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
-
EXTRA_PROVISIONING_WIFI_SSID
تاریخ و منطقه زمانی را با استفاده از امکانات اضافی تنظیم کنید
روش تهیه کد QR از ارائه موارد اضافی برای تنظیم زمان و منطقه زمانی در دستگاه پشتیبانی می کند:
پاک کردن گزینه های داده
سرپرستان دستگاه میتوانند هنگام حذف نمایه کاری یا کاربر ثانویه، یک پیام شخصیسازی شده را به کاربران نشان دهند. این پیام به کاربران دستگاه کمک میکند بفهمند سرپرست فناوری اطلاعات آنها نمایه کاری یا کاربر ثانویه را حذف کرده است. با wipeData(int, CharSequence)
تماس بگیرید و یک پیام توضیحی کوتاه ارائه دهید. هنگامی که کاربر اصلی یا مالک دستگاه فراخوانی میکند، سیستم پیامی را نشان نمیدهد و بازنشانی کارخانهای دستگاه را آغاز میکند.
برای حذف داده های اشتراک از سیم کارت eUICC جاسازی شده، با wipeData()
تماس بگیرید و WIPE_EUICC
در آرگومان flags
قرار دهید.
روشهایی برای صاحبان پروفایل وابسته
روشهای زیر برای دارندگان نمایه وابسته در دسترس است:
-
DevicePolicyManager.setKeyguardDisabled()
-
DevicePolicyManager.setStatusBarDisabled()
-
PackageInstaller.createSession()