Guía de integración de EMM

Esta guía ayuda a los proveedores de administración de movilidad empresarial (EMM) a integrar la inscripción automática en su consola. Continúa leyendo para obtener más información sobre la inscripción y ver consejos de prácticas recomendadas para ayudar a que tu DPC (controlador de política de dispositivo) aprovisione los dispositivos. Si tienes un DPC, conocerás prácticas recomendadas para aprovisionar dispositivos y recibirás consejos con el desarrollo y las pruebas.

Funciones para administradores de TI

Usa la API del cliente para ayudar a los administradores de TI a configurar la inscripción automática directamente desde tu consola. Estas son algunas de las tareas que un administrador de TI podría realizar en la consola:

  • Crear, editar y borrar configuraciones de inscripción automática según tu políticas para dispositivos móviles.
  • Establece una configuración predeterminada para que tu DPC aprovisione los dispositivos futuros compras de organizaciones.
  • Aplicar configuraciones individuales a dispositivos o quitar dispositivos de la inscripción automática la inscripción.

Para obtener más información sobre la inscripción automática, lee el descripción general.

Requisitos previos

Antes de agregar la inscripción automática a tu consola de EMM, confirma que tu solución admite lo siguiente:

  • Tu solución de EMM debe aprovisionar un dispositivo Android 8.0 (o una versión posterior) propiedad de la empresa (Pixel 7.1 o una versión posterior). dispositivo en modo completamente administrado. Los dispositivos empresariales con Android 10 o versiones posteriores aprovisionados como completamente administrado o con un perfil de trabajo
  • Como la inscripción automática descarga e instala automáticamente un DPC, tu El DPC debe estar disponible en Google Play. Mantenemos una lista de DPC compatibles que los administradores de TI pueden configurar con la API del cliente o el portal. Enviar un solicitud de modificación de producto a través de la comunidad de proveedores de EMM para agregar tu DPC a la lista.
  • Tus clientes necesitan una cuenta de inscripción automática para llamar a la API del cliente. Un socio revendedor configura la cuenta para la organización de un administrador de TI cuando organización compra sus dispositivos.
  • El dispositivo debe ser compatible con los Servicios de Google para dispositivos móviles (GMS). y los Servicios de Google Play deben estar habilitados en todo momento para la inscripción automática funcionen correctamente.

Llama a la API

Los usuarios de tu consola (con sus Cuentas de Google) autorizan tus solicitudes a la API para la API del cliente. Este flujo es diferente de la autorización que realizas para otras APIs de EMM. Lee Autorización para obtener información sobre cómo hacer esto en tu app.

Cómo administrar las Condiciones del Servicio

Tus usuarios deben aceptar las Condiciones del Servicio más recientes antes del llamando a la API. Si la llamada a la API muestra un código de estado HTTP 403 Forbidden y El cuerpo de la respuesta contiene un TosError, se le solicita al usuario que acepte deben acceder al portal de inscripción automática. El siguiente ejemplo muestra una de las maneras de hacerlo:

Java

// Authorize this method call as a user that hasn't yet accepted the ToS.
final String googleApiFormatHttpHeader = "X-GOOG-API-FORMAT-VERSION";
final String googleApiFormatVersion = "2";
final String tosErrorType =
      "type.googleapis.com/google.android.device.provisioning.v1.TosError";

try {
  // Send an API request to list all the DPCs available including the HTTP header
  // X-GOOG-API-FORMAT-VERSION with the value 2. Import the  exception:
  // from googleapiclient.errors import HttpError
  AndroidProvisioningPartner.Customers.Dpcs.List request =
        service.customers().dpcs().list(customerAccount);
  request.getRequestHeaders().put(googleApiFormatHttpHeader, googleApiFormatVersion);
  CustomerListDpcsResponse response = request.execute();
  return response.getDpcs();

} catch (GoogleJsonResponseException e) {
  // Get the error details. In your app, check details exists first.
  ArrayList<Map> details = (ArrayList<Map>) e.getDetails().get("details");
  for (Map detail : details) {
    if (detail.get("@type").equals(tosErrorType)
          && (boolean) detail.get("latestTosAccepted") != true) {
      // Ask the user to accept the ToS. If they agree, open the portal in a browser.
      // ...
    }
  }
  return null;
}

