기기를 프로비저닝하는 방법에는 여러 가지가 있습니다. 고객의 비즈니스 요구사항에 따라 사용할 프로비저닝 방법이 결정됩니다.
기기 프로비저닝 기본사항
고객이 지원하려는 기기 프로비저닝 배포 시나리오 (예: BYOD 또는 회사 소유)에 따라 사용할 작업 모드 (예: 기기 소유자 모드 또는 프로필 소유자 모드)가 결정됩니다. 마찬가지로 지원해야 하는 프로비저닝 방법을 결정하는 데 지원해야 하는 작동 모드와 Android 출시가 있습니다.
배포 시나리오
회사 소유 배포 시나리오에서 기업은 직원이 사용하는 기기를 소유하고 완전히 제어합니다. 일반적으로 조직은 전체 기기를 엄격하게 모니터링하고 관리해야 할 때 회사 소유 기기를 배포합니다.
BYOD 배포 시나리오를 지원하는 회사는 직원이 개인 소유 기기를 업무에 사용하고 이러한 기기를 사용하여 권한이 있는 회사 정보 및 애플리케이션에 액세스할 수 있도록 허용합니다.
작업 모드
회사 소유 배포는 기기 소유자 작업 모드에서 지원됩니다. Android에서는 관리 앱을 기기 정책 컨트롤러 (DPC)라고 부릅니다. DPC는 Android 기기에 정책을 시행하고 기기 소유자 역할을 할 때 전체 기기를 관리합니다. DPC는 기기 소유자로서 기기 전체 연결 구성, 전역 설정 구성, 초기화와 같은 기기 전체 작업을 실행할 수 있습니다.
BYOD 배포는 프로필 소유자 작업 모드에서 지원됩니다. 기업에서는 DPC를 통해 기기의 기본 사용자 계정에 직장 프로필을 추가하여 개인 기기를 업무에 사용할 수 있도록 합니다. 직장 프로필은 기본 사용자와 연결되어 있지만 별도의 프로필과 연결됩니다. 프로필 소유자로서 DPC는 기기의 직장 프로필만 관리하며 직장 프로필 외부에서 제한적으로 제어할 수 있습니다.
레거시 기기 배포는 DPC가 기기를 제한 (예: 기기 완전 삭제, 패스 코드 필요 또는 일부 정책 적용)할 수 있도록 허용하는 레거시 작업 모드에서 지원됩니다. 사용자가 Google 계정을 추가하도록 허용하거나 DPC에서 기존 기기에 관리 Google Play 계정을 추가하도록 하여 Google Play를 통해 기존 기기에 앱 관리를 제공할 수 있습니다.
레거시 모드는 기기 소유자 모드 또는 프로필 소유자 모드를 구현할 수 있는 배포에는 권장되지 않습니다. 대규모 기기에 걸쳐 '가장 낮은 공통분모' 솔루션을 사용하는 대신 가능한 한 가장 높은 수준의 기기 관리를 사용해야 합니다.
기기 소유자 프로비저닝 방법
새 기기의 초기 설정이나 초기화 후에 기기 소유자 작업을 프로비저닝해야 합니다. 기기 소유자 모드는 그 외 어떤 시점에서도 프로비저닝할 수 없습니다.
사용 사례에 따라 기기 소유자 모드를 프로비저닝하는 두 가지 기본 유형의 프로비저닝 방법이 있습니다.
- 기기 기반 흐름에서 IT 관리자는 NFC를 사용하여 많은 수의 기기를 프로비저닝할 수 있습니다. 이 흐름은 관리 Google Play 계정 또는 G Suite 시나리오에 사용할 수 있습니다.
- 사용자 주도 흐름에서 옵션은 조직이 G Suite를 사용하는지 여부에 따라 다릅니다.
- G Suite 시나리오에서 사용자는 초기 기기 설정 중에 Google 계정을 추가하며, DPC는 사용자에게 기기 소유자를 설정하는 단계를 안내해야 합니다. 사용자 주도 흐름은 최종 사용자가 새 기기를 설정하는 데 도움이 될 수 있으며 기기가 NFC를 지원하지 않는 경우에 대안이 될 수도 있습니다.
- 조직에서 G Suite를 사용하지 않는 경우 관리 Google Play 계정 방법을 사용해야 합니다.
프로필 소유자 프로비저닝 방법
프로필 소유자 작업을 프로비저닝하는 데 권장되는 방법은 조직에서 G Suite를 사용하는지 여부에 따라 다릅니다.
- G Suite의 경우 권장되는 방법은 사용자가 Google 계정을 추가하는 사용자 중심 흐름이고 DPC는 사용자에게 프로필 소유자를 설정하는 단계를 안내합니다.
- 조직에서 G Suite를 사용하지 않는 경우 관리 Google Play 계정 방법을 사용하는 것이 좋습니다.
사용자에게 DPC를 수동으로 설치하도록 안내하는 기존 방식도 지원됩니다. 사용자가 Google Play에서 DPC를 다운로드하고 설치해야 합니다. 그러면 DPC에서 사용자에게 프로필 소유자를 설정하는 나머지 과정을 안내합니다.
레거시 기기의 프로비저닝 방법
기존 기기는 Android 5.0 이전 버전을 실행하거나 직장 프로필을 지원하지 않습니다. 기존 기기를 프로비저닝하는 데 권장되는 방법은 조직에서 관리 Google 계정을 사용하는지 여부에 따라 다릅니다.
- 관리 Google 계정 사례에서 권장하는 방법은 사용자가 Google 계정을 추가하는 사용자 주도 흐름을 사용하는 것으로, DPC는 사용자에게 설정 단계를 안내합니다.
- 조직에서 관리 Google 계정을 사용하지 않는 경우 권장되는 방법은 관리 Google Play 계정 방법이며, 사용자는 Google Play에서 DPC를 설치합니다. DPC는 직장 프로필에 계정을 추가하는 것과 비슷한 방식으로 관리 Google Play 계정을 기존 기기에 추가할 수 있습니다.
사용자에게 DPC를 수동으로 설치하도록 지시한 다음 DPC가 Google 계정을 추가하는 기존 방식도 지원됩니다. 사용자가 Google Play에서 DPC를 다운로드하고 설치해야 합니다. 그러면 DPC에서 사용자에게 설정 과정의 나머지 단계를 안내합니다.
Android 버전 간 주요 프로비저닝 차이
배포 시나리오 |
작업 모드 |
프로비저닝 메서드 |
*이전 5.0 |
5.0, 5.1 |
6.0 이후 |
7.0 이후 |
회사 소유 | 기기 소유자 | QR 코드 | ✓ | |||
관리 Google Play 계정 | ✓ | ✓ | ||||
Google 계정 | ✓ | ✓ | ||||
NFC | ✓ | ✓ | ✓ | |||
기존 | 관리 Google Play 계정 | ✓ | ||||
Google 계정 | ✓ | |||||
BYOD | 프로필 소유자 | 관리 Google Play 계정 | ✓ | ✓ | ✓ | |
Google 계정 | **5.1세 | ✓ | ✓ | |||
수동 DPC 설치 | ✓ | ✓ | ✓ | |||
기존 | 관리 Google Play 계정 | ✓ | ||||
Google 계정 | ✓ | |||||
수동 DPC 설치 | ✓ |
*레거시 모드는 Android 5.0 이후 버전을 실행하더라도 직장 프로필을 지원하지 않는 기기에 권장됩니다. 일반적으로 RAM 용량이 적은 기기를 말합니다.
**Android 5.1의 Google 계정 메서드는 프로필 소유자 작업 모드만 지원하며 사용자는 설정 > 계정 추가에서만 구성할 수 있습니다.
일반적인 구현 고려사항
구현하는 작업 모드에 관계없이 DPC를 작성할 때 고려해야 할 사항이 있습니다.
Google Play 서비스 호환성
Google Play 서비스 APK 가이드는 개발자가 API 트랜잭션을 실행하기 전에 Google Play 서비스의 버전 확인을 실행하도록 안내합니다. Google Play 서비스를 업데이트하려고 하면 기기 설정 프로세스가 심각하게 중단되기 때문에 DPC는 기기 프로비저닝이 완료되기 전에 Google Play 서비스 업데이트를 시도해서는 안 됩니다.
DPC와 Google Play 서비스의 호환성에 관한 핵심사항은 다음과 같습니다.
- DPC는 특정 기기와 함께 제공된 Google Play 서비스를 사용하여 실행해야 합니다.
- DPC는 기기 프로비저닝 시 사용할 수 있는 향후 버전의 Google Play 서비스의 새로운 기능에 의존해서는 안 됩니다.
기기 프로비저닝이 완료되면 DPC는 사용자에게 최신 기능을 사용할 수 있도록 Google Play 서비스를 업데이트하라는 메시지를 표시할 수 있습니다. 하지만 어떤 이유로든 기능을 사용할 수 없는 경우 DPC는 기기와 함께 제공된 버전으로 적절하게 대체해야 합니다.
프로필 소유자 모드의 구현 고려사항
다음은 프로필 소유자 작업 모드를 구현하기 위해 DPC를 작성할 때 고려해야 할 사항입니다.
개인 DPC 삭제 또는 사용 중지
프로필 소유자 작업 모드를 프로비저닝할 때 DPC가 개인 프로필에서 실행을 시작하고 직장 프로필을 만드는 프로세스를 시작합니다. 직장 프로필이 생성되면 DPC도 직장 프로필 내에서 실행됩니다. 직장 프로필의 DPC가 프로비저닝 프로세스를 완료합니다. 이때 개인 프로필의 DPC가 자체적으로 사용 중지되거나 기기 사용자가 이를 삭제해야 합니다.
사용자가 개인 DPC 삭제
- 개인 DPC는
ACTION_MANAGED_PROFILE_PROVISIONED.
를 수신 대기합니다. Android 5.1 기기의 경우 개인 DPC는 대신ACTION_MANAGED_PROFILE_ADDED
를 수신 대기합니다. - 개인 DPC는 제거 요청
ACTION_UNINSTALL_PACKAGE
를 시작합니다. 사용자에게 개인 DPC를 설치하라는 메시지가 표시됩니다. 최상의 사용자 환경을 위해 제거 프로세스는 프로비저닝 흐름 도중에 발생해야 합니다.
개인 DPC가 자체적으로 사용 중지됨
- 개인 DPC는
ACTION_MANAGED_PROFILE_PROVISIONED.
를 수신 대기합니다. Android 5.1 기기의 경우 개인 DPC는 대신ACTION_MANAGED_PROFILE_ADDED
를 수신 대기합니다. - 해당하는 경우 개인 DPC는 자체적으로 사용 중지하기 전에 기기 관리자 권한을 해제해야 합니다.
- 개인 DPC는
COMPONENT_ENABLED_STATE_DISABLED
매개변수를 사용하여setApplicationEnabledSetting
사용 중지 요청을 시작합니다. - 사용자는 Google Play에서 개인 DPC를 다시 사용 설정할 수 있습니다.
기기 소유자 모드의 구현 고려사항
다음은 기기 소유자 모드 작업을 구현하기 위해 DPC를 작성할 때 고려해야 할 사항입니다.
기기가 새 기기이거나 초기화되어야 합니다.
새 기기의 초기 설정이나 초기화 후에 기기 소유자 작업을 프로비저닝해야 합니다. 기기 소유자 모드는 그 외 어떤 시점에서도 프로비저닝할 수 없습니다.
기기 소유자 모드를 사용하면 DPC가 기기를 완전히 제어할 수 있습니다. 초기 설정이 허용된 후에 기기 소유자 모드를 프로비저닝하는 경우:
- 멀웨어가 기기 소유자를 생성하고 기기를 장악할 수 있습니다.
- 기기에 이미 일부 사용자 데이터나 앱이 있는 경우 개인 정보 보호 문제가 발생할 수 있습니다.
회사 소유 기기에서만 기기 소유자 모드 설정
고객 회사가 소유한 것으로 식별된 기기에서만 기기 소유자 모드를 프로비저닝해야 합니다. 고유한 기기 식별자 (예: 일련번호)를 감지하거나 EMM 정책을 통해 기기 등록이 승인된 전용 계정을 사용하여 이를 확인할 수 있습니다.
기기의 회사 소유권을 확인할 수 없는 경우 기기 소유자 모드가 실수로 프로비저닝되지 않도록 오류 방지 메커니즘을 만들어야 합니다. 예를 들어 기기 소유자 모드를 프로비저닝하기 전에 기기 사용자에게 확인 또는 긍정적 조치를 취하라는 메시지를 표시할 수 있습니다.
시스템 앱 사용 설정
DPC가 직장 프로필을 프로비저닝할 때 런처 아이콘이 없는 모든 시스템 앱은 기기에 중요한 것으로 가정되고 직장 프로필에서 자동으로 실행이 허용됩니다. 런처 아이콘이 있는 시스템 앱은 선택사항으로 간주되며 사용 여부를 결정할 수 있습니다.
Google Play를 통해 시스템 앱 사용 설정
Google Play를 사용하여 시스템 앱을 쉽게 사용 설정할 수 있고 사용자는 최신 앱 업데이트를 받을 수 있습니다.
Android 프레임워크 API를 사용하여 시스템 앱 사용 설정
사용자가 기기 사용을 시작하는 즉시 시스템 앱을 볼 수 있도록 하려면 기기 프로비저닝 프로세스의 일부로 시스템 앱을 사용 설정합니다. DPC는 패키지 이름 또는 DevicePolicyManager.enableSystemApp()
를 사용하는 인텐트별로 시스템 앱을 사용 설정합니다.
사용 설정하고 시스템 콘솔에서 IT 관리자에게 제공할 시스템 앱을 식별하는 몇 가지 방법이 있습니다.
시스템 앱 카탈로그 만들기
이 방법을 통해 각 기기는 기기에 있는 앱을 확인하고 이 데이터를 EMM 콘솔로 다시 전송합니다. EMM 관리자는 기기 정책을 만들 때 이 데이터를 동적으로 표시하므로 IT 관리자가 앱별로 앱을 관리할 수 있습니다.
- 직장 프로필이 기기에 아직 프로비저닝되지 않은 경우
queryIntentActivities()
를 사용하여 기기에서 런처 아이콘이 있는 모든 앱 목록을 가져옵니다.
private List
getAppsWithLauncher() {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
return getPackageManager().queryIntentActivities(i, 0);
} - 직장 프로필이 이미 기기에 프로비저닝되어 있는 경우
PackageManager.GET_DISABLED_COMPONENTS
및PackageManager.GET_UNINSTALLED_PACKAGES
를 사용하여 직장 프로필의 모든 앱 목록을 가져옵니다. - 앱이 기기의 시스템 이미지에 설치되어 있는지 나타내는
FLAG_SYSTEM
를 확인하여 앱 목록에서 시스템 앱을 찾습니다.
장점:
- IT 관리자가 모든 기기에 설치된 앱을 전체적으로 파악할 수 있습니다.
- 사용 설정된 앱을 세밀하게 제어할 수 있습니다.
단점:
- 기기마다 앱 카탈로그가 다르므로 단일 정책 구성 모델을 여러 기기 유형에 적용하기가 어렵습니다.
- IT 관리자에게는 OEM별 앱 용량을 의미 있는 방식으로 제시하기 어려울 수 있습니다.
기능별로 시스템 앱 분류
IT 관리자는 기기 그룹에 시스템 앱을 사용 설정하려는 경우 기능(예: '시스템 브라우저')에 따라 일반 앱을 선택합니다. 그러면 DPC는 그 인텐트에 모든 시스템 앱을 허용합니다.
장점:
- IT 관리자가 기능별로 간편하게 사용 설정할 수 있습니다.
- 다양한 기기에서 일관된 기능을 보장합니다 (최소한 일반적인 사용 사례에서).
단점:
- 시스템 앱이 모든 기기 유형에서 지원되는 앱으로 제한됩니다.
- IT 관리자는 앱의 OEM 버전 (예: LG® 브라우저)을 푸시하고 다른 버전 (예: LG® 브라우저)은 푸시하지 않을 수 있습니다.
- IT 관리자는 여러 앱을 푸시하는 것을 원하지 않을 수 있지만 인텐트 핸들러가 여러 개인 경우 이를 방지할 수 없습니다.
승인된 시스템 앱만 지원
OEM과 협력하여 특정 OEM 패키지를 식별하고 EMM 콘솔 내에서 이러한 패키지만 지원합니다. 이렇게 하면 OEM 앱이 Google Play에서 호스팅되지 않으므로 OEM 앱 관리 구성을 카탈로그로 분류할 수 있습니다.
장점:
- 통합 워크플로를 대폭 간소화하고 처음 두 가지 옵션에서 문제가 있는 특이 사례를 삭제합니다.
- OEM 앱의 관리 구성을 카탈로그화하고 IT 관리자를 위해 EMM 콘솔에 이러한 구성을 제공할 수 있습니다.
- 플래그십 기기 지원을 위해 OEM과의 긴밀한 관계를 지원합니다.
단점:
- 결과적으로 확장성이 떨어지고 소비자 선택이 감소합니다.
레거시 모드 구현 고려사항
다음은 기존 작업 모드를 구현하기 위해 DPC를 작성할 때 고려해야 할 사항입니다.
기기가 직장 프로필을 지원하는지 확인
직장 프로필을 지원하지 않는 기기의 경우 기존 작업 모드를 프로비저닝할 수 있습니다. 다음과 같은 경우 직장 프로필을 지원하지 않는 기기입니다.
- Android 5.0 이전 버전을 실행합니다.
- RAM이 적은 경우(5.0 이상의 Android 버전을 실행하는 경우에도 해당)
직장 프로필이 지원되는지 확인하기 위해 DPC는 PackageManager를 사용할 수 있습니다.
if (!getPackageManager().hasSystemFeature(
PackageManager.FEATURE_MANAGED_USERS)) {
// Use legacy mode
...
}
DPC의 테스트 시나리오
테스트 DPC는 DPC 앱에서 엔터프라이즈 기능을 테스트하기 위해 Google에서 제공하는 오픈소스 앱입니다. 테스트 DPC는 github 또는 Google Play에서 제공됩니다. 테스트 DPC를 사용하여 다음을 수행할 수 있습니다.
- Android에서 기능 시뮬레이션
- 정책 설정 및 적용
- 앱 및 인텐트 제한 설정
- 직장 프로필 설정
- 완전 관리형 Android 기기 설정
테스트 DPC는 기본적으로 Android용 엔터프라이즈 솔루션을 테스트하기 위한 수단이지만 Android 기능용 샘플 코드 소스로 사용할 수도 있습니다.
프로비저닝 맞춤설정
기기 프로비저닝 중에는 시스템 사용자 인터페이스의 상태 표시줄에 기본 색상이 표시되고 화면 상단에 기본 로고가 표시됩니다. DPC와 시스템 인터페이스 간에 일관된 시각적 전환을 제공하도록 맞춤 색상과 로고를 설정하거나 관리자가 EMM 콘솔을 사용하여 이를 수행하도록 허용합니다. 예를 들어 관리자가 회사 로고를 업로드하거나 알림을 표시하는 화면의 모양을 맞춤설정할 수 있습니다.
DPC는 DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR
및 DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI
extras를 사용하여 색상과 로고 선택을 적용합니다.
맞춤 색상을 설정하려면 EXTRA_PROVISIONING_MAIN_COLOR
를 사용하여 기기 프로비저닝 중에 표시할 주요 색상을 나타내는 정수를 설정합니다. 추가 (상수)를 ACTION_PROVISION_MANAGED_PROFILE
또는 ACTION_PROVISION_MANAGED_DEVICE
를 사용하여 인텐트에 넣습니다.
정수가 표시되는 방식을 확인하려면 색상을 참고하세요. 예는 MAIN_COLOR in
the TestDPC app
를 참고하세요.
맞춤 로고를 설정하려면 EXTRA_PROVISIONING_LOGO_URI
을 사용하여 기기 프로비저닝 중에 화면 상단에 표시되는 이미지를 설정합니다. 추가 (상수)를 ACTION_PROVISION_MANAGED_PROFILE
또는 ACTION_PROVISION_MANAGED_DEVICE
를 사용하여 인텐트에 넣습니다. 이미지의 기기 밀도가 적당한지 확인합니다.
예는 TestDPC 앱의 LOGO_URI
를 참고하세요.
QR 코드 방법
QR 코드 프로비저닝 방법은 설정 마법사에서 QR 코드를 스캔하여 기기 소유자 모드를 설정하고 구성합니다. QR 코드에는 DPC에서 기기를 프로비저닝하는 데 필요한 모든 정보가 포함된 키-값 쌍의 페이로드가 포함되어 있습니다.
EMM 콘솔은 IT 관리자가 프로비저닝할 기기의 QR 코드를 만들 수 있는 방법을 제공해야 합니다. IT 관리자는 최종 사용자에게 QR 코드를 전송하고 최종 사용자는 QR 코드를 스캔하여 기기를 프로비저닝합니다.
QR 코드 프로비저닝 사용 사례
태블릿과 같은 일부 기기는 NFC를 지원하지 않습니다. QR 코드 프로비저닝을 사용하면 NFC를 지원하지 않는 기기에 분산된 기기를 간편하게 프로비저닝할 수 있습니다. IT 관리자는 사용자에게 QR 코드를 전송하여 사용자 기반 프로비저닝을 허용할 수 있습니다.
QR 코드 프로비저닝에는 Google 도메인이나 Google 계정과 같은 Google ID가 필요하지 않습니다. Android를 사용하지만 G Suite를 사용하지 않는 조직에는 Google ID가 없습니다.
NFC와 마찬가지로 QR 코드 프로비저닝은 Google ID (또는 모든 ID)가 필요하지 않거나 바람직하지 않은 경우 키오스크 및 일회용 배포를 지원합니다. 예를 들어 매장의 키오스크 기기는 누구에게도 속하지 않으며 최종 사용자 ID도 없어야 합니다.
QR 코드 만들기
QR 코드 프로비저닝에 유효한 QR 코드는 UTF-8로 인코딩된 JavaScript® Object Notation (JSON) 문자열입니다. 유효한 QR 코드에 다음 속성을 포함할 수 있습니다.
항상 필수
기기에 DPC가 아직 설치되어 있지 않은 경우 필수
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
기기가 Wi-Fi에 아직 연결되어 있지 않은 경우 권장됨
Optional
EXTRA_PROVISIONING_LOCALE
EXTRA_PROVISIONING_TIME_ZONE
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER
EXTRA_PROVISIONING_LOCAL_TIME
EXTRA_PROVISIONING_WIFI_HIDDEN
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
EXTRA_PROVISIONING_WIFI_PROXY_HOST
EXTRA_PROVISIONING_WIFI_PROXY_PORT
EXTRA_PROVISIONING_WIFI_PROXY_BYPASS
EXTRA_PROVISIONING_WIFI_PAC_URL
EXTRA_PROVISIONING_SKIP_ENCRYPTION
이 샘플은 유효한 QR 코드를 빌드합니다.
{ "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME": "com.emm.android/com.emm.android.DeviceAdminReceiver", "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM": "gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=", "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://path.to/dpc.apk", "android.app.extra.PROVISIONING_SKIP_ENCRYPTION": false, "android.app.extra.PROVISIONING_WIFI_SSID": "GuestNetwork", "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": { "dpc_company_name": "Acme Inc.", "emm_server_url": "https://server.emm.biz:8787", "another_custom_dpc_key": "dpc_custom_value" } }
QR 코드 프로비저닝 프로세스
- 설정 마법사에서 사용자에게 시작 화면을 6번 탭하라는 메시지를 표시합니다. 탭하는 화면과 동일한 위치를 탭해야 합니다.
- 설정 마법사에서 QR 코드 리더를 다운로드할 수 있도록 사용자에게 인터넷에 연결하라는 메시지를 표시합니다.
- Google Play 서비스가 QR 코드 인식 엔진이 포함된 모듈을 다운로드합니다.
- 사용자가 IT 관리자가 제공한 QR 코드를 스캔합니다.
- 설정 마법사가 DPC 앱을 다운로드하고
ACTION_PROVISION_MANAGED_DEVICE
를 사용하여 기기 소유자 프로비저닝 프로세스를 시작합니다.
관리 Google Play 계정 방법
DPC는 관리 Google Play 계정 프로비저닝 방법을 사용하여 기기 소유자 모드 또는 프로필 소유자 모드를 설정할 수 있습니다. 이 프로비저닝 방법은 현재 G Suite를 사용하지 않는 조직을 대상으로 합니다.
관리 Google Play 계정 프로비저닝 방식에서는 DPC 지원 라이브러리를 사용합니다. 이 클라이언트 라이브러리를 사용하면 관리 Google Play 계정이 원활하게 작동합니다. 또한 관리 Google Play 계정 프로비저닝 프로세스의 향후 업데이트와의 호환성도 유지됩니다.
기기 프로비저닝을 위한 기본 요건
- 엔터프라이즈 ID가 EMM ID로 생성 및 등록되고, 엔터프라이즈 생성 및 등록에 설명된 대로 ESA가 설정됩니다.
- 사용자의 기업 ID가 EMM 콘솔에 알려져 있습니다.
- 사용자는 EMM 콘솔에서 허용하는 사용자 인증 정보(일반적으로 회사 이메일 사용자 인증 정보)를 사용하여 DPC 앱에 로그인할 수 있습니다.
프로필 소유자 모드 설정
BYOD 시나리오에서 개인 기기로 사용 중인 기기에 프로필 소유자 작업을 프로비저닝할 수 있습니다.
- 사용자가 Google Play에서 DPC를 수동으로 다운로드하여 실행합니다.
- DPC가
ACTION_PROVISION_MANAGED_PROFILE
를 사용하여 직장 프로필을 프로비저닝합니다. - 최종 설정 단계를 완료합니다.
기기 소유자 모드 설정
새 기기를 처음 설정할 때 또는 초기화한 후 기기 소유자 작업을 프로비저닝해야 합니다. 기기 소유자 모드는 그 외 어떤 시점에서도 프로비저닝할 수 없습니다.
기기 설정 중에 사용자에게 계정을 추가하라는 메시지가 표시되면 특별한 DPC 관련 토큰을 입력합니다. 토큰은 'afw#DPC_IDENTIFIER' 형식입니다. ACME라는 EMM의 경우 'afw#acme'를 사용하면 ACME EMM의 기본 DPC가 설치됩니다. 각 EMM에서 Google에 특정 DPC 식별자를 요청해야 프로비저닝 단계에서 사용할 수 있습니다.
- 사용자가 새 기기 또는 초기화된 기기를 켜고 설정 마법사가 실행됩니다.
- 계정을 추가하라는 메시지가 표시되면 사용자는 EMM의 DPC를 식별하는 'afw#DPC_IDENTIFIER' 형식으로 특수 토큰을 입력합니다.
- 설정 마법사는 토큰의 DPC 식별자를 사용하여 임시 Google 계정을 기기에 추가합니다. 이 임시 계정은 Google Play에서 EMM용 DPC를 다운로드하는 데만 사용되며 최종 설정 단계에서 삭제됩니다.
- DPC가
ACTION_PROVISION_MANAGED_DEVICE
를 사용하여 기기를 프로비저닝합니다. - 최종 설정 단계를 완료합니다.
Google 계정 방법
DPC는 Google 계정 프로비저닝 방법을 사용하여 기기 소유자 모드, 프로필 소유자 모드 또는 레거시 모드를 설정할 수 있습니다. DPC는 Google 계정 프로비저닝 방법을 사용하여 사용자가 초기 기기 설정 중에 Google 계정을 추가한 후 프로비저닝 단계를 안내합니다.
사용자가 Google 계정 사용자 인증 정보를 입력하는 경우:
- Google 인증 서버가 사용자 계정을 인증합니다.
- 그러면 인증 서버는 엔터프라이즈 서버와 통신하여 계정 도메인이 G Suite 도메인 또는 EMM 관리 도메인으로 등록되어 있는지 확인합니다.
- 이 경우 시스템이 도메인과 연결된 DPC를 Google Play에서 자동으로 다운로드하고 설치합니다.
프로필 소유자 모드 설정
기기를 처음 설정할 때 또는 사용자가 설정 > 계정 추가를 사용하여 계정을 추가할 때 프로필 소유자 작업을 프로비저닝할 수 있습니다.
- 계정 인증은 사용자가 설정 마법사 또는 설정 > 계정 추가에서 시작합니다.
GMSCore가
[PROVISION_FROM_TRUSTED_SOURCE]
를 사용하여 직장 프로필 프로비저닝을 시작합니다.DPC가 기기에 자동으로 다운로드되고
ACTION_GET_PROVISIONING_MODE
핸들러를 사용하여 실행되어 DPC에서 직장 프로필 프로비저닝을 지원하는지 확인합니다.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
: 이메일 주소와 같은 직장 프로필의 추가 정보입니다. DPC는 이 번들의 일부로 여기서 is_setup_wizard도 수신합니다. 이 번들은ACTION_GET_PROVISIONING_MODE
및ACTION_ADMIN_POLICY_COMPLIANCE
핸들러에 포함됩니다.
EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
:새 직장 프로필로 이전할 인증된 계정의 이름입니다.플랫폼에서 직장 프로필 프로비저닝을 수행합니다.
직장 프로필이 프로비저닝되면 DPC가 브로드캐스트를 수신합니다.
ACTION_PROFILE_PROVISIONING_COMPLETE
DPC의ACTION_ADMIN_POLICY_COMPLIANCE
핸들러가 직장 프로필에서 실행됩니다.
직장 프로필이 생성되면 DPC도 직장 프로필 내에서 실행됩니다. DPC는 이 관리 Google 계정의 정책을 푸시하고 기기가 보안 침해된 상태가 아닌지 확인하며 정책이 시행되는지 확인합니다 (예: 비밀번호 요청).개인 프로필의 DPC가 직접 사용 중지되거나 사용자가 삭제됩니다.

