관리 구성 iframe은 IT 관리자가 액세스할 수 있는 삽입 가능한 UI입니다. 앱의 관리 구성 설정을 저장, 수정, 삭제할 수 있습니다. 다음과 같은 작업을 수행할 수 있습니다. 예를 들어 앱의 세부정보에 버튼 (또는 유사한 UI 요소)을 표시하거나 iframe을 여는 설정 페이지입니다.
iframe에서 IT 관리자가 수행할 수 있는 작업
<ph type="x-smartling-placeholder">![MCM iframe](https://developers-dot-devsite-v2-prod.appspot.com/static/android/work/play/emm-api/images/mcm_iframe.png?authuser=1&hl=ko)
구성 프로필 설정 및 저장
iframe은
지정합니다. IT 관리자는 iframe 내에서 구성을 설정하고
이를 구성 프로필로 사용할 수 있습니다 IT 관리자가 새 클라우드를 저장할 때마다
iframe이 mcmId
라는 고유 식별자를 반환합니다.
이렇게 하면 IT 관리자가 동일한 조직에 대해 여러 개의 프로필을 만들 수 있습니다.
있습니다.
구성 프로필 수정
iframe은 저장된 구성 프로필을 표시할 수 있습니다. IT 관리자는 프로필 내 설정을 업데이트하고 변경사항을 저장합니다.
구성 프로필 삭제
IT 관리자는 iframe에서 구성 프로필을 삭제할 수 있습니다. 이 기능은 기본적으로 사용 중지되어 있습니다.
콘솔에 관리 구성 iframe 표시
웹 토큰 생성
Enterprises.createWebToken
를 사용하여 기업을 식별하는 웹 토큰을 생성합니다. 이때
페이지에서 iframe을 렌더링할 때 다른 매개변수와 함께 반환된 토큰을
살펴보겠습니다 다음 예는 Google
Java용 Play EMM API 클라이언트 라이브러리.
public AdministratorWebToken getAdministratorWebToken(
String enterpriseId,
AdministratorWebTokenSpec tokenSpec) throws IOException {
return androidEnterprise
.enterprise()
.createWebToken(enterpriseId, tokenSpec)
.execute();
}
iframe 렌더링
다음은 관리 구성 iframe을 렌더링하는 방법의 예입니다.
<script src="https://apis.google.com/js/api.js"></script>
<div id="container" style="width: 1000px; height: 1000px"></div>
<script>
gapi.load('gapi.iframes', function() {
var options = {
'url': 'https://play.google.com/managed/mcm?token=web_token&packageName=app_package_name',
'where': document.getElementById('container'),
'attributes': { style: 'height:1000px', scrolling: 'yes'}
}
var iframe = gapi.iframes.getContext().openChild(options);
});
</script>
URL 매개변수
아래 표에는 iframe URL에 사용할 수 있는 모든 매개변수가 나와 있습니다.
매개변수 | 필수 | 설명 |
---|---|---|
token |
예 | Enterprises.createWebToken 에서 반환된 토큰입니다. |
packageName |
예 | 앱의 제품 ID입니다. 예를 들어
com.google.android.gm |
mcmId |
아니요 | 관리 구성 프로필의 ID입니다. |
canDelete |
아니요 | TRUE이면 iframe에서 IT 부서를 허용하는 버튼을 사용 설정합니다. 관리자가 관리 구성 프로필을 삭제할 수 있습니다. 만약 FALSE (기본값): 버튼이 사용 중지됩니다. |
locale |
아니요 | 올바른 형식의 BCP 47 language 태그가 포함됩니다. 그렇지 않은 경우 지정된 경우 기본값은 en_US입니다. |
iframe 이벤트
통합의 일부로 다음 이벤트도 처리해야 합니다.
이벤트 | 설명 |
---|---|
onconfigupdated |
사용자가 기존 관리 구성 프로필을 업데이트하거나 새로 만듭니다.
있습니다 이 메서드는 다음을 포함하는 객체를 반환합니다.
{ "mcmId": The ID of the managed configurations profile. "name": The name of the updated or newly created managed configurations profile. } |
onconfigdeleted |
사용자가 기존 관리 구성 프로필을 삭제하는 경우 이 함수는 다음을 반환합니다.
다음 객체를 포함하는 객체:
{ "mcmId": The ID of the managed configurations profile. } |
아래 샘플은 예를 들어 onconfigupdated
를 수신 대기하는 방법을 보여줍니다.
iframe.register('onconfigupdated', function(event) {
console.log(event);
}, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);
앱의 관리 구성 스키마 업데이트
개발자가 앱의 관리 구성 스키마를 업데이트하는 경우 구성 프로필이 자동으로 업데이트됩니다 예를 들어 개발자가 옵션을 삭제하면 해당 옵션이 모든 기존 구성에서 삭제됩니다. 프로필을 만들 수 있습니다 개발자가 옵션을 추가하면 옵션 (개발자가 정의함)이 모든 기존 구성에 추가됩니다. 프로필을 만들 수 있습니다
관리 구성을 사용자에게 적용 기기
사용자에게 관리 구성을 적용하는 방법을 알아보려면 사용하는 경우 관리 구성을 적용합니다.
선택/선택 해제 동작 이해
이제 IT 관리자는 관리 구성 iframe을 사용하여 명시적으로 선택 해제할 수 있습니다. 관리 구성의 앱 제한사항이 필요하지 않은 경우 이 이전 행동에서 달라진 것이며, 관리자가 선택한 내용에 따라 앱으로 전송됩니다
아래 섹션에서는 관리 구성 iframe이 이 새로운 선택 해제 패턴 및 개발자가 kube-APIserver로 전송합니다
앱 제한에 기본값 사용
bool 유형으로 앱이 제한된 경우 choice, 정수, 다중 선택 또는 string 기본값이 제공되는 경우 기본값이 관리자가 관리 구성을 저장하지 않고 저장할 때 앱 제한의 값 해당 앱 제한에 변경사항을 적용합니다.
예를 들어 다음과 같은 앱 제한 스키마가 있습니다.
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
}]
기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
}]
앱 제한에 기본값을 사용하지 않음
bool 유형으로 앱이 제한된 경우 choice, 정수, 다중 선택 또는 string 기본값이 제공되지 않으면 앱 제한이 적용되지 않습니다. 관리자가 변경사항을 적용하지 않고 관리 구성을 저장할 때 포함됨 '제한'을 설정할 수 있습니다
예를 들어 다음과 같은 앱 제한 스키마가 있습니다.
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool"
// defaultValue absent.
}]
기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [
// Empty
]
스키마 내에서 번들 사용
이 섹션은 번들에 적용됩니다. 앱 제한:
번들 앱 제한에 기본값이 포함된 하위 앱 제한이 하나 이상 있음
번들 내부에 있는 경우 app 제한: bool 유형의 하위 앱 제한 중 하나 이상, 선택, 정수, 다중 선택 또는 문자열 기본값이 제공되는 경우 기본값이 앱 제한 값과 기본값이 없는 값은 제외됩니다. 관리자가 변경사항을 적용하지 않고 관리 구성을 저장할 때 앱 제한을 탭합니다.
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
},
{
"key": "bool_key_2",
"restrictionType": "bool"
// defaultValue absent.
}
]
}]
기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
},
// The bool_key_2 child app restriction is not included.
]
}]
기본값이 없는 모든 자녀 앱 제한사항
번들 내부에 있는 경우 앱 제한, bool 유형의 모든 하위 앱 제한 선택, 정수, 다중 선택 또는 문자열 기본값이 제공되지 않은 번들인 경우 관리자가 관리 구성을 저장할 때 앱 제한은 포함되지 않습니다. 해당 앱 제한에 변경사항을 적용하지 않고
예를 들어 다음과 같은 앱 제한 스키마가 있습니다.
"restrictions": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key_1",
"restrictionType": "bool",
// defaultValue absent.
},
{
"key": "bool_key_2",
"restrictionType": "bool"
// defaultValue absent.
}
]
}]
기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [
// Empty
]
스키마 내에서 bundle_array 사용
이 섹션은 bundle_array에 적용됩니다. 앱 제한사항을 탭합니다. 하위 앱이 bool 유형으로 제한되는 경우 관련이 없습니다. choice, 정수, 다중 선택 또는 string 기본값이 있습니다.
예를 들어 다음과 같은 앱 제한 스키마가 있습니다.
"restrictions": [{
"key": "bundle_array_key",
"restrictionType": "bundleArray",
"nestedRestriction": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": true
}
}]
}]
}]
bundle_array 앱 제한에 번들 그룹이 1개 이상 있음
번들이 하나 이상 있는 경우 그룹이 설정되면 bundle_array 관리자가 관리 구성을 저장하면 앱 제한이 포함됩니다.
기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [{
"key": "bundle_array_key",
"restrictionType": "bundleArray",
"nestedRestriction": [{
"key": "bundle_key",
"restrictionType": "bundle",
"nestedRestriction": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": true
}
}]
}]
}]
bundle_array 앱 제한에 번들 그룹이 없습니다.
bundle_array 관리자가 관리 구성을 저장할 때 앱 제한은 포함되지 않습니다. 번들을 추가하지 않고 그룹 기기에 전송되는 앱 제한은 다음과 같습니다.
"restrictions": [
// Empty
]