.NET

// Authorize this method call as a user that hasn't yet accepted the ToS.
try
{
    var request = service.Customers.Dpcs.List(customerAccount);
    CustomerListDpcsResponse response = request.Execute();
    return response.Dpcs;
}
catch (GoogleApiException e)
{
    foreach (SingleError error in e.Error?.Errors)
    {
        if (error.Message.StartsWith("The user must agree the terms of service"))
        {
            // Ask the user to accept the ToS. If they agree, open the portal in a browser.
            // ...
        }
    }
}

Python

# Authorize this method call as a user that hasn't yet accepted the ToS.
tos_error_type = ('type.googleapis.com/'
                  'google.android.device.provisioning.v1.TosError')
portal_url = 'https://partner.android.com/zerotouch'

# Send an API request to list all the DPCs available including the HTTP
# header X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception:
# from googleapiclient.errors import HttpError
try:
  request = service.customers().dpcs().list(parent=customer_account)
  request.headers['X-GOOG-API-FORMAT-VERSION'] = '2'
  response = request.execute()
  return response['dpcs']

except HttpError as err:
  # Parse the JSON content of the error. In your app, check ToS exists first.
  error = json.loads(err.content)
  tos_error = error['error']['details'][0]

  # Ask the user to accept the ToS (not shown here). If they agree, then open
  # the portal in a browser.
  if (tos_error['@type'] == tos_error_type
      and tos_error['latestTosAccepted'] is not True):
    if raw_input('Accept the ToS in the zero-touch portal? y|n ') == 'y':
      webbrowser.open(portal_url)

Si tu cliente de la API de Google admite errores detallados (Java, Python o HTTP) solicitudes), incluye el encabezado HTTP X-GOOG-API-FORMAT-VERSION con el valor 2 en tus solicitudes. Si el cliente no admite errores detallados (.NET y otros), coinciden con el mensaje de error.

Cuando actualicemos las Condiciones del Servicio en el futuro, si sigues este enfoque, tu app Le indica al usuario que vuelva a aceptar las nuevas Condiciones del Servicio.

Los administradores de TI usan el portal de inscripción automática para administrar los usuarios de sus no puede ofrecerlo a través de la API del cliente. Los administradores de TI también pueden administrar dispositivos y configuraciones con el portal. Si necesitas vincular el desde tu consola o en tu documentación, usa esta URL:

https://partner.android.com/zerotouch

Tal vez quieras informarles a los administradores de TI que deben acceder con su Cuenta de Google.

Inscripción del dispositivo

La inscripción automática es un mecanismo para inscribir dispositivos y es similar a NFC. o a través de un código QR. Tu consola debe ser compatible con dispositivos administrados y tu DPC debe ejecutarse en un modo de dispositivo completamente administrado.

La inscripción automática está disponible en dispositivos compatibles que ejecutan Android 8.0 o más adelante. Los administradores de TI deben comprar los dispositivos compatibles a un socio revendedor. Tu consola puede rastrear cuáles de los dispositivos del administrador de TI están disponibles para la inscripción automática llamando a customers.devices.list.

A continuación, se incluye un esquema de cómo funciona la inscripción:

  1. Un dispositivo se registra con un servidor de Google en el primer inicio (o después de un proceso restablecer) para la inscripción automática.
  2. Si el administrador de TI aplicó una configuración al dispositivo, la inscripción automática de registro ejecuta el asistente de configuración de Android del dispositivo completamente administrado y personaliza la pantallas con metadatos de la configuración.
  3. La inscripción automática descarga e instala tu DPC de Google Play.
  4. Tu DPC recibe el el intent ACTION_PROVISION_MANAGED_DEVICE y aprovisiona el dispositivo.

