支持托管配置

一些专为企业设计的应用包含名为“托管配置”的内置设置,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 添加到控制台

生成网络令牌

使用 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 应用限制。如果类型为 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 应用限制中至少有一个软件包组

如果至少设置了 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
]