ویژگی نقشهای برنامه به مدیر فناوری اطلاعات اجازه میدهد تا امتیازات ویژهای را به یک برنامه مدیریتشده در یک دستگاه مبتنی بر اندروید اعطا کند. با اختصاص یک نقش خاص، یک برنامه میتواند از محدودیتهای مصرف برق و پسزمینه، تعلیق، خواب زمستانی (در اندروید ۱۴+) معاف شود و کنترلهای کاربر (یعنی شامل اقدامات کاربر مانند توقف اجباری و پاک کردن دادههای برنامه) غیرفعال شود (در اندروید ۱۱+)، و به آن اجازه میدهد تا عملکرد حیاتی خود را بدون وقفه انجام دهد. علاوه بر این، میتوان به برنامه از نقشهای اختصاص داده شده به آن اطلاع داد، که به آن اجازه میدهد بدون دخالت کاربر، خود را راهاندازی کند.
برای فهرستی از نقشهای برنامه کاربردی موجود و امتیازات ویژه اعطا شده به هر نقش، به RoleType مراجعه کنید.
پیشنیازها
این دستگاه توسط یک EMM مبتنی بر AMAPI مدیریت میشود (EMMهایی که از DPC سفارشی استفاده میکنند پشتیبانی نمیشوند).
برنامه خود را برای استفاده از این ویژگی آماده کنید
ادغام با AMAPI SDK فقط در صورتی لازم است که برنامه بخواهد از نقشهای تعیینشدهاش مطلع شود که به آن اجازه میدهد خودش را بوتاسترپ کند (یعنی بدون تعامل کاربر، بهطور خودکار اجرا شود).
ادغام با AMAPI SDK در برنامه شما
میتوانید اطلاعات بیشتر در مورد AMAPI SDK و نحوه افزودن آن به برنامه خود را در راهنمای ادغام AMAPI SDK بیابید.
متادیتای مورد نیاز را به مانیفست برنامه اضافه کنید
خطمشی دستگاه اندروید (ADP) برای اطلاعرسانی به برنامه شما در مورد نقشهای اختصاص داده شده به سرویس، باید ComponentName کلاس شما که NotificationReceiverService را پیادهسازی میکند، بداند. شما باید سرویس خود را به طور مناسب در AndroidManifest.xml تگگذاری کنید تا ADP بتواند آن را به طور خودکار کشف کند.
- برنامه شما باید دقیقاً یک سرویس
enabledداشته باشد که دارایmeta-dataباandroid:nameبرابر باcom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLESباشد. - این سرویس باید
android:exportedرویtrueتنظیم کند. - مقدار
android:valueمربوط بهmeta-dataباید روی یک رشته خالی تنظیم شود.
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
اگر در حال آزمایش نقش COMPANION_APP هستید، باید meta-data زیر را نیز به سرویس خود اضافه کنید تا Android Device Policy بتواند بهروزرسانیهای وضعیت دستورات محلی را به برنامه شما ارسال کند:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
یک سرویس ایجاد کنید که NotificationReceiverService را گسترش میدهد (یا سرویس موجود را بهروزرسانی کنید)
NotificationReceiverService موجود خود را ایجاد یا بهروزرسانی کنید و یک AppRolesListener پیادهسازی کنید تا به نقشهای اختصاص داده شده به برنامه شما گوش دهد. فقط getAppRolesListener() برای گوش دادن به نقشهای اختصاص داده شده به برنامه شما مورد نیاز است. اگر به برنامه شما نقش COMPANION_APP اختصاص داده شده است، باید getCommandListener() نیز پیادهسازی کنید:
import android.util.Log
import com.google.android.managementapi.approles.AppRolesListener
import com.google.android.managementapi.approles.model.AppRolesSetRequest
import com.google.android.managementapi.approles.model.AppRolesSetResponse
import com.google.android.managementapi.commands.CommandListener
import com.google.android.managementapi.commands.model.Command
import com.google.android.managementapi.notification.NotificationReceiverService
class MyNotificationReceiverService : NotificationReceiverService() {
// If your app wants to listen for roles assigned
override fun getAppRolesListener(): AppRolesListener =
object : AppRolesListener {
override fun onAppRolesSet(request: AppRolesSetRequest): AppRolesSetResponse {
val roleTypes = request.roles.map { role -> role.roleType }
Log.i(TAG, "onAppRolesSet: $roleTypes")
return AppRolesSetResponse.getDefaultInstance()
}
}
// If your app wants to listen for local command status updates
// Only relevant for COMPANION_APP role
override fun getCommandListener(): CommandListener {
return object : CommandListener {
override fun onCommandStatusChanged(command: Command) {
Log.i(TAG, "onCommandStatusChanged")
}
}
}
private companion object {
const val TAG = "MyNotificationReceiverService"
}
}
اگر نقشهای برنامه شما چندین بار تغییر کنند، ممکن است چندین بار به آن اطلاع داده شود. اگر همه نقشها حذف شوند، برنامه شما همچنان با یک لیست خالی از نقشها مطلع خواهد شد. این اطلاعرسانی، برنامه شما را از حالت متوقف خارج میکند و همراه با معافیتهای اعطا شده برای برنامه شما، برنامه شما میتواند بدون هیچ گونه تعامل با کاربر، خود را راهاندازی کند. به لطف اطلاعرسانی و معافیتهای نقشهای برنامه، برنامه شما میتواند به پخشهای ACTION_BOOT_COMPLETED گوش دهد. اگر برنامه شما برای راهاندازی خود به پیکربندیهای مدیریتشده خود وابسته است، برای نحوه خواندن و گوش دادن به تغییرات، به بخش راهاندازی پیکربندیهای مدیریتشده مراجعه کنید.
ارائه سیاستهای نقشهای برنامه به دستگاه
توسعهدهندگان برنامه میتوانند با استفاده از EMM یا دنبال کردن راهنمای سریع Android Management API، تخصیص نقشهای برنامه به برنامه خود را آزمایش کنند. دفترچه یادداشت AMAPI Colab به شما امکان میدهد یک شرکت را ثبتنام کنید، یک سیاست ایجاد کنید و یک دستگاه را آماده کنید.
با استفاده از نقشهای برنامه، خطمشی برنامه خود را تنظیم کنید
با استفاده از ApplicationPolicy.roles یک policy با نقشهای برنامهای که قرار است برنامه شما داشته باشد، تنظیم کنید.
مثال زیر نحوه پیکربندی نقش برای برنامههای MTD را نشان میدهد:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
قبل از اختصاص نقشها طبق آنچه در سیاست مشخص شده است، سیستم بررسی میکند که اثر انگشت گواهی کلید امضای برنامه روی دستگاه با اثر انگشت موجود در فروشگاه Play مطابقت داشته باشد. اگر اثر انگشت متفاوت باشد، نقشها به برنامه اختصاص داده نمیشوند و عدم انطباق NonComplianceReason.APP_SIGNING_CERT_MISMATCH به EMM گزارش میشود.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
اگر برنامه شما پیکربندی مدیریتشده داشته باشد، مدیر فناوری اطلاعات میتواند یک پیکربندی اولیه برای restriction مربوطه در سیاست برنامه تنظیم کند:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}