Si no hay conexión a Internet, la verificación se realiza cuando una se vuelve disponibles. Para obtener más información sobre el aprovisionamiento de dispositivos con inscripción automática, consulta Aprovisionamiento a continuación.

Configuración predeterminada.

La inscripción automática es más útil para los administradores de TI cuando establecen una configuración predeterminada. que se aplique a los dispositivos nuevos que compre su organización. Configuración de promoción una configuración predeterminada de tu consola si no hay una. Puedes consultar valor de customers.configurations.isDefault a averiguar si una organización estableció una configuración predeterminada.

En el siguiente ejemplo, se muestra cómo hacer que una configuración existente sea Predeterminado:

Java

// Send minimal data with the request. Just the 2 required fields.
// targetConfiguration is an existing configuration that we want to make the default.
Configuration configuration = new Configuration();
configuration.setIsDefault(true);
configuration.setConfigurationId(targetConfiguration.getConfigurationId());

// Call the API, including the FieldMask to avoid setting other fields to null.
AndroidProvisioningPartner.Customers.Configurations.Patch request = service
      .customers()
      .configurations()
      .patch(targetConfiguration.getName(), configuration);
request.setUpdateMask("isDefault");
Configuration results = request.execute();

.NET

// Send minimal data with the request. Just the 2 required fields.
// targetConfiguration is an existing configuration that we want to make the default.
Configuration configuration = new Configuration
{
    IsDefault = true,
    ConfigurationId = targetConfiguration.ConfigurationId,
};

// Call the API, including the FieldMask to avoid setting other fields to null.
var request = service.Customers.Configurations.Patch(configuration,
                                                     targetConfiguration.Name);
request.UpdateMask = "IsDefault";
Configuration results = request.Execute();

Python

# Send minimal data with the request. Just the 2 required fields.
# target_configuration is an existing configuration we'll make the default.
configuration = {
    'isDefault': True,
    'configurationId': target_configuration['configurationId']}

# Call the API, including the FieldMask to avoid setting other fields to null.
response = service.customers().configurations().patch(
    name=target_configuration['name'],
    body=configuration, updateMask='isDefault').execute()

Cómo hacer referencia al DPC

Recomendamos usar el nombre de recurso de la API customers.dpcs.name para identificar tu DPC y usarlo en las configuraciones. El nombre del recurso contiene un es un identificador único e inmutable para el DPC. Llamada customers.dpcs.list para obtener la lista de todos los DPC Debido a que el nombre del recurso también incluye el ID de cliente, filtra la lista utilizando el último componente de ruta de acceso para encontrar una instancia Dpc coincidente. El ejemplo a continuación, se muestra cómo hacer coincidir tu DPC y conservarlo más adelante en un actual:

Java

// Return a customer Dpc instance for the specified DPC ID.
String myDpcIdentifier = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...xMSWCiYiuHRWeBbu86Yjq";
final int dpcIdIndex = 3;
final String dpcComponentSeparator = "/";
// ...
for (Dpc dpcApp : dpcs) {
    // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the
    // fourth component matches the DPC ID.
    String dpcId = dpcApp.getName().split(dpcComponentSeparator)[dpcIdIndex];
    if (dpcId.equals(myDpcIdentifier)) {
        System.out.format("My DPC is: %s\n", dpcApp.getDpcName());
        return dpcApp;
    }
}
// Handle the case when the DPC isn't found...

.NET

// Return a customer Dpc instance for the specified DPC ID.
var myDpcIdentifer = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...fE9WdHcxMSWCiYiuHRWeBbu86Yjq";
const int dpcIdIndex = 3;
const String dpcComponentSeparator = "/";
// ...
foreach (Dpc dpcApp in dpcs)
{
    // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the
    // fourth component matches the DPC ID.
    String dpcId = dpcApp.Name.Split(dpcComponentSeparator)[dpcIdIndex];
    if (dpcId.Equals(myDpcIdentifer))
    {
        Console.WriteLine("Matched DPC is: {0}", dpcApp.DpcName);
        return dpcApp;
    }
}
// Handle the case when the DPC isn't found...

