既存のデバイスを AMAPI に移行する

カスタム DPC ですでに管理されているデバイスは、Android Device Policy(ADP)に移行して Android Management API を利用できます。

前提条件

  • デバイスは、カスタム DPC を使用して EMM によってすでに管理されています。
  • カスタム DPC が AMAPI SDK と統合されている。
  • デバイスが Google Play EMM API で登録されている。
  • デバイスが managed Google Play アカウント エンタープライズに属している。
  • デバイスに Android 9 以降が搭載されている。
  • 会社所有デバイスの仕事用プロファイルの場合、デバイスは Android 11 以降を搭載している必要があります。

カスタム DPC で AMAPI SDK を統合する

移行プロセスでは、カスタム DPC アプリケーションに AMAPI SDK を統合する必要があります。このライブラリとアプリへの追加方法について詳しくは、AMAPI SDK 統合ガイドをご覧ください。

デバイスを移行する手順

  1. AMAPI に移行した後にデバイスで使用されるポリシーを設定します。最適なユーザー エクスペリエンスを実現するには、これは DPC によってデバイスにすでに適用されているポリシーと同等である必要があります。AMAPI のポリシーは、Play EMM API でデバイスがすでに属しているエンタープライズに属している必要があります。特定の企業は、AMAPI と Play EMM API の両方で同じ名前になります。
  2. enterprises.migrationTokens.create を呼び出して、デバイスの移行トークンを作成します。
  3. この移行トークンの value をカスタム DPC に送信します。
  4. Play EMM API を使用して、Android Device Policy がデバイスにインストールされていることを確認します。
  5. DpcMigrationClientFactory を使用して DpcMigrationClient を作成します。
  6. DpcMigrationClientmigrateDeviceManagementToAndroidManagementApi メソッドを呼び出します。これで移行が完了します。
  7. deviceStateACTIVE に変わり、Pub/Sub チャネルを介して STATUS_REPORT メッセージが届きます。

移行が完了すると、呼び出し元のアプリはデバイス所有者またはプロファイル所有者の権限を失います。これらの権限は Android Device Policy に移行されます。このプロセスは、次のシーケンス図で表すことができます。

DPC 移行シーケンス図

注: 移行を開始するには、デバイスをインターネットに接続する必要があります。このプロセスは、移行プロセス中のネットワーク切断に耐えられるように設計されているため、ネットワーク接続を必要とする重要なオペレーションは、DPC から Android Device Policy へのデバイス所有者権限またはプロファイル所有者権限の実際の移行が行われる前に行われます。

移行トークン

移行トークンは、カスタム DPC によって管理されている特定のデバイスを移行する意向を示すために、EMM サーバーがリクエストします。移行トークンは、移行が正常に完了するか、期限切れになるまで使用できます。

カスタム DPC の統合

まず、トークンと、必要に応じて構成済みの Wi-Fi ネットワークのリストをビルダーに渡して、DpcMigrationRequest を作成する必要があります。

// Create a DpcMigrationRequest
DpcMigrationRequest request =
        DpcMigrationRequest.builder()
            .setMigrationToken(token)
            .build();

次に、DpcMigrationClient を取得し、migrateDeviceManagementToAndroidManagementApi で移行プロセスを開始できます。

// Create a DpcMigrationClient
DpcMigrationClient dpcMigrationClient = DpcMigrationClientFactory.create(context);
try {
  // Use helper function to retrieve Admin component name
  var adminComponentName = getAdminComponent(context);

  ListenableFuture<DpcMigrationAttempt> futureAttempt =
          dpcMigrationClient.migrateDeviceManagementToAndroidManagementApi(
              new ComponentName(context, DpcMigrationNotificationReceiver.class),
              adminComponentName,
              request);
  // handle futureAttempt
} catch (RuntimeException e) {
  // send failure feedback: "Error: " + e
}

移行の進行状況を追跡する

移行プロセスは、デバイス上の DpcMigrationAttempt によって追跡されます。

migrateDeviceManagementToAndroidManagementApi によって返されたものを直接使用することも、getMigrationAttempt メソッドと listMigrationAttempts メソッドを使用して移行の試行を取得して一覧表示することもできます。

// Passing an empty name, we retrieve the last attempt 
var request = GetDpcMigrationAttemptRequest.builder().build();

var attempt = client.getMigrationAttempt(request);

