托管配置 iframe 是一种嵌入式界面,IT 管理员可使用它保存、修改和删除应用的托管配置设置。例如,您可以在用于打开 iframe 的应用详情或设置页面中显示按钮(或类似界面元素)。
IT 管理员可通过 iframe 执行的操作
![Mcm iframe](https://developers.google.cn/static/android/work/play/emm-api/images/mcm_iframe.png?authuser=6&hl=lt)
设置并保存配置文件
iframe 会检索并显示指定应用的托管配置架构。在 iframe 中,IT 管理员可以设置配置并将其另存为配置文件。每当 IT 管理员保存新的配置文件时,iframe 都会返回一个名为 mcmId
的唯一标识符。这样,IT 管理员可以为同一应用创建多个资料。
修改配置文件
iframe 能够显示已保存的配置文件。IT 管理员可以更新个人资料中的设置并保存更改。
删除配置文件
IT 管理员可以从 iframe 中删除配置文件。此功能默认处于停用状态。
在控制台中显示托管配置 iframe
生成 Web 令牌
使用 Enterprises.createWebToken
生成用于识别企业的网络令牌。在控制台中呈现 iframe 时,您必须添加返回的令牌以及其他参数。以下示例展示了如何使用 Java 版 Google 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>
网址参数
下表列出了 iframe 网址的所有可用参数。
参数 | 必需 | 说明 |
---|---|---|
token |
是 | 从 Enterprises.createWebToken 返回的令牌。 |
packageName |
是 | 应用的商品 ID,例如 com.google.android.gm 。 |
mcmId |
否 | 托管配置文件的 ID。 |
canDelete |
否 | 如果为 TRUE,则在 iframe 中启用一个按钮,以便 IT 管理员能够删除托管配置。如果为 FALSE(默认值),则该按钮处于停用状态。 |
locale |
否 | 格式正确的 BCP 47 语言代码,用于对 iframe 中的内容进行本地化。如果未指定,则默认值为 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);
应用的托管配置架构更新
如果开发者更新应用的托管配置架构,则保存的配置文件会自动更新。例如,如果开发者移除了某个选项,该选项将从应用的所有现有配置文件中移除。如果开发者添加选项,该选项的默认值(由开发者定义)将添加到应用的所有现有配置文件。
将托管配置应用于用户的设备
如需了解如何将托管配置应用于用户的设备,请参阅应用托管配置。
了解选择/取消选择行为
托管配置 iframe 现在允许 IT 管理员在不需要时明确取消选择托管配置的应用限制。这与之前的行为不同,并且可能会影响系统根据管理员的选择向应用发送哪些限制。
以下部分概述了托管配置 iframe 采用这种新的取消选择模式时的行为,以及开发者可以在其托管配置中发送哪些内容。
对应用限制使用默认值
如果为 bool、choice、integer、多选或字符串类型的应用限制提供了默认值,当管理员保存托管配置而不对该应用限制应用任何更改时,默认值将用作应用限制的值。
例如,对于以下应用限制架构:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
}]
发送到设备的应用限制将是:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
}]
不使用应用限制的默认值
如果没有为 bool、choice、integer、多选或字符串类型的应用限制提供默认值,则当管理员保存托管配置而不对该应用限制应用任何更改时,将不包含这些应用限制。
例如,对于以下应用限制架构:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool"
// defaultValue absent.
}]
发送到设备的应用限制将是:
"restrictions": [
// Empty
]
在架构中使用捆绑包
本部分适用于软件包应用限制:
在 app bundle 应用限制中包含至少一个具有默认值的儿童应用限制
如果在软件包应用限制中,至少有一项类型为 bool、choice、integer、多选或 string 的子应用限制带有默认值,则该默认值将用作应用限制的值,当管理员保存托管配置而不对该应用进行任何更改时,将排除没有默认值的限制。
"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、choice、integer、多选或字符串的所有子应用限制均未指定默认值,则当管理员保存托管配置而不对该应用限制应用任何更改时,系统不会包含软件包应用限制。
例如,对于以下应用限制架构:
"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、integer、多选或字符串类型的子应用限制具有默认值,则此选项无关紧要。
例如,对于以下应用限制架构:
"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 应用限制中至少有一个软件包组
如果设置了至少一个 bundle 组,当管理员保存托管配置时,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
]