앱 배포

Google Play EMM API는 다음과 같은 공개 및 비공개 앱 배포 방법을 지원합니다.

관리 Google Play 스토어에서 직접 앱 설치하기

Devicepolicy에서 사용자가 설치할 수 있는 앱을 정의하고 Devices.update를 호출하여 설정할 수 있습니다. 새 기기를 프로비저닝할 때는 기기에 Managed Google Play 계정을 추가하기 전에 정책을 설정해야 합니다. 그러지 않으면 기기에 계정을 추가한 후 짧은 시간 동안 정책이 적용되지 않습니다.

관리 Play 스토어 동작은 policy.productAvailabilityPolicy 값으로 정의됩니다.

  • all: Play 스토어의 모든 공개 앱을 사용할 수 있습니다.
  • whitelist: policy.productPolicy에 나열된 앱만 사용할 수 있습니다.

두 경우 모두 policy.productPolicy의 모든 앱이 기본적으로 엔터프라이즈의 스토어 레이아웃에 추가됩니다. whitelist가 선택된 경우 기업의 스토어 레이아웃은 관리되는 Play 스토어의 홈페이지이고 all를 선택하면 'Work Apps' 탭에서 액세스할 수 있습니다. 고객이 관리 Google Play iframe을 삽입하거나 (관리 Google Play iframe으로 앱 정리 참고) 맞춤 스토어 레이아웃 API와 통합하여 엔터프라이즈의 스토어 레이아웃을 맞춤설정하도록 허용할 수 있습니다.

사용자 기기에 원격으로 앱 설치

사용자의 기기에 앱을 원격으로 설치 (푸시 설치라고도 함)하려면 Devicepolicy에서 policy.productPolicy.autoInstallPolicy를 설정합니다. 새 기기를 프로비저닝할 때는 기기에 Managed Google Play 계정을 추가하기 전에 정책을 설정해야 합니다. 그러지 않으면 기기에 계정을 추가한 후 짧은 시간 동안 정책이 적용되지 않습니다.

autoInstallMode는 다음과 같이 설정할 수 있습니다.

  • doNotAutoInstall: 앱이 자동으로 설치되지 않습니다.
  • autoInstallOnce: 앱이 한 번 자동으로 설치되며 사용자가 앱을 제거하면 다시 설치되지 않습니다.
  • forceAutoInstall: 앱이 자동으로 설치되고 사용자가 앱을 제거하면 다시 설치됩니다. 관리 기기에서 DPC는 DevicePolicyManager.setUninstallBlocked를 사용하여 제거를 차단해야 합니다.

연결 실패, 저장소 부족 등 장애가 발생하면 성공할 때까지 설치가 자동으로 재시도됩니다. 복구할 수 없는 장애가 발생할 경우 배터리와 데이터가 낭비되지 않도록 지수 백오프 재시도 전략이 적용됩니다.

설치 우선순위

autoInstallPriority를 설정하여 설치 순서를 선택할 수 있습니다. 우선순위는 부호 없는 정수여야 하며 기본값은 0입니다. 앱은 증가하는 순서 또는 우선순위에 따라 설치됩니다. 즉, 우선순위 값이 낮은 앱이 먼저 설치됩니다.

제약조건 설치

설치 중에 기기의 필수 상태를 제어할 수 있도록 autoInstallConstraint를 설정하여 각 앱의 설치 제약 조건을 설정할 수 있습니다.

  • 기기를 Wi-Fi 네트워크에 연결해야 하는지 여부,
  • 기기가 충전되어야 하는지,
  • 기기가 유휴 상태 (사용자가 적극적으로 사용하지 않음)여야 하는지 여부 등입니다.

제약 조건이 즉시 충족되지 않으면 영향을 받는 설치가 제약 조건이 충족될 때까지 큐에 추가됩니다.

autoInstallConstraint에서 AND 규칙은 필드 사이에 적용됩니다. 예를 들어 다음 autoInstallConstraint의 경우 앱을 설치하려면 기기가 충전 중이고 무제한 네트워크 (예: Wi-Fi)에 연결되어 있어야 합니다.

"autoInstallConstraint": [
  "chargingStateConstraint" : "chargingRequired",
  "networkTypeConstraint" : "unmeteredNetwork"
]

새로 프로비저닝된 기기에 앱 자동 설치

Google Play EMM API는 기기가 처음 프로비저닝될 때 NewDeviceEvent 알림을 전송합니다. 새로 프로비저닝된 기기에 앱을 자동으로 푸시하려면 NewDeviceEvent 알림을 수신 대기합니다. 각 NewDeviceEvent에서 userIddeviceId를 검색한 다음 Devices.update를 호출하여 기기의 정책을 설정합니다.

