Создайте контроллер политики устройств.

В этом руководстве описывается, как разработать контроллер политики устройств (DPC) для устройств в корпоративном развертывании Android. Приложение DPC, ранее известное как контроллер рабочих политик , управляет локальными политиками устройств и системными приложениями на устройствах.

О ЦОДах

При развертывании Android на предприятии предприятие сохраняет контроль над различными аспектами пользовательских устройств, например, изолируя рабочую информацию от личных данных пользователей, предварительную настройку одобренных приложений для среды или отключение функций устройства (например, камеры). .

Как EMM, вы разрабатываете приложение ЦОД, которое ваши клиенты смогут использовать вместе с вашей консолью и сервером EMM . Ваш клиент развертывает ЦОД на пользовательских устройствах, которыми он управляет. ЦОД действует как мост между вашей консолью (и сервером) EMM и устройством. Администратор использует консоль EMM для выполнения ряда задач, включая настройку параметров устройства и приложений.

ЦОД создает рабочий профиль и управляет им на устройстве, на котором он установлен. Рабочий профиль шифрует рабочую информацию и хранит ее отдельно от личных приложений и данных пользователей. Перед созданием рабочего профиля ЦОД также может предоставить управляемую учетную запись Google Play для использования на устройстве.

В этом руководстве показано, как разработать ЦОД, который может создавать рабочие профили и управлять ими.

Библиотека поддержки ЦОД для EMM

Библиотека поддержки DPC для EMM включает служебные и вспомогательные классы, которые упрощают подготовку устройств Android и управление ими в корпоративной среде. Библиотека позволяет вам воспользоваться важными функциями ваших приложений ЦОД:

  • Поддержка предоставления управляемых учетных записей Google Play . Для предоставления управляемых учетных записей Google Play из приложения DPC требуется, чтобы приложения Google Play и сервисов Google Play соответствовали минимальным требованиям к версии. Однако обновление этих приложений может быть сложным. Библиотека поддержки DPC заботится об обновлении этих приложений, а также обеспечивает совместимость с будущими обновлениями процесса подготовки управляемых учетных записей Google Play. Дополнительную информацию см. в разделе Поддержка подготовки управляемых учетных записей Google Play .
  • Поддержка управляемых конфигураций . Использование Play EMM API для обработки управляемых конфигураций утвержденных приложений — это самый простой способ реализовать управляемые конфигурации на вашем ЦОД. Библиотека поддержки DPC позволяет делегировать Google Play задачу применения управляемых конфигураций (ранее — ограничений приложений), заданных администратором с помощью консоли EMM. Использование Play EMM API для обработки управляемых конфигураций позволяет применять конфигурацию приложения атомарно во время установки. Дополнительные сведения о том, как включить эту возможность в вашем ЦОД, см. в разделе «Применение управляемых конфигураций к рабочим приложениям» .

Следуйте инструкциям ниже, чтобы загрузить библиотеку. Задачи, подробно описанные в этом руководстве, предполагают использование библиотеки поддержки DPC.

Загрузите библиотеку поддержки ЦОД

Чтобы использовать библиотеку поддержки DPC, загрузите ее из сообщества Android Enterprise EMM Provider . Вы должны добавить библиотеку в файл build.gradle и позаботиться о других зависимостях при создании приложения DPC. Например, для библиотеки требуется клиентская библиотека аутентификации Google Play Services 11.4.0.

  1. Добавьте библиотеку в файл build.gradle :

    классный

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Котлин

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Добавьте клиентскую библиотеку аутентификации Google Play Services 11.4.0 в файл build.gradle:

    классный

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Котлин

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    

Для запуска библиотеки требуются определенные разрешения, поэтому вы должны добавить их в манифест вашего приложения DPC при загрузке в Google Play:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

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

Создать ЦОД

Создайте свой ЦОД на основе существующей модели, используемой для приложений администрирования устройств. В частности, ваше приложение должно быть подклассом DeviceAdminReceiver (класс из пакета android.app.admin ), как описано в разделе «Администрирование устройств» .

Создать рабочий профиль

Пример, демонстрирующий создание базового рабочего профиля, см. в разделе BasicManagedProfile на GitHub.

Чтобы создать рабочий профиль на устройстве, у которого уже есть личный профиль, сначала выясните, может ли устройство поддерживать рабочий профиль, проверив наличие системной функции FEATURE_MANAGED_USERS :

