Это руководство поможет поставщикам решений для управления мобильными устройствами предприятия (EMM) интегрировать автоматическую регистрацию устройств в свою консоль. Продолжайте читать, чтобы узнать больше о регистрации и ознакомиться с рекомендациями по передовым методам, которые помогут вашему контроллеру политик устройств (DPC) настраивать устройства. Если у вас есть DPC, вы узнаете о передовых методах настройки устройств и получите советы по разработке и тестированию.
Функции для ИТ-администраторов
Используйте API для работы с клиентами, чтобы помочь ИТ-администраторам настроить автоматическую регистрацию пользователей непосредственно из вашей консоли. Вот некоторые задачи, которые ИТ-администратор может выполнить в вашей консоли:
- Создавайте, редактируйте и удаляйте конфигурации автоматической регистрации в соответствии с вашими мобильными политиками.
- Установите конфигурацию по умолчанию, чтобы ваш DPC обеспечивал инициализацию будущих устройств, которые организация приобретет.
- Применяйте индивидуальные настройки к устройствам или удаляйте устройства из процесса автоматической регистрации.
Чтобы узнать больше о регистрации без участия пользователя, ознакомьтесь с обзором .
Предварительные требования
Прежде чем добавлять функцию автоматической регистрации в консоль EMM, убедитесь, что ваше решение поддерживает следующие функции:
- Ваше решение EMM должно обеспечивать настройку принадлежащего компании устройства Android 8.0+ (Pixel 7.1+) в полностью управляемом режиме. Устройства Android 10+, принадлежащие компании, могут быть настроены как в полностью управляемом режиме, так и с рабочим профилем .
- Поскольку автоматическая регистрация без участия пользователя автоматически загружает и устанавливает DPC, ваш DPC должен быть доступен в Google Play. Мы поддерживаем список совместимых DPC, которые ИТ-администраторы могут настроить с помощью клиентского API или портала. Отправьте запрос на изменение продукта через сообщество поставщиков EMM , чтобы добавить свой DPC в список.
- Для вызова API вашим клиентам необходима учетная запись с автоматической регистрацией. Партнер-реселлер создает эту учетную запись для организации ИТ-администратора при покупке организацией устройств.
- Для корректной работы функции автоматической регистрации устройство должно быть совместимо с сервисами Google Mobile Services (GMS) , а сервисы Google Play должны быть постоянно включены.
Вызовите API
Пользователи вашей консоли (используя свои учетные записи Google) авторизуют ваши API-запросы к клиентскому API. Этот процесс отличается от авторизации, которую вы выполняете для других API EMM. Прочитайте раздел «Авторизация» , чтобы узнать, как это сделать в вашем приложении.
Условия использования
Перед вызовом API ваши пользователи должны принять последние Условия предоставления услуг (ToS). Если вызов API возвращает код состояния HTTP 403 Forbidden , а тело ответа содержит TosError , предложите пользователю принять Условия предоставления услуг, войдя в портал автоматической регистрации. Пример ниже показывает один из способов это сделать:
Ява
// 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; }
.СЕТЬ
// 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://enterprise.google.com/android/zero-touch/customers' # 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)
Если ваш клиент Google API поддерживает подробные сообщения об ошибках (для Java, Python или HTTP-запросов), добавьте в запросы заголовок HTTP X-GOOG-API-FORMAT-VERSION со значением 2 Если ваш клиент не поддерживает подробные сообщения об ошибках (для .NET и других платформ), сопоставьте сообщение об ошибке с фактическим сообщением.
При последующем обновлении Условий использования, если вы будете следовать этому подходу, ваше приложение предложит пользователю повторно принять новые Условия использования.
Ссылка на портал
ИТ-администраторы используют портал автоматической регистрации пользователей для управления пользователями в своей организации — эта функция недоступна через API клиента. ИТ-администраторы также могут управлять устройствами и конфигурациями с помощью портала. Если вам необходимо разместить ссылку на портал в консоли или в документации, используйте этот URL:
https://enterprise.google.com/android/zero-touch/customers
Возможно, вам стоит сообщить ИТ-администраторам, что им предлагается войти в систему с помощью своей учетной записи Google.
Регистрация устройства
Регистрация без участия пользователя — это механизм регистрации устройств, аналогичный регистрации по NFC или QR-коду. Ваша консоль должна поддерживать управляемые устройства, а ваш DPC должен уметь работать в полностью управляемом режиме.
Функция автоматической регистрации доступна на поддерживаемых устройствах под управлением Android 8.0 или более поздней версии. ИТ-администраторы должны приобретать поддерживаемые устройства у партнера-реселлера . Консоль позволяет отслеживать, какие из устройств ИТ-администратора доступны для автоматической регистрации, вызывая команду customers.devices.list .
Вот схема процесса зачисления:
- Устройство при первом запуске (или после сброса до заводских настроек) подключается к серверу Google для автоматической регистрации.
- Если ИТ-администратор применил к устройству конфигурацию, автоматическая регистрация запускает мастер настройки Android-устройства и персонализирует экраны с использованием метаданных из конфигурации.
- Регистрация без участия пользователя позволяет загрузить и установить ваш DPC из Google Play.
- Ваш DPC получает интент
ACTION_PROVISION_MANAGED_DEVICEи выполняет инициализацию устройства.
Если подключение к интернету отсутствует, проверка выполняется, когда оно появляется. Подробнее о настройке устройств с помощью автоматической регистрации см. в разделе «Настройка» ниже.
Настройки по умолчанию
Функция автоматической регистрации устройств (Zero-touch enrollment) наиболее полезна для ИТ-администраторов, когда они устанавливают конфигурацию по умолчанию, которая применяется ко всем новым устройствам, приобретаемым их организацией. Если конфигурация по умолчанию не задана, предложите администраторам установить её из консоли. Вы можете проверить значение параметра customers.configurations.isDefault , чтобы узнать, задана ли в организации конфигурация по умолчанию.
В приведенном ниже примере показано, как можно сделать существующую конфигурацию конфигурацией по умолчанию:
Ява
// 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();
.СЕТЬ
// 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()
Ссылка на ваш DPC
Мы рекомендуем использовать имя ресурса API customers.dpcs.name для идентификации вашего DPC и его использования в конфигурациях. Имя ресурса содержит уникальный и неизменяемый идентификатор для DPC. Вызовите customers.dpcs.list , чтобы получить список всех поддерживаемых DPC. Поскольку имя ресурса также включает идентификатор клиента, отфильтруйте список, используя последний компонент пути, чтобы найти соответствующий экземпляр Dpc . В приведенном ниже примере показано, как сопоставить ваш DPC и сохранить его для последующего использования в конфигурации:
Ява
// 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...
.СЕТЬ
// 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...
Если вам необходимо отобразить имя DPC в пользовательском интерфейсе консоли, выведите значение, возвращаемое функцией customers.dpcs.dpcName .
Обеспечение
Воспользуйтесь возможностью обеспечить удобный интерфейс для настройки устройств. Для настройки устройства должно быть достаточно имени пользователя и пароля. Помните, что реселлеры могут отправлять устройства напрямую удаленным пользователям. Все остальные настройки, такие как сервер EMM или организационное подразделение, укажите в файле customers.configuration.dpcExtras .
Приведённый ниже фрагмент JSON-кода демонстрирует часть примера конфигурации:
{
"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\"]"
}
}
Функция автоматической регистрации (Zero-touch enrollment) устанавливает и запускает ваш DPC с помощью Android Intent. Система отправляет значения из JSON-свойства android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE вашему DPC в качестве дополнительных параметров (extras) в Intent. Ваш DPC может считывать параметры инициализации из PersistableBundle , используя те же ключи.
Рекомендуется использовать следующие дополнительные параметры намерения для настройки DPC:
-
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE -
EXTRA_PROVISIONING_LOCALE -
EXTRA_PROVISIONING_TIME_ZONE -
EXTRA_PROVISIONING_LOCAL_TIME -
EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED -
EXTRA_PROVISIONING_MAIN_COLOR -
EXTRA_PROVISIONING_DISCLAIMERS
Не рекомендуется — не включайте следующие дополнительные услуги, которые могут потребоваться при других способах регистрации:
-
EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME -
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM -
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER -
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION -
EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM
Чтобы узнать, как извлечь и использовать эти настройки в вашем DPC, ознакомьтесь с инструкцией по настройке клиентских устройств .
Разработка и тестирование
Для разработки и тестирования функций автоматической регистрации устройств на вашей консоли вам потребуется следующее:
- поддерживаемое устройство
- учетная запись для автоматической регистрации клиента
Разрабатывайте и тестируйте с помощью устройств, поддерживающих автоматическую регистрацию , таких как Google Pixel. Вам не нужно приобретать устройства для разработки у партнера-реселлера.
Свяжитесь с нами , чтобы получить тестовый клиентский аккаунт и доступ к порталу автоматической регистрации. Отправьте нам электронное письмо со своего корпоративного адреса электронной почты, связанного с учетной записью Google. Укажите производителя и номер IMEI одного или двух устройств, и мы добавим их в ваш аккаунт для разработки.
Помните, что поскольку автоматическая регистрация без участия пользователя автоматически загружает и устанавливает DPC, ваш DPC должен быть доступен в Google Play, прежде чем вы сможете протестировать процесс предоставления доступа. Вы не сможете протестировать с помощью версии DPC для разработчиков.
Поддержка ИТ-администраторов
Если вам нужна помощь ИТ-администраторам в работе с интерфейсом консоли или документацией, обратитесь к статье «Автоматическая регистрация для ИТ-администраторов» . Вы также можете направить пользователей консоли к этой статье в справочном центре.
Дальнейшее чтение
Ознакомьтесь с этими документами, чтобы интегрировать функцию автоматической регистрации пользователей в вашу консоль:
- Простая регистрация ИТ-администраторов в корпоративной справке Android.
- Настройка клиентских устройств осуществляется через сайт разработчиков Android EMM.