맞춤 DPC로 이미 관리되는 기기를 Android Device Policy (ADP)로 이전하여 Android Management API를 활용할 수 있습니다.
기본 요건
- 기기가 이미 맞춤 DPC로 EMM에 의해 관리되고 있습니다.
- 맞춤 DPC가 AMAPI SDK와 통합되어 있습니다.
- 기기가 Google Play EMM API에 등록되어 있습니다.
- 기기가 기업용 관리 Google Play 계정에 속합니다.
- 기기가 Android 9 이상을 실행합니다.
- 회사 소유 기기의 직장 프로필의 경우 기기가 Android 11 이상을 실행해야 합니다.
맞춤 DPC에서 AMAPI SDK와 통합
마이그레이션 프로세스에서는 맞춤 DPC 애플리케이션이 AMAPI SDK를 통합해야 합니다. 이 라이브러리 및 애플리케이션에 추가하는 방법에 관한 자세한 내용은 AMAPI SDK 통합 가이드를 참고하세요.
기기 이전 단계
- AMAPI로 이전된 후 기기에서 사용할 정책을 설정합니다. 최상의 사용자 환경을 위해 이는 DPC가 기기에서 이미 시행한 정책과 동일해야 합니다. AMAPI의 정책은 기기가 이미 속해 있는 Play EMM API와 동일한 기업에 속해야 합니다. 특정 기업의 이름은 AMAPI와 Play EMM API에서 동일합니다.
enterprises.migrationTokens.create를 호출하여 기기의 이전 토큰을 만듭니다.- 이 이전 토큰의
value을 맞춤 DPC에 전송합니다. - Play EMM API를 사용하여 Android Device Policy가 기기에 설치되어 있는지 확인합니다.
DpcMigrationClientFactory을 사용하여DpcMigrationClient만들기DpcMigrationClient에서migrateDeviceManagementToAndroidManagementApi메서드를 호출합니다. 이렇게 하면 이전이 완료됩니다.deviceState이ACTIVE로 변경되고 Pub/Sub 채널을 통해STATUS_REPORT메시지가 전송됩니다.
이전이 완료되면 호출 앱은 기기 소유자 또는 프로필 소유자 권한을 잃게 됩니다. 이러한 권한이 Android Device Policy로 이전되기 때문입니다. 이 프로세스는 다음 시퀀스 다이어그램으로 나타낼 수 있습니다.

참고: 마이그레이션을 시작하려면 기기가 인터넷에 연결되어 있어야 합니다. 이 프로세스는 이전 프로세스 중에 발생하는 네트워크 연결 해제에 탄력적으로 대응하도록 설계되어 네트워크 연결이 필요한 주요 작업이 DPC에서 Android 기기 정책으로 기기 소유자 또는 프로필 소유자 권한이 실제로 이전되기 전에 완료됩니다.
이전 토큰
마이그레이션 토큰은 맞춤 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
}
NotificationReceiverService 설정 및 이전 추적
맞춤 DPC에서 NotificationReceiverService를 구현합니다.
마이그레이션 프로세스는 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() {
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 기기 정책은 계속해서 정책을 적용하며, 이러한 네트워크가 정책에 구성된 경우 정책에 구성된 네트워크가 평소와 같이 추가됩니다.
개인 기기의 직장 프로필
기술적인 이유로 Android 기기 정책이 이러한 Wi-Fi 네트워크를 관리하기 시작하려면 맞춤 DPC에서 구성한 Wi-Fi 네트워크를 맞춤 DPC에서 삭제해야 합니다. AMAPI SDK가 이를 처리하고 맞춤 DPC에서 Android 기기 정책으로 소유권을 이전하기 전에 이러한 Wi-Fi 네트워크를 삭제하지만 맞춤 DPC가 DpcMigrationRequest에서 이러한 네트워크에 관한 정보를 전달해야 합니다. 마이그레이션 후에는 정책에서 구성된 네트워크가 정상적으로 추가되므로 맞춤 DPC에서 추가한 네트워크도 정책에서 구성하는 것이 좋습니다.
다음 사항에 유의하세요.
- 활성 네트워크가 맞춤 DPC로 구성된 Wi-Fi 네트워크인 경우 기기가 이전 중에 잠시 오프라인 상태가 될 수 있습니다.
- 맞춤 DPC로 구성된 Wi-Fi 네트워크만
DpcMigrationRequest에 전달해야 합니다. 그렇지 않으면 AMAPI SDK로 네트워크를 삭제할 수 없는 경우 (예: 사용자가 추가한 Wi-Fi 네트워크) 이전이 실패합니다. - Wi-Fi 네트워크는 맞춤 DPC가 개인 소유 기기의 프로필 소유자인 경우에만
DpcMigrationRequest에 전달해야 합니다. 그렇지 않으면 이전이 실패합니다. - 기술적인 이유로 Android 12는
DpcMigrationRequest에 전달된 네트워크가 무시되고 맞춤 DPC로 구성된 모든 Wi-Fi 네트워크가 자동으로 삭제되는 예외적인 사례입니다. 또한 개인 소유 기기의 직장 프로필에 대해 Android 12에서 맞춤 DPC에ACCESS_WIFI_STATE권한이 있어야 합니다. 그렇지 않으면 이전이 실패합니다.
주의사항
이 기능과 관련된 몇 가지 주의사항이 있습니다.
엔터프라이즈별 ID
Android 12 이상의 직장 프로필의 경우 DevicePolicyManager.getEnrollmentSpecificId에서 액세스할 수 있는 엔터프라이즈별 ID는 이전 시점에 변경되지 않습니다. 하지만 Android Device Policy로 관리되는 직장 프로필이 기기에서 다시 생성되는 경우 (예: 이전 프로필을 삭제한 후 또는 기기를 공장 초기화한 후) 이때 엔터프라이즈별 ID가 변경됩니다.
완전 관리형 기기의 직장 프로필
Android 9 또는 10을 실행하는 직장 프로필이 있는 완전 관리형 기기에서는 이 기능이 지원되지 않습니다. 이러한 기기의 마이그레이션을 시도해서는 안 되며 오류가 발생했는지와 관계없이 이러한 기기는 DPC 마이그레이션에 지원되지 않습니다.
RESET_PASSWORD 명령어
기기에 잠금 화면 비밀번호가 있는 경우 RESET_PASSWORD 명령어는 마이그레이션 후 사용자가 사용자 인증 정보를 확인한 후에만 성공합니다(예: PIN 재입력). 기기에 잠금 화면 비밀번호가 없으면 이전 직후에 RESET_PASSWORD 명령어를 사용할 수 있습니다.