Котлин

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Ява

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Если устройство поддерживает рабочие профили, создайте рабочий профиль, отправив намерение с помощью действия ACTION_PROVISION_MANAGED_PROFILE . (В некоторой документации управляемый профиль — это общий термин, который означает то же самое, что и рабочий профиль в контексте Android на предприятии.) Включите имя пакета администратора устройства в качестве дополнительного:

Котлин

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Ява

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

Система реагирует на это намерение, выполняя следующие действия:

  • Проверяет, что устройство зашифровано. Если это не так, система предложит пользователю зашифровать устройство, прежде чем продолжить.
  • Создает рабочий профиль.
  • Удаляет ненужные приложения из рабочего профиля.
  • Копирует приложение DPC в рабочий профиль и назначает сам DPC владельцем профиля.

Переопределите onActivityResult() , чтобы проверить, прошла ли подготовка успешно:

Котлин

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Ява

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Завершите включение рабочего профиля.

После подготовки профиля система вызывает метод DeviceAdminReceiver.onProfileProvisioningComplete() приложения DPC. Переопределите этот метод обратного вызова, чтобы завершить включение рабочего профиля.

Типичная реализация обратного вызова DeviceAdminReceiver.onProfileProvisioningComplete() делает следующее:

Активируйте рабочий профиль

После выполнения этих задач вызовите метод setProfileEnabled() диспетчера политик устройств, чтобы активировать рабочий профиль:

Котлин

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Ява

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

Настройка политик устройств

Приложение DPC применяет политики устройств, установленные администратором, в соответствии с требованиями и ограничениями организации. Например, политика безопасности может требовать, чтобы устройства блокировались после определенного количества неудачных попыток ввода пароля. ЦОД запрашивает у консоли EMM текущие политики, а затем применяет политики с помощью API администрирования устройств .

Информацию о том, как применять политики устройств, см. в разделе Политики .

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

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

Возможности приложения определяются разработчиком приложения в схеме XML (схема управляемых конфигураций), которая сопровождает приложение при загрузке в Google Play (для разработчиков приложений см. дополнительные сведения в разделе «Настройка управляемых конфигураций» ).

Вы извлекаете эту схему из приложения для отображения администраторам клиентов в консоли EMM, предоставляете пользовательский интерфейс, в котором отображаются различные параметры, определенные в схеме, и позволяете администраторам предварительно настраивать параметры приложения. Результирующая управляемая конфигурация, заданная администратором, обычно сохраняется на сервере EMM, который затем использует Play EMM API для установки Managedconfigurationsfordevice или Managedconfigurationsforuser . Подробности см. в разделе «Управляемые конфигурации через Play» .

Управляемые конфигурации можно применить к приложению с помощью Play EMM API (рекомендуемый подход) или непосредственно из ЦОД (описано в разделе Применение управляемых конфигураций непосредственно из ЦОД ). Использование Play EMM API имеет ряд преимуществ, в том числе простоту реализации, поскольку вы можете использовать библиотеку поддержки DPC для упрощения задач DPC. Кроме того, Play EMM API:

  • Устанавливает конфигурацию атомарно при установке нового приложения, обеспечивая тем самым готовность приложения при первом запуске его пользователем.
  • Позволяет управлять конфигурациями отдельно для каждого пользователя, что позволяет избежать мониторинга подготовки для каждого устройства.

Применяйте управляемые конфигурации с помощью Play EMM API.

Чтобы использовать API EMM Play для управляемых конфигураций, центр обработки данных должен разрешить Google Play устанавливать конфигурации. Библиотека поддержки DPC позаботится об этой задаче за вас, проксируя конфигурацию, отправленную Google Play.

Чтобы использовать Play EMM API, загрузите библиотеку поддержки DPC , а затем включите поддержку управляемых конфигураций в своем ЦОД.

Включите поддержку управляемых конфигураций в вашем ЦОД

Импортируйте этот класс в свой ЦОД:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Инициализируйте библиотеку управляемых конфигураций. В этом примере «admin» — это ComponentName DeviceAdminReceiver .

Котлин

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Ява

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Включите управляемые конфигурации:

Котлин

managedConfigurationsSupport.enableManagedConfigurations()

Ява

managedConfigurationsSupport.enableManagedConfigurations();

С помощью этой библиотеки, инициализированной в вашем ЦОД, вы можете использовать API EMM Google Play в консоли и на сервере EMM, чтобы применять управляемые конфигурации к утвержденным приложениям, вместо того, чтобы кодировать эти задачи непосредственно в ЦОД. Подробности см. в разделе «Управляемые конфигурации через Play» .

