一些专为企业设计的应用包含名为“托管配置”的内置设置,IT 管理员可以远程配置这些设置。例如,应用或许可以选择仅在设备连接到 Wi-Fi 时才同步数据。对于所有解决方案集,都要求 IT 管理员能够指定托管配置并将其应用于设备。您可以通过以下两种方式在 EMM 控制台中支持受管理的配置:
- 创建您自己的界面,并通过 ApplicationPolicy 中的
managedConfiguration
应用设置。 - 将托管配置 iframe 添加到您的控制台(具体说明如下),并通过 ApplicationPolicy 中的
managedConfigurationTemplate
应用设置
托管配置 iframe 是一种嵌入式界面,IT 管理员可通过它保存、修改和删除应用的托管配置设置。例如,您可以在应用的详细信息或用于打开 iframe 的设置页面中显示按钮(或类似界面元素)。
IT 管理员可通过 iframe 执行的操作
![MCM iframe](https://developers.google.cn/static/android/work/play/emm-api/images/mcm_iframe.png?hl=sl)
设置并保存配置文件
iframe 会检索并显示指定应用的托管配置架构。在 iframe 中,IT 管理员可以设置配置并将其另存为配置文件。每当 IT 管理员保存新的配置文件时,iframe 都会返回一个名为 mcmId
的唯一标识符。这样,IT 管理员可以为同一应用创建多个资料。
修改配置文件
iframe 能够显示已保存的配置文件。IT 管理员可以更新个人资料中的设置并保存更改。
删除配置文件
IT 管理员可以从 iframe 中删除配置文件。此功能默认处于停用状态。
将 iframe 添加到控制台
生成网络令牌
使用 enterprises.webTokens.create
生成用于标识企业的网络令牌,并将 iframeFeature
设置为 MANAGED_CONFIGURATIONS
。在控制台中呈现 iframe 时,您必须添加返回的令牌以及其他参数。
呈现 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);
应用的托管配置架构更新
如果开发者更新应用的代管式配置架构,则已保存的配置配置文件会自动更新。例如,如果开发者移除了某个选项,该选项将从应用的所有现有配置中移除。如果开发者添加一个选项,该选项的默认值(由开发者定义)将被添加到应用的所有现有配置配置文件中。
将配置文件应用于政策
每个配置文件都会另存为唯一的 mcmId
。如需将配置文件应用于政策,请在 managedConfigurationTemplate
中指定 mcmId
。
了解选择/取消选择行为
托管配置 iframe 现在允许 IT 管理员在不需要时明确取消选择托管配置的应用限制。这是与之前行为不同的变更,可能会影响系统根据管理员的选择向您的应用发送哪些限制。
以下部分概述了托管配置 iframe 在采用这种新的取消选择模式时的行为方式,以及开发者可以在托管配置中发送哪些内容。
使用应用限制的默认值
如果为 bool、选择、整数、多选或字符串类型的应用限制提供了默认值,当管理员保存托管配置而不对该应用限制应用任何更改时,默认值将作为应用限制的值。
例如,使用以下应用限制架构:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"defaultValue": {
"type": "bool",
"valueBool": false
}
}]
发送到设备的应用限制将如下所示:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool",
"value": {
"type": "bool",
"valueBool": false
}
}]
不使用应用限制默认值
如果没有为 bool、选择、整数、多选或字符串类型的应用限制提供默认值,当管理员保存托管配置,但未对该应用限制应用任何更改时,将不包含这些应用限制。
例如,使用以下应用限制架构:
"restrictions": [{
"key": "bool_key",
"restrictionType": "bool"
// defaultValue absent.
}]
发送到设备的应用限制将如下所示:
"restrictions": [
// Empty
]
在架构中使用软件包
本部分适用于软件包应用限制:
软件包应用限制中至少有一项具有默认值的儿童应用限制
如果在软件包应用限制中,至少有一项类型为 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、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 应用限制中至少有一个软件包组
如果至少设置了 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
中的所有限制/软件包将按以下优先级设置:
- 管理员选择的值
- 为该软件包/限制列出的默认值。
- iframe 中显示的值(如果没有默认值)
bundle_array 应用限制中没有软件包组
如果管理员保存托管配置但未添加软件包组,则 bundle_array 应用限制不包括在内。发送到设备的应用限制将如下所示:
"restrictions": [
// Empty
]