EMM 알림을 구독하는 방법을 알아보려면 EMM 알림 설정을 참고하세요.

비공개 테스트용 앱 배포

비공개 테스트를 통해 앱 개발자는 신뢰할 수 있는 사용자로부터 초기 버전의 앱에 관한 의견을 받을 수 있습니다. 개발자는 Google Play Console에서 비공개 테스트를 설정할 수 있습니다. Play EMM API를 사용하면 IT 관리자가 앱의 비공개 버전 (트랙이라고도 함)을 특정 사용자에게 배포할 수 있습니다. 기업 고객은 이 기능을 사용하여 서드 파티 앱뿐만 아니라 사내에서 개발한 비공개 앱도 테스트할 수 있습니다.

사용 가능한 앱

개발자가 앱의 비공개 테스터 목록에 기업을 추가하려면 앱이 다음 기준을 충족해야 합니다.

  • 앱의 프로덕션 버전이 Google Play에 게시됨
  • Play Console에서는 앱의 가격 및 배포 페이지에서 고급 Managed Google Play 기능을 사용 설정할 수 있습니다.
  • 앱의 모든 비공개 버전이 버전 코드 요구사항을 충족합니다.

비공개 테스트에 기업 추가

앱 개발자는 비공개 알파 테스트 또는 Google 그룹스를 사용한 알파 테스트 방법을 사용하는 테스트에 기업을 추가할 수 있습니다. 자세한 내용은 공개, 비공개, 내부 테스트 설정 방법에 관한 가이드를 참고하세요. 개발자는 참여하는 각 기업의 조직 ID (엔터프라이즈 ID라고도 함)를 입력해야 합니다. IT 관리자는 다음 단계에 따라 서드 파티 앱 개발자에게 조직의 ID를 제공할 수 있습니다.

  1. Managed Google Play 스토어에 로그인합니다.
  2. 관리자 설정을 클릭합니다.
  3. 조직 정보 상자에서 조직 ID 문자열을 복사하여 개발자에게 보냅니다.

비공개 앱의 추가 요구사항

비공개 앱의 경우 개발자는 Play Console의 가격 및 배포 페이지에서 참여하는 각 기업의 조직 ID도 추가해야 합니다. 자세한 내용은 비공개 앱 게시를 참고하세요.

사용자에게 비공개 트랙 배포

기업에서 특정 앱의 사용 가능한 트랙 목록을 가져오려면 Products.get를 호출합니다. 응답에 포함된 appTracks[] 목록에는 각 앱에서 사용할 수 있는 트랙이 포함됩니다. appTracks[].trackAlias은 EMM 콘솔에 표시할 수 있는 트랙의 사용자가 읽을 수 있는 이름이며 appTracks[].trackId는 머신에서 읽을 수 있는 트랙 ID입니다.

사용자에게 앱의 비공개 트랙 공개 상태를 부여하려면 Devicepolicy에서 policy.productPolicy[].trackIds[]를 설정합니다. 한 기기에서 사용할 수 있는 트랙이 여러 개라면 사용 가능한 버전 코드 중 버전 코드가 가장 높은 버전이 설치됩니다.

다음과 같은 특정 시나리오에서는 TrackId가 Products.get 호출에서 자동으로 삭제됩니다.

  • 트랙의 APK가 다른 트랙 또는 프로덕션으로 승격됩니다.
  • 프로덕션 버전이 트랙보다 높은 버전으로 업데이트됩니다.
  • 개발자가 트랙을 중지합니다.

유료 앱 라이선스 추적

유료 앱의 경우 Grouplicenses 객체는 기업에서 소유한 라이선스 수와 사용 중인 라이선스 수를 추적합니다. Grouplicenses.get를 호출하여 앱의 라이선스 세부정보를 가져올 수 있습니다.

유료 앱을 기기에 설치하려면 기업에 앱에 사용할 수 있는 라이선스가 있어야 합니다. 라이선스를 사용할 수 있으면 앱이 기기에 설치되고 Entitlements 객체가 생성됩니다. Entitlements 객체는 라이선스를 사용자와 연결하고 앱의 사용 가능한 라이선스 수를 줄입니다. 사용 가능한 라이선스가 없으면 앱 설치에 실패하고 Entitlements 객체가 생성되지 않습니다.

GrouplicensesEntitlements 객체는 무료로 배포되는 애플리케이션에서 사용되지 않습니다.