Python

# Return a customer Dpc instance for the specified DPC ID.
my_dpc_id = 'AH6Gbe4aiS459wlz58L30cqb...fE9WdHcxMSWCiYiuHRWeBbu86Yjq'
# ...
for dpc_app in dpcs:
  # Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID},
  # check the fourth component matches the DPC ID.
  dpc_id = dpc_app['name'].split('/')[3]
  if dpc_id == my_dpc_id:
    return dpc_app

# Handle the case when the DPC isn't found...

Si necesitas mostrar el nombre de un DPC en la interfaz de usuario de tu consola, muestra el valor que muestra customers.dpcs.dpcName

Aprovisionamiento

Aprovecha la oportunidad de proporcionar una excelente experiencia del usuario para la provisión de dispositivos. Solo se necesita un nombre de usuario y una contraseña para aprovisionar el dispositivo. Recuerda que los revendedores pueden enviar los dispositivos directamente a los usuarios remotos. Incluir todos los demás parámetros de configuración, como el servidor de EMM o la unidad organizativa, en customers.configuration.dpcExtras

El siguiente fragmento de JSON muestra parte de una configuración de ejemplo:

{
  "android.app.extra.PROVISIONING_LOCALE": "en_GB",
  "android.app.extra.PROVISIONING_TIME_ZONE": "Europe/London",
  "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": true,
  "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
    "workflow_type": 3,
    "default_password_quality": 327680,
    "default_min_password_length": 6,
    "company_name": "XYZ Corp",
    "organizational_unit": "sales-uk",
    "management_server": "emm.example.com",
    "detail_tos_url": "https://www.example.com/policies/terms/",
    "allowed_user_domains": "[\"example.com\", \"example.org\", \"example.net\"]"
    }
}

La inscripción automática instala e inicia tu DPC con un intent de Android. El sistema envía los valores del Propiedad JSON android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE a tu DPC como extras en el intent. Tu DPC puede leer la configuración de aprovisionamiento de la PersistableBundle con las mismas claves.

Recomendado: Usa los siguientes extras de intents para configurar tu DPC:

No se recomienda; no incluyas los siguientes elementos adicionales que podrías usar en otros métodos de inscripción:

Para obtener más información sobre cómo extraer y usar estos parámetros de configuración en tu DPC, lee Aprovisionamiento dispositivos de los clientes.

Desarrollo y pruebas

Para desarrollar y probar las funciones de inscripción automática de tu consola, necesitarás lo siguiente: lo siguiente:

  • un dispositivo compatible
  • una cuenta de inscripción automática para clientes

Desarrollar y realizar pruebas con dispositivos que admitan la inscripción automática inscritas en la aplicación, como Google Pixel. No es necesario comprar tus dispositivos de desarrollo a un socio revendedor.

Comunícate con nosotros para obtener una cuenta de cliente de prueba y acceder al portal de inscripción automática. Envíanos un correo electrónico desde tu dirección de correo electrónico empresarial (es decir, asociado a una cuenta de Google Cuenta. Cuéntanos cuál es el fabricante. y el número IMEI de uno o dos dispositivos, y los agregaremos a tu cuenta de de servicio predeterminada.

Recuerda que la inscripción automática descarga e instala automáticamente un DPC, tu DPC debe estar disponible en Google Play antes de que puedas realizar la prueba de servicios. No puedes realizar pruebas con una versión de desarrollo de tu DPC.

Asistencia para administradores de TI

Si necesitas ayudar a los administradores de TI en la interfaz de tu consola o en tu documentación Consulta el artículo sobre inscripción automática para administradores de TI si necesitas orientación. Tú también puede dirigir a los usuarios de tu consola a ese artículo del Centro de ayuda.

Lecturas adicionales

Lee estos documentos para ayudarte a integrar la inscripción automática en tu consola: