Cómo admitir configuraciones administradas

Algunas apps diseñadas para empresas incluyen opciones de configuración integradas llamadas configuraciones administradas que los administradores de TI pueden establecer de forma remota. Por ejemplo, una app podría tener la opción de sincronizar datos solo cuando un dispositivo está conectado a Wi-Fi. Proporcionar a los administradores de TI la capacidad de especificar configuraciones administradas y aplicarlas a dispositivos es un requisito para todos los conjuntos de soluciones. Existen dos formas de admitir las configuraciones administradas en tu consola de EMM:

  • Crea tu propia IU y aplica la configuración a través de managedConfiguration en ApplicationPolicy.
  • Agrega el iframe de configuraciones administradas a tu consola (las instrucciones se detallan a continuación) y aplica la configuración mediante managedConfigurationTemplate en ApplicationPolicy.


El iframe de configuraciones administradas es una IU incorporable que les permite a los administradores de TI guardar, editar y borrar los parámetros de configuración administrados de una app. Por ejemplo, puedes mostrar un botón (o un elemento de la IU similar) en la página de detalles o de configuración de una app que abra el iframe.

Acciones disponibles para los administradores de TI desde el iframe

iframe de mcm
Figura 1: Ejemplo de iframe de configuraciones administradas para Gmail.

Establece y guarda perfiles de configuración

El iframe recupera y muestra el esquema de configuraciones administradas para una app específica. Dentro del iframe, un administrador de TI puede establecer los parámetros de configuración y guardarlos como un perfil de configuración. Cada vez que un administrador de TI guarda un perfil de configuración nuevo, el iframe muestra un identificador único llamado mcmId. Esto permite que los administradores de TI creen varios perfiles para la misma app.

Editar perfiles de configuración

El iframe puede mostrar perfiles de configuración guardados. Los administradores de TI pueden actualizar la configuración de un perfil y guardar sus cambios.

Borrar perfiles de configuración

Los administradores de TI pueden borrar perfiles de configuración del iframe. Esta función está inhabilitada de forma predeterminada.

Agrega el iframe a tu consola

Genera un token web

Usa enterprises.webTokens.create para generar un token web que identifique a la empresa y establece iframeFeature en MANAGED_CONFIGURATIONS. Debes incluir el token que se muestra, junto con otros parámetros, cuando renderices el iframe en tu consola.

Procesa el iframe

A continuación, se muestra un ejemplo de cómo renderizar el iframe de las configuraciones administradas:

<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>

Parámetros de URL

En la siguiente tabla se enumeran todos los parámetros disponibles para la URL del iframe.

ParámetroObligatorioDescripción
token El token que muestra Enterprises.createWebToken.
packageName El ID del producto de la app. Por ejemplo, com.google.android.gm
mcmId No El ID de un perfil de configuraciones administradas.
canDelete No Si el valor es TRUE, habilita un botón en el iframe que permite a los administradores de TI borrar el perfil de configuraciones administradas. Si es FALSE (valor predeterminado), el botón está inhabilitado.
locale No Una etiqueta de idioma BCP 47 bien formada que se usa para localizar el contenido en el iframe. Si no se especifica, el valor predeterminado es en_US.

Eventos de iframe

También debes controlar los siguientes eventos como parte de tu integración.

EventoDescripción
onconfigupdated El usuario actualiza un perfil de configuraciones administradas existente o crea uno nuevo. Se mostrará un objeto que contiene lo siguiente:
{
  "mcmId": The ID of the managed configurations profile.
  "name": The name of the updated or newly created managed configurations profile.
}
onconfigdeleted El usuario borra un perfil de configuración administrada existente. Se mostrará un objeto que contiene lo siguiente:
{
  "mcmId": The ID of the managed configurations profile.
}

En el siguiente ejemplo, se muestra cómo escuchar onconfigupdated, a modo de ejemplo:

iframe.register('onconfigupdated', function(event) {
  console.log(event);
}, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);

Actualizaciones al esquema de opciones de configuración administradas de una app

Si el desarrollador actualiza el esquema de configuración administrada de una app, los perfiles de configuración guardados se actualizan automáticamente. Por ejemplo, si el desarrollador quita una opción, esta se quitará de todos los perfiles de configuración existentes de la app. Si el desarrollador agrega una opción, se agregará el valor predeterminado de la opción (definido por el desarrollador) a todos los perfiles de configuración existentes de la app.

