アプリケーション ロールを管理する

アプリのロール機能を使用すると、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:namecom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES と等しい meta-data を持つサービスが 1 つだけ存在する必要があります。
  • このサービスでは、android:exportedtrue に設定する必要があります
  • meta-dataandroid: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" }
      ]
    }
  ]
}

ポリシーで指定されたロールを割り当てる前に、デバイス上のアプリの署名鍵証明書のフィンガープリントが Google 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>"
      }
    }
  ]
}