애플리케이션 역할 기능을 사용하면 IT 관리자가 Android 기반 기기에서 관리 애플리케이션에 특별 권한을 부여할 수 있습니다. 특정 역할을 할당하면 앱이 전원 및 백그라운드 제한, 정지, 절전 모드 (Android 14 이상)에서 제외되고 사용자 제어 (예: 강제 종료 및 앱 데이터 삭제와 같은 사용자 작업 포함)가 사용 중지되어 (Android 11 이상) 중단 없이 중요한 기능을 실행할 수 있습니다. 또한 앱은 할당된 역할을 알림으로 받을 수 있으므로 사용자 개입 없이 자체적으로 부트스트랩할 수 있습니다.
기본 요건
기기가 AMAPI 기반 EMM에 의해 관리됩니다 (맞춤 DPC를 사용하는 EMM은 지원되지 않음).
기능 사용을 위한 앱 준비
AMAPI SDK와의 통합은 앱이 할당된 역할을 통지받아 자체 부트스트랩 (즉, 사용자 상호작용 없이 자동 실행)할 수 있도록 하려는 경우에만 필요합니다.
앱에서 AMAPI SDK와 통합
AMAPI SDK 및 앱에 추가하는 방법에 관한 자세한 내용은 AMAPI SDK 통합 가이드를 참고하세요.
앱의 매니페스트에 필수 메타데이터 추가
Android Device Policy (ADP)는 NotificationReceiverService
를 구현하는 클래스의 ComponentName
를 알아야 할당된 역할을 앱에 알릴 수 있습니다. ADP에서 자동으로 검색할 수 있도록 AndroidManifest.xml
에서 서비스를 적절하게 태그해야 합니다.
- 앱에
enabled
이고android:name
이com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
와 같은meta-data
가 있는 서비스가 정확히 하나 있어야 합니다. - 이 서비스의
android:exported
이true
로 설정되어 있어야 합니다. meta-data
의android:value
은 빈 문자열로 설정해야 합니다.
<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
역할을 테스트하는 경우 Android Device Policy가 로컬 명령어 상태 업데이트를 앱에 전송할 수 있도록 서비스에 다음 meta-data
도 추가해야 합니다.
<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" }
]
}
]
}
앱에 관리 구성이 있는 경우 IT 관리자는 애플리케이션 정책에서 관련 restriction
의 초기 구성을 설정할 수 있습니다.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}