Применяйте управляемые конфигурации непосредственно из ЦОД

Чтобы изменить параметры конфигурации приложения непосредственно из DPC, вызовите метод DevicePolicyManager.setApplicationRestrictions() и передайте параметры для DeviceAdminReceiver приложения DPC, имя пакета целевого приложения и пакет , содержащий управляемую конфигурацию приложения, заданную администратором. Дополнительные сведения см. в разделе «Как взаимодействуют ваш ЦОД и консоль EMM» и «Настройка управляемых конфигураций» . Однако обратите внимание, что этот альтернативный подход к применению управляемых конфигураций не рекомендуется при развертывании управляемых учетных записей Google Play.

Поддержка настройки управляемой учетной записи Google Play

Библиотека поддержки DPC включает поддержку подготовки управляемых учетных записей Google Play. Чтобы использовать эту поддержку, необходимо сначала инициализировать библиотеку, а затем обеспечить рабочую среду и добавить управляемую учетную запись Google Play .

Инициализируйте поддержку управляемых учетных записей Google Play в вашем ЦОД.

Импортируйте этот класс в свой ЦОД:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Инициализируйте библиотеку обеспечения совместимости. В этом примере «admin» — это ComponentName DeviceAdminReceiver .

Котлин

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Ява

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Обеспечьте рабочую среду для управляемых учетных записей Google Play.

После того как ЦОД предоставит устройство в режиме владельца профиля ( ACTION_PROVISION_MANAGED_PROFILE ) или режиме владельца устройства ( ACTION_PROVISION_MANAGED_DEVICE ), убедитесь, что устройство может поддерживать управляемые учетные записи Google Play, вызвав:

Котлин

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Ява

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Обратный вызов сообщает об успехе или неудаче этого процесса. Когда обратный вызов пройдет успешно, можно будет добавить управляемую учетную запись Google Play. Если обратный вызов сообщает об ошибке, предложите пользователю убедиться, что устройство имеет сетевое подключение (например, в случае сбоя загрузки). В остальных случаях сообщите о сбое в Google.

Котлин

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Ява

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

Добавьте управляемый аккаунт Google Play

AccountManager платформы Android может добавить на устройство управляемую учетную запись Google Play. Чтобы упростить взаимодействие с AccountManager , используйте вспомогательную функцию (показана в примере ниже) из библиотеки поддержки DPC . Функция обрабатывает токен, возвращаемый сервером Google Play, и облегчает подготовку управляемой учетной записи Google Play. Функция возвращается, когда управляемая учетная запись Google Play находится в допустимом состоянии:

Котлин

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Ява

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token — токен аутентификации пользователя, созданный вызовом Users.generateAuthenticationToken() Google Play EMM API.
  • accountAddedCallback — Возвращает управляемую учетную запись Google Play, которая была успешно добавлена ​​на устройство. Этот обратный вызов должен включать методы onAccountReady() и onFailure() .

Котлин

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Ява

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
,

В этом руководстве описывается, как разработать контроллер политики устройств (DPC) для устройств в корпоративном развертывании Android. Приложение DPC, ранее известное как контроллер рабочих политик , управляет локальными политиками устройств и системными приложениями на устройствах.

О ЦОДах

При развертывании Android на предприятии предприятие сохраняет контроль над различными аспектами пользовательских устройств, например, изолируя рабочую информацию от личных данных пользователей, предварительную настройку одобренных приложений для среды или отключение функций устройства (например, камеры). .

Как EMM, вы разрабатываете приложение ЦОД, которое ваши клиенты смогут использовать вместе с вашей консолью и сервером EMM . Ваш клиент развертывает ЦОД на пользовательских устройствах, которыми он управляет. ЦОД действует как мост между вашей консолью (и сервером) EMM и устройством. Администратор использует консоль EMM для выполнения ряда задач, включая настройку параметров устройства и приложений.

ЦОД создает рабочий профиль и управляет им на устройстве, на котором он установлен. Рабочий профиль шифрует рабочую информацию и хранит ее отдельно от личных приложений и данных пользователей. Перед созданием рабочего профиля ЦОД также может предоставить управляемую учетную запись Google Play для использования на устройстве.

В этом руководстве показано, как разработать ЦОД, который может создавать рабочие профили и управлять ими.

Библиотека поддержки ЦОД для EMM

