支持托管配置

一些专为企业设计的应用包含称为“托管配置”的内置设置,IT 管理员可以远程配置这些设置。例如,应用或许可以选择仅在设备连接到 Wi-Fi 时才同步数据。对于所有解决方案集,都要求 IT 管理员能够指定托管配置并将其应用于设备。您可以通过以下两种方式在 EMM 控制台中支持托管配置:

  • 创建您自己的界面,并通过 ApplicationPolicy 中的 managedConfiguration 应用设置。
  • 将托管配置 iframe 添加到您的控制台(具体说明见下文),并通过 ApplicationPolicy 中的 managedConfigurationTemplate 应用设置


托管配置 iframe 是一种嵌入式界面,IT 管理员可使用它保存、修改和删除应用的托管配置设置。例如,您可以在用于打开 iframe 的应用详情或设置页面中显示按钮(或类似界面元素)。

IT 管理员可通过 iframe 执行的操作

Mcm iframe
图 1.适用于 Gmail 的托管配置 iframe 示例。

设置并保存配置文件

iframe 会检索并显示指定应用的托管配置架构。在 iframe 中,IT 管理员可以设置配置并将其另存为配置文件。每当 IT 管理员保存新的配置文件时,iframe 都会返回一个名为 mcmId 的唯一标识符。这样,IT 管理员可以为同一应用创建多个资料。

修改配置文件

iframe 能够显示已保存的配置文件。IT 管理员可以更新个人资料中的设置并保存更改。

删除配置文件

IT 管理员可以从 iframe 中删除配置文件。此功能默认处于停用状态。

将 iframe 添加到控制台

生成 Web 令牌

使用 enterprises.webTokens.create 生成用于识别企业的 Web 令牌,并将 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 采用这种新的取消选择模式时的行为,以及开发者可以在其托管配置中发送哪些内容。

对应用限制使用默认值

如果为 boolchoiceinteger多选字符串类型的应用限制提供了默认值,当管理员保存托管配置而不对该应用限制应用任何更改时,默认值将用作应用限制的值。

例如,对于以下应用限制架构:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "defaultValue": {
        "type": "bool",
        "valueBool": false
    }
}]

发送到设备的应用限制将是:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "value": {
        "type": "bool",
        "valueBool": false
    }
}]

不使用应用限制的默认值

如果没有为 boolchoiceinteger多选字符串类型的应用限制提供默认值,则当管理员保存托管配置而不对该应用限制应用任何更改时,将不包含这些应用限制。

例如,对于以下应用限制架构:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool"
    // defaultValue absent.
}]

发送到设备的应用限制将是:

"restrictions": [
    // Empty
]

在架构中使用捆绑包

本部分适用于软件包应用限制:

在 app bundle 应用限制中包含至少一个具有默认值的儿童应用限制

如果在软件包应用限制中,至少有一项类型为 boolchoiceinteger多选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.
    ]
}]

所有子应用限制(无默认值)

如果在软件包应用限制中,所有类型为 boolchoiceinteger多选字符串的所有子应用限制均未指定默认值,那么当管理员保存托管配置而不对该应用限制应用任何更改时,将不包含软件包应用限制。

例如,对于以下应用限制架构:

"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 应用限制。如果为 boolchoiceinteger多选字符串类型的子应用限制具有默认值,则此选项无关紧要。

例如,对于以下应用限制架构:

"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 内的所有限制/软件包将按以下优先级设置:

  • 管理员选择的值
  • 为该软件包/限制列出的默认值。
  • iframe 中显示的值(如果没有默认值)

bundle_array 应用限制中没有软件包组

如果管理员保存托管配置但未添加软件包组,则不会包含 bundle_array 应用限制。发送到设备的应用限制将是:

"restrictions": [
    // Empty
]