Поддержка управляемых конфигураций, Поддержка управляемых конфигураций

Некоторые приложения, разработанные для предприятий, включают встроенные параметры, называемые управляемыми конфигурациями , которые ИТ-администраторы могут настраивать удаленно. Например, приложение может иметь возможность синхронизировать данные только тогда, когда устройство подключено к Wi-Fi. Предоставление ИТ-администраторам возможности задавать управляемые конфигурации и применять их к устройствам является обязательным требованием для всех наборов решений . Существует два способа поддержки управляемых конфигураций в консоли EMM:

  • Создайте собственный пользовательский интерфейс и примените настройки с помощью managedConfiguration в ApplicationPolicy .
  • Добавьте iframe управляемых конфигураций в консоль (инструкции подробно описаны ниже) и примените настройки с помощью managedConfigurationTemplate в ApplicationPolicy.


iframe управляемых конфигураций — это встраиваемый пользовательский интерфейс, который позволяет ИТ-администраторам сохранять, редактировать и удалять параметры управляемой конфигурации приложения. Например, вы можете отобразить кнопку (или аналогичный элемент пользовательского интерфейса) на странице сведений или настроек приложения, которая открывает iframe.

Действия, доступные ИТ-администраторам из iframe

mcm iframe
Рисунок 1. Пример управляемой конфигурации iframe для Gmail.

Установите и сохраните профили конфигурации

iframe извлекает и отображает схему управляемых конфигураций для указанного приложения. В iframe ИТ-администратор может задавать конфигурации и сохранять их как профиль конфигурации. Каждый раз, когда ИТ-администратор сохраняет новый профиль конфигурации, iframe возвращает уникальный идентификатор mcmId . Это позволяет ИТ-администраторам создавать несколько профилей для одного и того же приложения.

Редактировать профили конфигурации

iframe способен отображать сохраненные профили конфигурации. ИТ-администраторы могут обновлять настройки в профиле и сохранять изменения.

Удаление профилей конфигурации

ИТ-администраторы могут удалять профили конфигурации из 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>

параметры URL

В таблице ниже перечислены все доступные параметры для URL-адреса iframe.

Параметр Необходимый Описание
token Да Токен, возвращенный из Enterprises.createWebToken .
packageName Да Идентификатор продукта приложения. Например, com.google.android.gm .
mcmId Нет Идентификатор профиля управляемых конфигураций.
canDelete Нет Если TRUE , в iframe активируется кнопка, позволяющая ИТ-администраторам удалить профиль управляемых конфигураций. Если 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 . Чтобы применить профиль конфигурации к политике, укажите mcmId в managedConfigurationTemplate .


Понимание поведения выбора/отмены выбора

iframe управляемых конфигураций теперь позволяет ИТ-администраторам явно отменять ограничения приложений управляемой конфигурации, когда они им не нужны. Это изменение по сравнению с предыдущим поведением, которое может повлиять на то, какие ограничения будут отправлены в ваше приложение в зависимости от выбора администратора.

В разделе ниже описывается, как iframe управляемых конфигураций ведет себя с этим новым шаблоном отмены выбора и что разработчики могут ожидать отправлять как часть своей управляемой конфигурации.

Использование значения по умолчанию для ограничения приложения

Если ограничениям приложения с типом bool , choice , целым числом , множественным выбором или строкой присвоено значение по умолчанию, значение по умолчанию будет применяться в качестве значения ограничения приложения, когда администраторы сохранят управляемую конфигурацию, не применяя никаких изменений к этому приложению. ограничение.

Например, со следующей схемой ограничения приложений:

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

Ограничения приложения, отправленные на устройство, будут следующими:

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

Без использования значений по умолчанию для ограничений приложений.

Если ограничениям приложений с типом bool , choice , целым числом , множественным выбором или строкой не присвоено значение по умолчанию, эти ограничения приложений не будут включены, когда администраторы сохранят управляемую конфигурацию, не применяя никаких изменений к этому ограничению приложения.

Например, со следующей схемой ограничения приложений:

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

Ограничения приложения, отправленные на устройство, будут следующими:

"restrictions": [
    // Empty
]

Использование пакетов в вашей схеме

Этот раздел относится к ограничениям пакета приложений:

Наличие хотя бы одного ограничения дочернего приложения со значением по умолчанию в ограничении приложения пакета.

Если в ограничении приложения пакета хотя бы одно из ограничений дочерних приложений с типом bool , choice , целое число , множественный выбор или строка предоставлено со значением по умолчанию, значение по умолчанию будет применено как значение ограничения приложения, а ограничения без него Значения по умолчанию будут исключены, когда администраторы сохранят управляемую конфигурацию, не применяя никаких изменений к этому ограничению приложения.

"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 , целое число , множественный выбор или строка не присвоено значение по умолчанию, ограничение приложения пакета не будет включено, когда администраторы сохранят управляемую конфигурацию без применения каких-либо изменения в этом ограничении приложения.

Например, со следующей схемой ограничения приложений:

"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 , целое число , множественный выбор или строка имеют значения по умолчанию.

Например, со следующей схемой ограничения приложений:

"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 будут установлены со следующим приоритетом:

  • значение, выбранное администратором
  • значение по умолчанию, указанное для этого пакета/ограничения.
  • значение, отображаемое в iFrame, если нет значения по умолчанию

В ограничении приложения Bundle_array нет групп пакетов.

Ограничение приложения Bundle_array не будет включено, если администраторы сохранят управляемую конфигурацию без добавления группы пакетов . Ограничения приложения, отправленные на устройство, будут следующими:

"restrictions": [
    // Empty
]