기기 소유자 모드 또는 COPE 설정
새 기기를 처음 설정할 때 또는 초기화한 후 기기 소유자 작업을 프로비저닝해야 합니다. 기기 소유자 모드는 그 외 다른 시점에 추가할 수 없습니다.
- 계정 인증은 사용자가 설정 마법사에서 시작합니다.
- GMSCore가
[PROVISION_FROM_TRUSTED\SOURCE]
를 사용하여 기기 소유자 프로비저닝을 시작합니다. 3.DPC가 기기에 자동으로 다운로드되고GET_PROVISIONING_MODE
핸들러를 사용하여 DPC가 실행되어 원하는 프로비저닝 모드를 선택합니다.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
:언어, Wi-Fi, 이메일 주소와 같은 직장 프로필의 추가 정보입니다. DPC는 이 번들의 일부로 여기서 is_setup_wizard도 수신합니다. 이 번들은ACTION_GET_PROVISIONING_MODE
및ACTION_ADMIN_POLICY_COMPLIANCE
핸들러에 포함됩니다. - 플랫폼이 원하는 프로비저닝 모드에 기기를 프로비저닝합니다.
기기가 프로비저닝되면 DPC가 이러한 브로드캐스트를 수신하고 DPC의
ACTION_ADMIN_POLICY_COMPLIANCE
핸들러가 실행됩니다.
ACTION_READY_FOR_USER_INITIALIZATION
ACTION_PROFILE_PROVISIONING_COMPLETE
.DPC는
Global.DEVICE_PROVISIONED
의 값을 사용하여 기기가 새 기기인지 또는 초기화되었는지 (프로비저닝되지 않음)를 확인합니다.
0: 프로비저닝되지 않음
1—프로비저닝됨DPC는 관리 기기의 정책을 푸시하고 기기가 보안 침해 상태가 되지 않도록 하며 정책이 시행되는지 확인(예: 비밀번호 요청)하여 프로비저닝 프로세스를 완료합니다.