Библиотека поддержки DPC для EMM включает служебные и вспомогательные классы, которые упрощают подготовку устройств Android и управление ими в корпоративной среде. Библиотека позволяет вам воспользоваться важными функциями ваших приложений ЦОД:

  • Поддержка предоставления управляемых учетных записей Google Play . Для предоставления управляемых учетных записей Google Play из приложения DPC требуется, чтобы приложения Google Play и сервисов Google Play соответствовали минимальным требованиям к версии. Однако обновление этих приложений может быть сложным. Библиотека поддержки DPC заботится об обновлении этих приложений, а также обеспечивает совместимость с будущими обновлениями процесса подготовки управляемых учетных записей Google Play. Дополнительную информацию см. в разделе Поддержка подготовки управляемых учетных записей Google Play .
  • Поддержка управляемых конфигураций . Использование Play EMM API для обработки управляемых конфигураций утвержденных приложений — это самый простой способ реализовать управляемые конфигурации в вашем ЦОД. Библиотека поддержки DPC позволяет делегировать Google Play задачу применения управляемых конфигураций (ранее — ограничений приложений), заданных администратором с помощью консоли EMM. Использование Play EMM API для обработки управляемых конфигураций позволяет применять конфигурацию приложения атомарно во время установки. Дополнительные сведения о том, как включить эту возможность в вашем ЦОД, см. в разделе «Применение управляемых конфигураций к рабочим приложениям» .

Следуйте инструкциям ниже, чтобы загрузить библиотеку. Задачи, подробно описанные в этом руководстве, предполагают использование библиотеки поддержки DPC.

Загрузите библиотеку поддержки ЦОД

Чтобы использовать библиотеку поддержки DPC, загрузите ее из сообщества Android Enterprise EMM Provider . Вы должны добавить библиотеку в файл build.gradle и позаботиться о других зависимостях при создании приложения DPC. Например, для библиотеки требуется клиентская библиотека аутентификации Google Play Services 11.4.0.

  1. Добавьте библиотеку в файл build.gradle :

    классный

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Котлин

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Добавьте клиентскую библиотеку аутентификации Google Play Services 11.4.0 в файл build.gradle:

    классный

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Котлин

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    

Для работы библиотеки требуются определенные разрешения, поэтому вы должны добавить их в манифест вашего приложения DPC при загрузке в Google Play:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

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

Создать ЦОД

Создайте свой ЦОД на основе существующей модели, используемой для приложений администрирования устройств. В частности, ваше приложение должно быть подклассом DeviceAdminReceiver (класс из пакета android.app.admin ), как описано в разделе «Администрирование устройств» .

Создать рабочий профиль

Пример, демонстрирующий создание базового рабочего профиля, см. в разделе BasicManagedProfile на GitHub.

Чтобы создать рабочий профиль на устройстве, у которого уже есть личный профиль, сначала выясните, может ли устройство поддерживать рабочий профиль, проверив наличие системной функции FEATURE_MANAGED_USERS :

Котлин

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Ява

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Если устройство поддерживает рабочие профили, создайте рабочий профиль, отправив намерение с помощью действия ACTION_PROVISION_MANAGED_PROFILE . (В некоторой документации управляемый профиль — это общий термин, который означает то же самое, что и рабочий профиль в контексте Android на предприятии.) Включите имя пакета администратора устройства в качестве дополнительного:

Котлин

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Ява

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

Система реагирует на это намерение, выполняя следующие действия:

  • Проверяет, что устройство зашифровано. Если это не так, система предложит пользователю зашифровать устройство, прежде чем продолжить.
  • Создает рабочий профиль.
  • Удаляет ненужные приложения из рабочего профиля.
  • Копирует приложение DPC в рабочий профиль и назначает сам DPC владельцем профиля.

Переопределите onActivityResult() , чтобы проверить, прошла ли подготовка успешно:

Котлин

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Ява

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Завершите включение рабочего профиля.

После подготовки профиля система вызывает метод DeviceAdminReceiver.onProfileProvisioningComplete() приложения DPC. Переопределите этот метод обратного вызова, чтобы завершить включение рабочего профиля.

Типичная реализация обратного вызова DeviceAdminReceiver.onProfileProvisioningComplete() делает следующее:

Активируйте рабочий профиль

После выполнения этих задач вызовите метод setProfileEnabled() диспетчера политик устройств, чтобы активировать рабочий профиль:

Котлин

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Ява

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

Настройка политик устройств