必要に応じて、NotificationReceiverService を使用して DpcMigrationListener を設定し、DpcMigrationAttempt のステータス更新をリッスンできます。

// DpcMigrationNotificationReceiver for callback handling
public class DpcMigrationNotificationReceiver extends NotificationReceiverService
    implements DpcMigrationListener {

  @Override
  protected DpcMigrationListener getDpcMigrationListener() {
    // getDpcMigrationListener"
    return this;
  }

  @Override
  public void onMigrationStateChanged(DpcMigrationAttempt migrationAttempt) {
    // send success feedback
  }
}

Wi-Fi ネットワークを処理する

カスタム DPC によって管理されている Wi-Fi ネットワークがある場合は、AMAPI がこれらのネットワークの管理をスムーズに開始できるように、AMAPI ONC ポリシーがこれらのネットワークの構成と一致している必要があります。DPC の移行と Wi-Fi 管理の相互作用は、管理モードによって異なります。

完全管理対象デバイスと会社所有デバイスの仕事用プロファイル

移行中、Android デバイス ポリシーでは、デバイスで構成された Wi-Fi ネットワークと同じ SSID とセキュリティ タイプを持つポリシーで構成された Wi-Fi ネットワークは、一致する構成済みの Wi-Fi ネットワークと同じであると想定されます。したがって、カスタム DPC によって構成された Wi-Fi ネットワークは、ネットワークに対応する ONC ポリシーが変更されるまで、移行後に変更されません。ただし、移行後にカスタム DPC がアンインストールされると、カスタム DPC で構成された Wi-Fi ネットワークは自動的に削除されます。Android Device Policy は引き続きポリシーを適用します。これらのネットワークのいずれかがポリシーで構成されている場合、ポリシーで構成されているネットワークは通常どおり追加されます。

個人のデバイス上の仕事用プロファイル

技術的な理由により、カスタム DPC によって構成された Wi-Fi ネットワークをカスタム DPC によって削除する必要があります。これにより、Android デバイス ポリシーがこれらの Wi-Fi ネットワークの管理を開始できます。AMAPI SDK は、カスタム DPC から Android デバイス ポリシーに所有権を移行する前に、このような Wi-Fi ネットワークを削除します。ただし、カスタム DPC が DpcMigrationRequest でこれらのネットワークに関する情報を渡す必要があります。移行後、ポリシーで構成されたネットワークは通常どおりに追加されるため、カスタム DPC によって追加されたネットワークもポリシーで構成することをおすすめします。

注意すべき点は次のとおりです。

  • アクティブなネットワークがカスタム DPC によって構成された Wi-Fi ネットワークの場合、移行中にデバイスが短時間オフラインになることがあります。
  • DpcMigrationRequest には、カスタム DPC によって構成された Wi-Fi ネットワークのみを渡す必要があります。そうしないと、AMAPI SDK によってネットワークを削除できない場合(ユーザーが追加した Wi-Fi ネットワークなど)に、移行が失敗します。
  • Wi-Fi ネットワークは、カスタム DPC が個人所有のデバイスのプロファイル所有者である場合にのみ DpcMigrationRequest で渡す必要があります。渡さないと、移行は失敗します。
  • 技術的な理由により、Android 12 は例外的なケースであり、DpcMigrationRequest で渡されたネットワークは無視され、カスタム DPC によって構成されたすべての Wi-Fi ネットワークが自動的に削除されます。また、個人所有デバイスの仕事用プロファイルに対して Android 12 で ACCESS_WIFI_STATE 権限がカスタム DPC に付与されている必要があります。付与されていない場合、移行は失敗します。

注意点

この機能に関連する注意事項は次のとおりです。

企業固有の ID

Android 12 以降の仕事用プロファイルの場合、DevicePolicyManager.getEnrollmentSpecificId からアクセスできるエンタープライズ固有の ID は、移行時に変更されません。ただし、Android Device Policy によって管理される仕事用プロファイルがデバイスで再度作成された場合(以前のプロファイルを削除した後や、デバイスを工場出荷時の設定にリセットした後など)、その時点で企業固有の ID が変更されます。

完全管理対象デバイスの仕事用プロファイル

この機能は、Android 9 または 10 を搭載した仕事用プロファイルがある完全管理対象デバイスではサポートされていません。このようなデバイスの移行は試行しないでください。エラーが発生したかどうかにかかわらず、このようなデバイスは DPC 移行でサポートされていません。