레거시 모드 설정
기기를 처음 설정할 때 또는 사용자가 설정 > 계정 추가에서 계정을 추가할 때 기존 작업 모드를 프로비저닝할 수 있습니다. Google 계정이 있는 사용자가 관리 Google Play를 사용할 수 있도록 하기 위한 요구사항은 다음과 같습니다.
- Google 계정이 관리 Google 도메인의 일부입니다.
- 관리 Google 도메인은 Google Play EMM API에 바인딩된 EMM을 사용하여 Android용으로 설정됩니다.
기존 기기에서만 앱 관리를 하려는 경우에는 DPC가 필요하지 않습니다. 이 경우 사용자는 설정 > 계정 추가에서 Google 계정을 추가합니다. 앱 관리에는 추천 앱 선별, 비공개 앱 제공, 라이선스 구매 및 배포 작업이 포함됩니다.
DPC에 Google 계정을 추가하려면 다음 안내를 따르세요.
- 사용자가 Google Play에서 DPC를 다운로드하여 실행합니다.
- 해당 DPC는
AccountManager.addAccount()
를 사용하여 관리 Google 계정을 추가합니다.AccountManager.KEY_ACCOUNT_NAME
를 사용하여 특정 Google 계정을 추가하는 샘플 구현은 TestDPC를 참고하세요. - (선택사항) DPC는 스스로를 기기 관리자로 설정합니다. 기기 관리자로서 DPC에는 앱 관리 이상의 기기 관리 기능이 있습니다.
Google 계정 메서드의 구현 고려사항
DPC는 사용된 시작 인텐트에서 특정 추가 항목을 찾아 Google 계정 인증 흐름을 감지해야 합니다 (
LaunchIntentUtil
참고).- 계정 유형
android.accounts.Account
- 계정이 설정 마법사 또는 설정 > 계정 추가에서 추가되었음을 나타냅니다. 이 경우 기기 또는 프로필을 관리하기 위해 실행된 DPC가 필요합니다. is_setup_wizard
부울 유형: true인 경우 DPC는 설정 마법사가 완료되기 전에 설정 마법사에서 실행되었고, 그렇지 않은 경우에는 설정 > 계정 추가 또는 다른 흐름에서 실행되었습니다.
DPC가 Google 계정 메서드의 일부로 실행되었는지 간단하게 확인하는 방법은 다음과 같습니다.
- 계정 유형
boolean isSynchronousAuthLaunch(Intent launchIntent) { return launchIntent.hasExtra(“is_setup_wizard”); }
DPC는 설정을 완료하기 전에
finish()
를 호출하면 안 됩니다. 또한 DPC가startActivityForResult()
로 실행되고 결과를 기다리는 동안 포지티브 결과 코드(예:RESULT_OK
)를 반환해야 합니다.DPC 설정 흐름이
ACTION_PROVISION_*
인텐트를 전송하는 시점에 도달하면 DPC는finish()
를 호출하기 전에 프로비저닝 프로세스의 결과 코드를 기다려야 합니다.ACTION_PROVISION_*
인텐트를 실행할 때startActivityForResult()
및onActivityResult()
콜백을 사용합니다.LaunchActivity
및SetupSyncAuthManagement
예를 참고하세요.설정 프로세스의 잠재적 잠재적 특성으로 인해 DPC는
RESULT_OK
의 결과 코드에 의존하여 프로비저닝이 성공했음을 나타낼 수 없습니다. 유일하게 보장되는 방법은 프로비저닝 성공에DeviceAdminReceiver
콜백을 사용하는 것입니다.RESULT_CANCELED
는 사용자가 설정 흐름에서 동기식으로 백업했으며 DPC가 이에 응답해야 함을 나타냅니다.이 예에서 DPC는 프로비저닝을 실행하고 활동의 결과 코드를 기다립니다.
Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE); startActivityForResult(intent, REQUEST_MANAGED_PROFILE);
...
@Override public void onActivityResult(int req, int res, Intent i) { if (req == REQUEST_MANAGED_PROFILE) { if (res == Activity.RESULT_OK) { setResult(Activity.RESULT_OK); finish(); } else { Toast.makeText(this, “Provisioning failed”, Toast.LENGTH_SHORT).show(); } } }
- 기기가 이미 프로비저닝된 경우 DPC는 기기 소유자 작업 모드를 설정하려고 해서는 안 됩니다 (
ProvisioningStateUtil.isDeviceProvisioned()
참고). 이 예에서 DPC는 기기가 프로비저닝되었는지 확인합니다.
public static boolean isDeviceProvisioned(Context context) { ContentResolver cr = context.getContentResolver(); return Settings.Global.getInt(cr, DEVICE_PROVISIONED, 0) != 0; }
- 선택사항. DPC는 프로비저닝을 시작할 때
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
추가 항목을 사용하여 상태 정보를 다시DeviceAdminReceiver
에 전달할 수 있습니다(프로필 소유자 사례에서는 직장 프로필 내에서 실행 중). 테스트 DPC는 프로비저닝이 완료된 후 이 추가 항목을 사용하여 Google 계정 흐름에 다른 활동 세트를 입력합니다. 자세한 내용은DeviceAdminReceiver
를 참고하세요.
public class DeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver { @Override public void onProfileProvisioningComplete(Context context, Intent intent) { // Retrieve the admin extras bundle, which we can use to determine the original context for // Test DPC’s launch. PersistableBundle extras = intent.getParcelableExtra( EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE); ...
- 직장 프로필을 설정하려면 DPC가 추가된 계정을 새 직장 프로필로 이전해야 합니다. 이렇게 하려면 DPC가
ACTION_PROVISION_MANAGED_PROFILE
의 시작 인텐트에서 제공된 계정을 전달해야 합니다. - DPC는 사용자가 절차의 막다른 단계에 도달하지 않았다고 생각하지 않도록 설정 완료 시 앱을 종료할 수 있는 명확한 클릭 유도 문구 (예: 마침 버튼)를 제공해야 합니다.
- DPC는 설정 마법사 테마 또는 레이아웃 라이브러리를 사용하여 매끄럽고 원활한 통합을 경험할 수 있도록 해야 합니다.
NFC 메서드
DPC는 NFC 프로비저닝 방법을 사용하여 기기 소유자 모드를 설정할 수 있습니다. NFC 프로비저닝 방법 또는 NFC 마주 대기 상태에서 고객이 기기 소유자 작업을 구성하는 데 필요한 초기 정책 및 Wi-Fi 구성, 설정 및 프로비저닝 세부정보가 포함된 NFC 프로그래머 앱을 만듭니다. 개발자 또는 고객이 Android 기기에 NFC 프로그래머 앱을 설치하면 해당 기기가 프로그래머 기기가 됩니다.
기기를 프로비저닝하기 위해 IT 관리자는 새 기기를 상자에서 꺼내어 프로그래머 기기와 충돌시킵니다. 범프는 구성을 기기에 전송하여 인터넷에 연결하고 적절한 정책과 설정을 다운로드합니다. 그러면 DPC에서 기기를 관리합니다.
기기가 프로비저닝되면 잠시 동안 Google Play는 표시해야 하는 승인된 앱과 컬렉션 대신 비관리 소비자 콘텐츠를 표시합니다. 이 지연은 몇 분에서 최대 1시간까지 지속될 수 있습니다.
NFC 프로그래머 앱 및 프로그래머 기기 만들기
- Google Cloud Connect의 EMM 커뮤니티에서 NFC 프로그래머 샘플 앱을 다운로드합니다. 샘플 앱을 그대로 사용하거나 기본값에 맞게 수정할 수 있습니다. 기본 매개변수 샘플 코드를 참조하세요.
- 프로그래머 기기가 될 기기에 NFC 프로그래머 앱을 설치합니다.
- NFC 프로그래머 앱을 실행하고 com.example.android.apis에서 Load Defaults(기본값 로드)를 선택합니다. 이 텍스트는 설정한 기본 매개변수에 따라 달라질 수 있습니다.
고객 기기 프로비저닝
- 프로그래머 기기를 새 기기 또는 초기화된 기기로 범프합니다.
- 기기가 시작될 때 표시되는 초기 환영 화면에 기기가 남아 있는지 확인합니다. 텍스트는 프로그래머 앱의
Ready to send:{...}
에 지정됩니다. - DPC에서 다음 작업을 진행합니다.
- 기기를 암호화합니다.
- 코드 분할 다중 액세스 (CDMA) 기기인 경우 전화 통신 사용자 인터페이스가 표시되는 동안 휴대전화를 활성화합니다 (상호작용이 필요하지 않음).
- Wi-Fi 연결을 설정합니다.
- com .example.android.apis의.apk 파일을 다운로드합니다.
- com.example.android.apis를 설치합니다.
- com.example.android.apis의 샘플 기기 관리자를 기기 소유자로 설정합니다.
- 기기 소유자가 활성화되면 성공적인 '토스트'라고 표시됩니다.
- 홈페이지로 돌아간 후 (설정 마법사가 자동으로 건너뜀) com.example.android.apis가 기기 소유자로 설정되어 있는지 확인합니다.
- 설정 > 보안 > 기기 관리자에서 샘플 기기 관리자를 삭제할 수 없는지 확인합니다.
- 설정 > 사용자 > 사용자 및 프로필 > 사용자 (소유자)에서 사용 가능한 유일한 계정이 있는지 확인합니다 (기기는 한 번에 활성 기기 소유자를 한 명만 보유할 수 있음).
NFC 프로그래머 앱의 코드 샘플
특히 유용하다고 생각되는 NFC 프로그래머 앱의 섹션에는 인라인 주석이 있습니다. NFC 프로그래머 앱에서 모든 샘플 코드를 보려면 자바 디컴파일러 프로그램을 사용하여 샘플 .apk 파일을 압축 해제합니다.
initializePropertyUI() 메서드
initializePropertyUI()
메서드는 NFC 프로그래머 앱의 사용자 인터페이스 요소 (수정 가능한 텍스트 상자 및 체크박스)를 초기화합니다. 이러한 요소의 변경사항은 mProps
변수가 보유한 키-값 쌍 (KVP)에 동기화됩니다. mProps
변수는 최종적으로 NFC 범프의 기기로 전송됩니다.
private void initializePropertyUI(int paramInt1, int paramInt2, final String paramString) { Log.d("DeviceProvisioningProgrammerSample","initializeProperty for " + paramString); final EditText localEditText = (EditText)findViewById(paramInt1); final CheckBox localCheckBox =(CheckBox)findViewById(paramInt2); /* Here we initialize text boxes so that when their text is edited the changes are synced to mProps. */ if(localEditText != null) localEditText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable paramAnonymousEditable) { } public void beforeTextChanged(CharSequence paramAnonymousCharSequence, int paramAnonymousInt1, int paramAnonymousInt2, int paramAnonymousInt3) { } public void onTextChanged(CharSequence paramAnonymousCharSequence, int paramAnonymousInt1, int paramAnonymousInt2, in paramAnonymousInt3) { if ((localCheckBox != null) && (localCheckBox.isChecked())) { DeviceProvisioningProgrammerSample.this.mProps.put(paramString, localEditText.getText().toString()); DeviceProvisioningProgrammerSample.this.refreshMessageView(); } } }); /* Here we initialize check boxes, so that when they are unchecked, the edit boxes are disabled, and the corresponding KVPs are removed from mProps. When they are checked the KVPs are re added, and the text boxes are enabled. */ if (localCheckBox != null) localCheckBox.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton paramAnonymousCompoundButton, boolean paramAnonymousBoolean) { Log.d("DeviceProvisioningProgrammerSample", "onCheckedChanged for " + localEditText.getText().toString() + " isChecked = " + paramAnonymousBoolean); if (paramAnonymousBoolean) { localEditText.setEnabled(true); DeviceProvisioningProgrammerSample.this.mProps.put(paramString, localEditText.getText().toString()); DeviceProvisioningProgrammerSample.this.refreshMessageView(); return; } localEditText.setEnabled(false); DeviceProvisioningProgrammerSample.this.mProps.remove(paramString); DeviceProvisioningProgrammerSample.this.refreshMessageView(); } }); }
기본 매개변수
이 코드 샘플은 NFC 범프의 기기로 푸시될 기본값을 설정합니다. 일부 구성 가능한 매개변수는 샘플에 포함되어 있지 않지만 구현에 포함해야 할 수 있습니다. (샘플에 없는 매개변수는 여기에서 확인할 수 있습니다.)
public void loadDefaults1(View paramView) { /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME */ ((EditText)findViewById(2131034114)).setText("com.example.android.apis"); ((CheckBox)findViewById(2131034113)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION */ ((EditText)findViewById(2131034116)).setText ("https://sites.google.com/site/apidemodownload/somepage/ApiDemos.apk"); ((CheckBox)findViewById(2131034115)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM (note: must be URL-safe)*/ ((EditText)findViewById(2131034118)).setText("ZYk5xsY0xqic51CTqB9kLiMLqwk"); ((CheckBox)findViewById(2131034117)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_WIFI_SSID */ ((EditText)findViewById(2131034120)).setText("\"GoogleGuest\""); ((CheckBox)findViewById(2131034119)).setChecked(true); /* This EditText holds the KVP for EXTRA_PROVISIONING_TIME_ZONE*/ ((EditText)findViewById(2131034122)).setText("Europe/London"); ((CheckBox)findViewById(2131034121)).setChecked(true); ((CheckBox)findViewById(2131034123)).setChecked(false); /* This EditText holds the KVP for EXTRA_PROVISIONING_LOCALE ((EditText)findViewById(2131034126)).setText("en_GB"); ((CheckBox)findViewById(2131034125)).setChecked(true); }
onCreate() 메서드
onCreate()
메서드는 NFC 프로그래머 앱과 관련 기능을 초기화합니다.
android.app.extra 문자열은 DevicePolicyManager
문서에 설명된 문자열에 해당합니다. 예: DevicePolicyManager.EXTRA_ PROVISIONING_WIFI_SSID ==
"android.app.extra.PROVISIONING_WIFI_SSID"
protected void onCreate(Bundle paramBundle) { Log.d("DeviceProvisioningProgrammerSample", "onCreate"); super.onCreate(paramBundle); setContentView(2130903040); this.mTextView = ((TextView)findViewById(2131034112)); this.mProps = new Properties(); initializePropertyUI(2131034114, 2131034113, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME"); initializePropertyUI(2131034116, 2131034115, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION"); initializePropertyUI(2131034118, 2131034117, "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM"); initializePropertyUI(2131034120, 2131034119, "android.app.extra.PROVISIONING_WIFI_SSID"); initializePropertyUI(2131034122, 2131034121, "android.app.extra.PROVISIONING_TIME_ZONE"); initializePropertyUI(2131034124, 2131034123, "android.app.extra.PROVISIONING_LOCAL_TIME"); initializePropertyUI(2131034126, 2131034125, "android.app.extra.PROVISIONING_LOCALE"); refreshMessageView(); /* Next we get the default NFC adapter for the Android device being used, and define CreateNdefMessageCallback() for that adapter, which is invoked when another NFC device capable of NDEF push (Android Beam) is within range. CreateNdefMessageCallback is an interface that has one abstract method that needs to be defined. That method, createNdefMessage, creates the message to be pushed. */ NfcAdapter.getDefaultAdapter(this).setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { public NdefMessage createNdefMessage(NfcEvent paramAnonymousNfcEvent) { /* Here ndefMessage creates an output stream which contains the values from mProps. */ Log.d("DeviceProvisioningProgrammerSample", "Sending Nfc"); ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); try { DeviceProvisioningProgrammerSample.this.mProps.store(localByteArrayOutputStream, DeviceProvisioningProgrammerSample.this.getString(2130968578)); DeviceProvisioningProgrammerSample.this.mTextView.post(new Runnable() { public void run() { DeviceProvisioningProgrammerSample.this.refreshMessageView(); } }); /* Here NdefMessage is created containing an NdefRecord. The NdefRecord contains its record type, and a byte array derived from the mProps output stream. */ return new NdefMessage(new NdefRecord[] { NdefRecord.createMime("application/com.android.managedprovisioning", localByteArrayOutputStream.toByteArray()) }); } catch (IOException localIOException) { while (true) Log.e("DeviceProvisioningProgrammerSample", "io exception", localIOException); } } } , this, new Activity[0]); }
추가 리소스
고급 NFC는 다양한 태그 기술 사용, NFC 태그 작성, 포그라운드 디스패치와 같은 고급 NFC 주제를 설명합니다.
수동 DPC 설치 방법
수동 DPC 설치 프로비저닝 방법을 사용하여 프로필 소유자 모드를 설정하려면 사용자가 Google Play에서 DPC를 다운로드하고 설치합니다. 그러면 DPC가 사용자에게 관리 Google 계정의 프로필 소유자를 설정하는 나머지 프로세스를 안내합니다.
DPC는 직장 프로필을 만들기 전이나 후에 관리 Google 계정을 추가할 수 있습니다. 예를 들어 DPC는 관리 Google 계정에 먼저 메시지를 표시하는 대신 사용자의 EMM 사용자 인증 정보를 기반으로 직장 프로필을 만들 수 있습니다.
프로필 소유자 모드 설정
먼저 관리 Google 계정 추가
- 사용자가 Google Play에서 DPC를 다운로드하여 설치합니다.
- DPC는
AccountManager.addAccount()
를 사용하여 직장 프로필을 만들기 전에 관리 Google 계정을 추가합니다. - DPC가 개인 프로필에서 실행을 시작하고 다음을 사용하여 직장 프로필 생성 프로세스를 시작합니다.
ACTION_PROVISION_MANAGED_PROFILE
—직장 프로필을 프로비저닝합니다.
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
—언어, Wi-Fi, 이메일 주소와 같은 직장 프로필의 추가 정보입니다.
EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
:새 직장 프로필로 이전할 인증된 계정의 이름입니다. - 직장 프로필의 DPC가 프로비저닝 프로세스를 완료합니다. 직장 프로필이 생성되면 DPC도 직장 프로필 내에서 실행됩니다. 직장 프로필의 DPC는 관리 Google 계정의 정책을 푸시하고 기기가 보안 침해된 상태가 아닌지 확인하며 정책이 적용되는지 확인 (예: 비밀번호 요청)하여 프로비저닝 프로세스를 완료합니다.
- 직장 프로필이 프로비저닝되면 DPC가 브로드캐스트
ACTION_PROFILE_PROVISIONING_COMPLETE
를 수신합니다. - 개인 프로필의 DPC가 직접 사용 중지되거나 사용자가 삭제됩니다.

먼저 직장 프로필을 만드세요.
- 사용자가 Google Play에서 DPC를 다운로드하여 설치합니다.
- DPC가 개인 프로필에서 실행을 시작하고 다음을 사용하여 직장 프로필 생성 프로세스를 시작합니다.
ACTION_PROVISION_MANAGED_PROFILE
—직장 프로필을 프로비저닝합니다.
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
—언어, Wi-Fi, 이메일 주소와 같은 직장 프로필의 추가 정보 - 해당 DPC는
AccountManager.addAccount()
를 사용하여 관리 Google 계정을 추가합니다. - DPC가 브로드캐스트
ACTION_PROFILE_PROVISIONING_COMPLETE
를 수신하고EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
를 읽습니다. - 직장 프로필의 DPC가 프로비저닝 프로세스를 완료합니다. 직장 프로필이 생성되면 DPC도 직장 프로필 내에서 실행됩니다. 직장 프로필의 DPC는 관리 Google 계정의 정책을 푸시하고 기기가 보안 침해된 상태가 아닌지 확인하며 정책이 적용되는지 확인 (예: 비밀번호 요청)하여 프로비저닝 프로세스를 완료합니다.
- DPC는
DevicePolicyManager.setProfileEnabled()
를 사용하여 직장 프로필을 사용 설정합니다. - 개인 프로필의 DPC가 직접 사용 중지되거나 사용자가 삭제됩니다.

레거시 모드 설정
기기를 처음 설정할 때 또는 사용자가 설정 > 계정 추가에서 계정을 추가할 때 기존 작업 모드를 프로비저닝할 수 있습니다. Google 계정이 있는 사용자가 관리 Google Play를 사용할 수 있도록 하기 위한 요구사항은 다음과 같습니다.
- Google 계정이 관리 Google 도메인의 일부입니다.
- 관리 Google 도메인은 Google Play EMM API에 바인딩된 EMM을 사용하는 엔터프라이즈의 Android에 대해 설정됩니다.
기존 기기에서만 앱 관리를 하려는 경우에는 DPC가 필요하지 않습니다. 이 경우 사용자는 설정 > 계정 추가에서 Google 계정을 추가합니다. 앱 관리에는 추천 앱 선별, 비공개 앱 제공, 라이선스 구매 및 배포 작업이 포함됩니다.
DPC에 Google 계정을 추가하려면 다음 안내를 따르세요.
- 사용자가 Google Play에서 DPC를 다운로드하여 실행합니다.
- 해당 DPC는
AccountManager.addAccount()
를 사용하여 관리 Google 계정을 추가합니다.AccountManager.KEY_ACCOUNT_NAME
를 사용하여 특정 Google 계정을 추가하는 샘플 구현은 TestDPC를 참고하세요. - (선택사항) DPC는 스스로를 기기 관리자로 설정합니다. 기기 관리자로서 DPC에는 앱 관리 이상의 기기 관리 기능이 있습니다.