Приложение DPC применяет политики устройств, установленные администратором, в соответствии с требованиями и ограничениями организации. Например, политика безопасности может требовать, чтобы устройства блокировались после определенного количества неудачных попыток ввода пароля. ЦОД запрашивает у консоли EMM текущие политики, а затем применяет политики с помощью API администрирования устройств .

Информацию о том, как применять политики устройств, см. в разделе Политики .

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

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

Возможности приложения определяются разработчиком приложения в XML-схеме (схеме управляемых конфигураций), которая сопровождает приложение при загрузке в Google Play (для разработчиков приложений см. дополнительные сведения в разделе «Настройка управляемых конфигураций» ).

Вы извлекаете эту схему из приложения для отображения администраторам клиентов в консоли EMM, предоставляете пользовательский интерфейс, в котором отображаются различные параметры, определенные в схеме, и позволяете администраторам предварительно настраивать параметры приложения. Результирующая управляемая конфигурация, заданная администратором, обычно сохраняется на сервере EMM, который затем использует Play EMM API для установки Managedconfigurationsfordevice или Managedconfigurationsforuser . Подробности см. в разделе «Управляемые конфигурации через Play» .

Управляемые конфигурации можно применить к приложению с помощью Play EMM API (рекомендуемый подход) или непосредственно из ЦОД (описано в разделе Применение управляемых конфигураций непосредственно из ЦОД ). Использование Play EMM API имеет ряд преимуществ, в том числе простоту реализации, поскольку вы можете использовать библиотеку поддержки DPC для упрощения задач DPC. Кроме того, Play EMM API:

  • Устанавливает конфигурацию атомарно при установке нового приложения, обеспечивая тем самым готовность приложения при первом запуске его пользователем.
  • Позволяет управлять конфигурациями отдельно для каждого пользователя, что позволяет избежать мониторинга подготовки для каждого устройства.

Применяйте управляемые конфигурации с помощью Play EMM API.

Чтобы использовать Play EMM API для управляемых конфигураций, центр обработки данных должен разрешить Google Play устанавливать конфигурации. Библиотека поддержки DPC позаботится об этой задаче за вас, проксируя конфигурацию, отправленную Google Play.

Чтобы использовать Play EMM API, загрузите библиотеку поддержки DPC , а затем включите поддержку управляемых конфигураций в своем ЦОД.

Включите поддержку управляемых конфигураций в вашем ЦОД

Импортируйте этот класс в свой ЦОД:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Инициализируйте библиотеку управляемых конфигураций. В этом примере «admin» — это имя компонента DeviceAdminReceiver .

Котлин

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Ява

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Включите управляемые конфигурации:

Котлин

managedConfigurationsSupport.enableManagedConfigurations()

Ява

managedConfigurationsSupport.enableManagedConfigurations();

С помощью этой библиотеки, инициализированной в вашем ЦОД, вы можете использовать API EMM Google Play в консоли и на сервере EMM, чтобы применять управляемые конфигурации к утвержденным приложениям, вместо того, чтобы кодировать эти задачи непосредственно в ЦОД. Подробности см. в разделе «Управляемые конфигурации через Play» .

Применяйте управляемые конфигурации непосредственно из ЦОД

Чтобы изменить параметры конфигурации приложения непосредственно из DPC, вызовите метод DevicePolicyManager.setApplicationRestrictions() и передайте параметры для DeviceAdminReceiver приложения DPC, имя пакета целевого приложения и пакет , содержащий управляемую конфигурацию приложения, заданную администратором. Дополнительные сведения см. в разделе «Как взаимодействуют ваш ЦОД и консоль EMM» и «Настройка управляемых конфигураций» . Однако обратите внимание, что этот альтернативный подход к применению управляемых конфигураций не рекомендуется при развертывании управляемых учетных записей Google Play.

Поддержка настройки управляемой учетной записи Google Play

Библиотека поддержки DPC включает поддержку настройки управляемых учетных записей Google Play. Чтобы использовать эту поддержку, необходимо сначала инициализировать библиотеку, а затем обеспечить рабочую среду и добавить управляемую учетную запись Google Play .

Инициализируйте поддержку управляемых учетных записей Google Play в вашем ЦОД.

Импортируйте этот класс в свой ЦОД:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Инициализируйте библиотеку обеспечения совместимости. В этом примере «admin» — это ComponentName DeviceAdminReceiver .

Котлин

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Ява

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Обеспечьте рабочую среду для управляемых учетных записей Google Play.

