托管配置 iframe

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

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

<ph type="x-smartling-placeholder">
</ph> MCC iframe <ph type="x-smartling-placeholder">
</ph> 图 1.适用于 Gmail 的受管配置 iframe 示例。

设置并保存配置文件

iframe 会检索并显示 指定应用。IT 管理员可以在 iframe 中设置配置并保存 用作配置文件每当 IT 管理员保存新内容时 配置文件时,iframe 会返回一个名为 mcmId 的唯一标识符。 这样,IT 管理员可以为同一项 应用。

修改配置文件

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

删除配置文件

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

在控制台中显示受管配置 iframe

生成网络令牌

使用 Enterprises.createWebToken 生成用于标识企业的网络令牌。您必须在代码中添加 以及其他参数 控制台。以下示例展示了如何使用 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>

网址参数

下表列出了 iframe 网址的所有可用参数。

参数必填说明
token Enterprises.createWebToken 返回的令牌。
packageName 应用的商品 ID。例如: com.google.android.gm
mcmId 受管配置文件的 ID。
canDelete 如果为 TRUE,则会在 iframe 中启用允许 IT 权限的按钮 管理员删除受管配置资料。如果 FALSE(默认值),按钮处于停用状态。
locale 格式正确 BCP 47 language 标记,用于将 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选择integer多选字符串 提供了默认值,那么系统会将该默认值作为 管理员保存托管配置时应用限制的值, 应用限制的所有更改。

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

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

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

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

不针对应用限制使用默认值

如果应用限制类型为 bool选择integer多选字符串 未提供默认值,那么这些应用限制将不会被 当管理员保存受管配置而未应用任何更改时,会包含在内 应用限制

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

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

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

"restrictions": [
    // Empty
]

在架构中使用内容包

本部分适用于套装 应用限制:

在 app bundle 应用限制中,至少有一个子级应用限制具有默认值

如果软件包中包含 应用限制,至少要有一个类型为 bool 的子应用限制; 选择integer多选字符串 提供了默认值,那么系统会将该默认值作为 应用限制的值,系统会排除没有默认值的应用 管理员保存受管配置而不对其应用任何更改时触发 应用限制。

"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 的所有子级应用限制, 选择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_arraybundle_array 应用限制。 如果子应用限制类型为 bool选择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_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
]