Aplicar perfiles de configuración a la política

Cada perfil de configuración se guarda como un mcmId único. Para aplicar un perfil de configuración a una política, especifica mcmId en managedConfigurationTemplate.


Información sobre el comportamiento de seleccionar y anular la selección

El iframe de configuraciones administradas ahora permite a los administradores de TI anular de forma explícita las restricciones de apps de una configuración administrada cuando no las necesitan. Este cambio con respecto al comportamiento anterior y puede afectar las restricciones que se envían a tu app según la selección del administrador.

En la siguiente sección, se describe el comportamiento del iframe de las configuraciones administradas con este nuevo patrón para anular la selección y lo que los desarrolladores pueden esperar que se envíen como parte de su configuración administrada.

Uso del valor predeterminado para una restricción de apps

Si las restricciones de apps con el tipo bool, choice, integer, multi-select o string se proporcionan con un valor predeterminado, este se aplicará como el de la restricción de la app cuando los administradores guarden la configuración administrada sin aplicar ningún cambio en esa restricción de app.

Por ejemplo, con el siguiente esquema de restricciones de apps:

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

Las restricciones de apps que se envían al dispositivo serán las siguientes:

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

Sin usar valores predeterminados para las restricciones de apps

Si las restricciones de la app de tipo bool, choice, integer, multi-select o string no se proporcionan con un valor predeterminado, estas restricciones de apps no se incluirán cuando los administradores guarden la configuración administrada sin aplicar ningún cambio en esa restricción de app.

Por ejemplo, con el siguiente esquema de restricciones de apps:

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

Las restricciones de apps que se envían al dispositivo serán las siguientes:

"restrictions": [
    // Empty
]

Usa paquetes en tu esquema

Esta sección se aplica a las restricciones de apps de paquetes:

Tener al menos una restricción de app secundaria con un valor predeterminado en una restricción de app de paquete

Si dentro de la restricción de la app de paquete se proporcionan al menos una de las restricciones de apps secundarias con el tipo bool, choice, integer, multi-select o string se proporcionan con un valor predeterminado, este se aplicará como el valor de la restricción de la app y se excluirán los que no tengan valores predeterminados cuando los administradores guarden la configuración administrada sin aplicar cambios en esa app.

"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.
        }
    ]
}]

Las restricciones de apps que se envían al dispositivo serán las siguientes:

"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.
    ]
}]

Todas las restricciones de apps secundarias sin valores predeterminados

Si dentro de la restricción de la app de paquete no se proporcionan todas las restricciones de la app secundaria con el tipo bool, choice, integer, multi-select o string no se proporcionan con un valor predeterminado, la restricción de app de bundle no se incluirá cuando los administradores guarden la configuración administrada sin aplicar cambios en esa restricción de app.

Por ejemplo, con el siguiente esquema de restricciones de apps:

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            // defaultValue absent.
        },
        {
            "key": "bool_key_2",
            "restrictionType": "bool"
            // defaultValue absent.
        }
    ]
}]

Las restricciones de apps que se envían al dispositivo serán las siguientes:

"restrictions": [
    // Empty
]

Usa bundle_array en tu esquema

Esta sección se aplica a las restricciones de la app de bundle_array. No es relevante si las restricciones de la app secundaria con el tipo bool, choice, integer, multi-select o string tienen valores predeterminados.

Por ejemplo, con el siguiente esquema de restricciones de apps:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "defaultValue": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

Tener al menos un grupo de paquete en la restricción de apps bundle_array

Si se configura al menos un grupo de bundle, se incluirá la restricción de apps de bundle_array cuando los administradores guarden la configuración administrada.

Las restricciones de apps que se envían al dispositivo serán las siguientes:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "value": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

Si se guarda una restricción o un grupo de paquetes, todas las restricciones o los paquetes de todo el bundle_array se configurarán con la siguiente prioridad:

  • el valor elegido por el administrador
  • el valor predeterminado que aparece para ese paquete o restricción.
  • el valor que se muestra en el iframe si no hay un valor predeterminado

No hay grupos de paquetes en la restricción de apps de bundle_array

La restricción de la app bundle_array no se incluirá cuando los administradores guarden la configuración administrada sin agregar un grupo de bundle. Las restricciones de apps que se envían al dispositivo serán las siguientes:

"restrictions": [
    // Empty
]