После того как ЦОД предоставит устройство в режиме владельца профиля ( ACTION_PROVISION_MANAGED_PROFILE ) или режиме владельца устройства ( ACTION_PROVISION_MANAGED_DEVICE ), убедитесь, что устройство может поддерживать управляемые учетные записи Google Play, вызвав:

Котлин

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Ява

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Обратный вызов сообщает об успехе или неудаче этого процесса. Когда обратный вызов пройдет успешно, можно будет добавить управляемую учетную запись Google Play. Если обратный вызов сообщает об ошибке, предложите пользователю убедиться, что устройство имеет сетевое подключение (например, в случае сбоя загрузки). В остальных случаях сообщите о сбое в Google.

Котлин

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Ява

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

Добавьте управляемый аккаунт Google Play

AccountManager платформы Android может добавить на устройство управляемую учетную запись Google Play. Чтобы упростить взаимодействие с AccountManager , используйте вспомогательную функцию (показана в примере ниже) из библиотеки поддержки DPC . Функция обрабатывает токен, возвращаемый сервером Google Play, и облегчает подготовку управляемой учетной записи Google Play. Функция возвращается, когда управляемая учетная запись Google Play находится в допустимом состоянии:

Котлин

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Ява

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token — токен аутентификации пользователя, созданный вызовом Users.generateAuthenticationToken() Google Play EMM API.
  • accountAddedCallback — Возвращает управляемую учетную запись Google Play, которая была успешно добавлена ​​на устройство. Этот обратный вызов должен включать методы onAccountReady() и onFailure() .

Котлин

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Ява

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
,

В этом руководстве описывается, как разработать контроллер политики устройств (DPC) для устройств в корпоративном развертывании Android. Приложение DPC, ранее известное как контроллер рабочих политик , управляет локальными политиками устройств и системными приложениями на устройствах.

О ЦОДах

При корпоративном развертывании Android предприятие сохраняет контроль над различными аспектами пользовательских устройств, например, изолируя рабочую информацию от личных данных пользователей, предварительную настройку одобренных приложений для среды или отключение функций устройства (например, камеры). .

Как EMM, вы разрабатываете приложение ЦОД, которое ваши клиенты смогут использовать вместе с вашей консолью и сервером EMM . Ваш клиент развертывает ЦОД на пользовательских устройствах, которыми он управляет. ЦОД действует как мост между вашей консолью (и сервером) EMM и устройством. Администратор использует консоль EMM для выполнения ряда задач, включая настройку параметров устройства и приложений.

ЦОД создает рабочий профиль и управляет им на устройстве, на котором он установлен. Рабочий профиль шифрует рабочую информацию и хранит ее отдельно от личных приложений и данных пользователей. Перед созданием рабочего профиля ЦОД также может предоставить управляемую учетную запись Google Play для использования на устройстве.

В этом руководстве показано, как разработать ЦОД, который может создавать рабочие профили и управлять ими.

Библиотека поддержки ЦОД для EMM

Библиотека поддержки DPC для EMM включает служебные и вспомогательные классы, которые упрощают подготовку устройств Android и управление ими в корпоративной среде. Библиотека позволяет вам воспользоваться важными функциями ваших приложений ЦОД:

  • Поддержка предоставления управляемых учетных записей Google Play . Для предоставления управляемых учетных записей Google Play из приложения DPC требуется, чтобы приложения Google Play и сервисов Google Play соответствовали минимальным требованиям к версии. Однако обновление этих приложений может быть сложным. Библиотека поддержки DPC заботится об обновлении этих приложений, а также обеспечивает совместимость с будущими обновлениями процесса подготовки управляемых учетных записей Google Play. Дополнительную информацию см. в разделе Поддержка подготовки управляемых учетных записей Google Play .
  • Поддержка управляемых конфигураций . Использование Play EMM API для обработки управляемых конфигураций утвержденных приложений — это самый простой способ реализовать управляемые конфигурации на вашем ЦОД. Библиотека поддержки DPC позволяет делегировать Google Play задачу применения управляемых конфигураций (ранее — ограничений приложений), заданных администратором с помощью консоли EMM. Использование Play EMM API для обработки управляемых конфигураций позволяет применять конфигурацию приложения атомарно во время установки. Дополнительные сведения о том, как включить эту возможность в вашем ЦОД, см. в разделе «Применение управляемых конфигураций к рабочим приложениям» .

Следуйте инструкциям ниже, чтобы загрузить библиотеку. Задачи, подробно описанные в этом руководстве, предполагают использование библиотеки поддержки DPC.

