Quản lý vai trò ứng dụng

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ới android:name bằng com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
  • Dịch vụ này phải đặt android:exported thành true
  • Bạn phải đặt android:value của meta-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>"
      }
    }
  ]
}