Tính năng vai trò ứng dụng cho phép quản trị viên CNTT cấp đặc quyền đặc biệt cho một ứng dụng được quản lý trên thiết bị chạy Android. Bằng cách chỉ định một vai trò cụ thể, ứng dụng có thể được miễn các hạn chế về nguồn điện và hoạt động ở chế độ nền, trạng thái tạm ngưng, trạng thái ngủ đông (trên Android 14 trở lên) và có các chế độ kiểm soát của người dùng bị vô hiệu hoá (tức là bao gồm các hành động của người dùng như buộc dừng và xoá dữ liệu ứng dụng) (trên Android 11 trở lên), cho phép ứng dụng thực hiện chức năng quan trọng mà không bị gián đoạn. Ngoài ra, ứng dụng có thể được thông báo về các vai trò được chỉ định, cho phép ứng dụng tự khởi động mà không cần sự can thiệp của người dùng.
Điều kiện tiên quyết
Thiết bị được quản lý bằng EMM dựa trên AMAPI (không hỗ trợ EMM sử dụng DPC tuỳ chỉnh).
Chuẩn bị ứng dụng để sử dụng tính năng này
Bạn chỉ cần tích hợp với AMAPI SDK nếu ứng dụng muốn nhận thông báo về các vai trò được chỉ định. Nhờ đó, ứng dụng có thể tự khởi động (tức là tự động khởi chạy mà không cần người dùng tương tác).
Tích hợp với AMAPI SDK trong ứng dụng của bạn
Bạn có thể tìm thêm thông tin về AMAPI SDK và cách thêm SDK này vào ứng dụng của mình trong hướng dẫn tích hợp AMAPI SDK.
Thêm siêu dữ liệu bắt buộc vào tệp kê khai của ứng dụng
Android Device Policy (ADP) cần biết ComponentName
của lớp triển khai NotificationReceiverService
để thông báo cho ứng dụng của bạn về các vai trò được chỉ định. Bạn phải gắn thẻ dịch vụ của mình trong AndroidManifest.xml
một cách phù hợp để ADP có thể tự động phát hiện dịch vụ đó.
- Ứng dụng của bạn phải có chính xác một dịch vụ là
enabled
và cómeta-data
vớiandroid:name
bằngcom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
- Dịch vụ này phải đặt
android:exported
thànhtrue
- Bạn phải đặt
android:value
củameta-data
thành một chuỗi trống
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
Nếu đang kiểm thử vai trò COMPANION_APP
, bạn cũng nên thêm meta-data
sau đây vào dịch vụ của mình để Android Device Policy có thể gửi thông tin cập nhật trạng thái lệnh cục bộ đến ứng dụng của bạn:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
Tạo một dịch vụ mở rộng NotificationReceiverService (hoặc cập nhật dịch vụ hiện có)
Tạo hoặc cập nhật NotificationReceiverService
hiện có và triển khai một AppRolesListener
để theo dõi các vai trò được chỉ định cho ứng dụng của bạn. Bạn chỉ cần getAppRolesListener()
để theo dõi các vai trò được chỉ định cho ứng dụng của mình. Nếu ứng dụng của bạn được chỉ định vai trò COMPANION_APP
, bạn cũng nên triển khai 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"
}
}
Ứng dụng của bạn có thể nhận được thông báo nhiều lần nếu vai trò của ứng dụng thay đổi nhiều lần. Nếu tất cả các vai trò đều bị xoá, ứng dụng của bạn vẫn sẽ nhận được thông báo kèm theo một danh sách vai trò trống. Thông báo này sẽ đưa ứng dụng của bạn ra khỏi trạng thái dừng và cùng với các trường hợp ngoại lệ được cấp cho ứng dụng, ứng dụng của bạn có thể tự khởi động mà không cần bất kỳ hoạt động tương tác nào của người dùng. Nhờ thông báo và các trường hợp ngoại lệ về vai trò của ứng dụng, ứng dụng của bạn có thể theo dõi các thông báo truyền tin ACTION_BOOT_COMPLETED
. Nếu ứng dụng của bạn phụ thuộc vào các cấu hình được quản lý để tự khởi động, hãy xem phần Thiết lập cấu hình được quản lý để biết cách đọc và theo dõi các thay đổi.
Cung cấp thiết bị theo các chính sách về vai trò của ứng dụng
Nhà phát triển ứng dụng có thể kiểm thử việc chỉ định vai trò ứng dụng cho ứng dụng của họ bằng EMM hoặc làm theo hướng dẫn nhanh về Android Management API. Sổ tay Colab AMAPI cho phép bạn đăng ký một doanh nghiệp, tạo một chính sách và cung cấp một thiết bị.
Đặt chính sách cho ứng dụng của bạn bằng vai trò ứng dụng
Thiết lập một policy
với các vai trò ứng dụng mà ứng dụng của bạn dự định có bằng cách sử dụng ApplicationPolicy.roles
.
Ví dụ sau đây cho thấy cách định cấu hình vai trò cho các ứng dụng MTD:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Trước khi chỉ định các vai trò như quy định trong chính sách, hệ thống sẽ kiểm tra để đảm bảo rằng dấu vân tay của chứng chỉ khoá ký ứng dụng trên thiết bị khớp với dấu vân tay trên Cửa hàng Play.
Nếu dấu vân tay khác, các vai trò sẽ không được chỉ định cho ứng dụng và NonComplianceReason.APP_SIGNING_CERT_MISMATCH
sẽ báo cáo việc không tuân thủ cho EMM.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Nếu ứng dụng của bạn có cấu hình được quản lý, thì quản trị viên CNTT có thể thiết lập cấu hình ban đầu cho restriction
có liên quan trong chính sách ứng dụng:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}