Загрузите библиотеку поддержки ЦОД

Чтобы использовать библиотеку поддержки DPC, загрузите ее из сообщества Android Enterprise EMM Provider . Вы должны добавить библиотеку в файл build.gradle и позаботиться о других зависимостях при создании приложения DPC. Например, для библиотеки требуется клиентская библиотека аутентификации Google Play Services 11.4.0.

  1. Добавьте библиотеку в файл build.gradle :

    классный

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Котлин

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Добавьте клиентскую библиотеку аутентификации Google Play Services 11.4.0 в файл build.gradle:

    классный

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Котлин

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    

Для работы библиотеки требуются определенные разрешения, поэтому вы должны добавить их в манифест вашего приложения DPC при загрузке в Google Play:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

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

Создать ЦОД

Создайте свой ЦОД на основе существующей модели, используемой для приложений администрирования устройств. В частности, ваше приложение должно быть подклассом DeviceAdminReceiver (класс из пакета android.app.admin ), как описано в разделе «Администрирование устройств» .

Создать рабочий профиль

Пример, демонстрирующий создание базового рабочего профиля, см. в разделе BasicManagedProfile на GitHub.

Чтобы создать рабочий профиль на устройстве, у которого уже есть личный профиль, сначала выясните, может ли устройство поддерживать рабочий профиль, проверив наличие системной функции FEATURE_MANAGED_USERS :

Котлин

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Ява

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Если устройство поддерживает рабочие профили, создайте рабочий профиль, отправив намерение с помощью действия ACTION_PROVISION_MANAGED_PROFILE . (В некоторой документации управляемый профиль — это общий термин, который означает то же самое, что и рабочий профиль в контексте Android на предприятии.) Включите имя пакета администратора устройства в качестве дополнительного:

Котлин

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Ява

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

Система реагирует на это намерение, выполняя следующие действия:

  • Проверяет, что устройство зашифровано. Если это не так, система предложит пользователю зашифровать устройство, прежде чем продолжить.
  • Создает рабочий профиль.
  • Удаляет ненужные приложения из рабочего профиля.
  • Копирует приложение DPC в рабочий профиль и назначает сам DPC владельцем профиля.

Переопределите onActivityResult() , чтобы проверить, прошла ли подготовка успешно:

Котлин

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Ява

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Завершите включение рабочего профиля.

После подготовки профиля система вызывает метод DeviceAdminReceiver.onProfileProvisioningComplete() приложения DPC. Переопределите этот метод обратного вызова, чтобы завершить включение рабочего профиля.

Типичная реализация обратного вызова DeviceAdminReceiver.onProfileProvisioningComplete() делает следующее:

Активировать рабочую профиль

После того, как вы выполните эти задачи, вызовите метод Device Policy Manager setProfileEnabled() для активации рабочего профиля:

Котлин

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Ява

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

Настройка политик устройства

Приложение DPC применяет политики устройства в соответствии с установленными администратором для удовлетворения требований и ограничений организации. Например, политика безопасности может потребовать, чтобы устройства блокировали после определенного количества попыток неудачных попыток пароля. DPC Запрашивает консоль EMM для текущих политик, затем применяет политики с использованием API администрирования устройства .

Для получения информации о том, как применять политики устройства, см. Политики .

Применить управляемые конфигурации к приложениям для работы

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

Возможности приложения определяются разработчиком приложений в схеме XML (схема управляемых конфигураций), которая сопровождает приложение при загрузке в Google Play (разработчики приложений, подробности см. В настройке управляемых конфигураций ).

Вы получаете эту схему из приложения для отображения для ваших администраторов клиентов в вашей консоли EMM, предоставляете пользовательский интерфейс, в котором различные параметры, определенные на дисплее схемы, и позволяют администраторам предварительно конфигурировать настройки приложения. Полученная управляемая конфигурация, установленная администратором, обычно хранится на сервере EMM, который затем использует API Play EMM для установки ManagedConfigurationSfordEvice или ManagedConfigurationsForuser . См. Управляемые конфигурации через игру для деталей.

Управляемые конфигурации могут быть применены к приложению с помощью API Play EMM (рекомендуемый подход) или непосредственно из DPC (описанный в применении управляемых конфигураций непосредственно из DPC ). Использование Play EMM API имеет несколько преимуществ, включая простую реализацию, потому что вы можете использовать библиотеку поддержки DPC для упрощения задач DPC. Кроме того, Play Emm API:

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

Применить управляемые конфигурации, используя API Play EMM

Чтобы использовать API Play EMM для управляемых конфигураций, DPC должен позволить Google Play устанавливать конфигурации. Библиотека поддержки DPC позаботится об этой задаче для вас, обеспечивая конфигурацию, отправленную Google Play.

Чтобы использовать API Play EMM, загрузите библиотеку поддержки DPC , а затем включите поддержку управляемых конфигураций в вашем DPC.

Включите поддержку управляемых конфигураций в вашем DPC

Импортируйте этот класс в свой DPC:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Инициализировать библиотеку управляемых конфигураций. В этом примере «администратор» является компонентом DeviceadMinReceiver .

Котлин

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Ява

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Включить управляемые конфигурации:

Котлин

managedConfigurationsSupport.enableManagedConfigurations()

Ява

managedConfigurationsSupport.enableManagedConfigurations();

С этой библиотекой, инициализированной в вашем DPC, вы можете использовать API Google Play EMM в своей консоли EMM и сервере для применения управляемых конфигураций к утвержденным приложениям, а не кодировать эти задачи непосредственно в DPC. См. Управляемые конфигурации через игру для деталей.

Применяйте управляемые конфигурации непосредственно из ЦОД

Чтобы изменить настройки конфигурации приложения непосредственно из DPC, вызовите метод DevicePolicyManager.SetApplicationRestrictions () и пропустите параметры для DeviceAdMinReceiver приложения DPC, имени пакета целевого приложения и пакета , включающего управляемую конфигурацию приложения в качестве установленного администратора. Посмотрите , как ваша консоль DPC и EMM взаимодействует и настраивает управляемые конфигурации для деталей. Тем не менее, обратите внимание, что этот альтернативный подход к применению управляемых конфигураций не рекомендуется в развертывании учетных записей Google Play.

Управляемая поддержка учетной записи Google Play

Библиотека поддержки DPC включает поддержку для обеспечения управляемых учетных записей Google Play. Чтобы использовать эту поддержку, вы должны сначала инициализировать библиотеку, а затем вы можете обеспечить рабочую среду и добавить управляемую учетную запись Google Play .

Инициализировать управляемую поддержку Google Play Accounts в вашем DPC

Импортируйте этот класс в свой DPC:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Инициализировать библиотеку совместимости обеспечения. В этом примере «администратор» является ComponentName DeviceAdminReceiver .

Котлин

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Ява

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Обеспечить рабочую среду для управляемых учетных записей Google Play

После положения DPC устройство в режиме владельца профиля ( ACTION_PROVISION_MANAGED_PROFILE ) или режим владельца устройства ( ACTION_PROVISION_MANAGED_DEVICE ) убедитесь, что устройство может поддерживать управляемые учетные записи Google Play, позвонив:

Котлин

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Ява

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Обратный вызов сообщает об успехе или неудаче этого процесса. Когда обратный вызов успешно возвращается, можно добавить управляемую учетную запись Google Play. Если обратный вызов сообщает об ошибке, предложите пользователю убедиться, что у устройства есть сетевое подключение (например, если загрузка не сбои). В других случаях сообщите о неспособности Google.

Котлин

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Ява

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

Добавьте управляемый аккаунт Google Play

AccountManager Android может добавить управляемую учетную запись Google Play в устройство. Чтобы упростить взаимодействие с AccountManager , используйте функцию вспомогательной (показанной в примере ниже) из библиотеки поддержки DPC . Функция обрабатывает токен, возвращаемый Google Play Server и облегчает предоставление учетной записи Google Play. Функция возвращается, когда управляемая учетная запись Google Play находится в действительном состоянии:

Котлин

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Ява

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token - токен аутентификации пользователя, сгенерированный Google Play EMM API Users.generateAuthenticationToken() .
  • accountAddedCallback - Возвращает управляемую учетную запись Google Play, которая была успешно добавлена ​​в устройство. Этот обратный вызов должен включать методы onAccountReady() и onFailure() .

Котлин

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Ява

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
  • Чтобы узнать больше об API администрирования устройства, см. Администрирование устройства .
  • Чтобы узнать о методах обеспечения Android Enterprise, см. Устройства предоставления в Руководстве разработчика Android Enterprise.
  • Образец GitHub, который демонстрирует, как создать базовый рабочий профиль, см. Basic ManagedProfile .
  • Образец GitHub, который демонстрирует, как установить конфигурации на других приложениях в качестве владельца профиля, см. AbstrestrictionForcer .