Criar um controlador de política de dispositivo

Este guia descreve como desenvolver um controlador de política de dispositivo (DPC) para em uma implantação empresarial do Android. Um app DPC, conhecido anteriormente como um controlador de política de trabalho, controla as políticas dos dispositivos locais e do sistema aplicativos nos dispositivos.

Sobre DPCs

Em uma implantação empresarial do Android, uma empresa mantém o controle vários aspectos dos dispositivos dos usuários, como o isolamento de funções informações dos usuários dados pessoais, pré-configurar aplicativos aprovados para o ambiente ou desativando recursos do dispositivo (por exemplo, a câmera).

Como EMM, você desenvolve um app de DPC que pode ser usado pelos seus clientes com seu console de EMM e servidor. Seu cliente implanta o DPC nos dispositivos dos usuários que ele gerencia. O DPC atua como ponte entre o console (e o servidor) de EMM e o dispositivo. Os administradores usam o console de EMM para executar várias tarefas, como definir as configurações e os aplicativos do dispositivo.

O DPC cria e gerencia o perfil de trabalho no dispositivo em que está instalado. O perfil de trabalho criptografa informações relacionadas ao trabalho e as mantém separadas dos usuários apps e dados pessoais. Antes de criar o perfil de trabalho, o DPC também pode provisionar uma conta do Google Play gerenciado para uso no dispositivo.

Este guia mostra como desenvolver um DPC capaz de criar e gerenciar perfis de trabalho.

Biblioteca de Suporte de DPC para EMMs

A Biblioteca de Suporte de DPC para EMMs é composta por classes de utilitários e auxiliares que facilitar o provisionamento e o gerenciamento de dispositivos Android nas empresas; de nuvem. A biblioteca permite que você aproveite recursos importantes do seu Apps de DPC:

  • Suporte ao provisionamento de contas do Google Play gerenciado: Provisionamento gerenciado As Contas do Google Play do app DPC exigem que o Google Play e o Google Os apps do Google Play Services atendem aos requisitos mínimos de versão. No entanto, atualizar e apps podem ser complexos. A biblioteca de suporte de DPC cuida da atualização desses e garante a compatibilidade com futuras atualizações da infraestrutura Processo de provisionamento de contas do Google Play. Consulte Contas do Google Play gerenciado suporte de provisionamento para mais detalhes.
  • Suporte a configurações gerenciadas: Usar a API Play EMM para lidar com configurações gerenciadas para apps aprovados é a maneira mais fácil de implementar configurações gerenciadas no DPC. O suporte de DPC A biblioteca permite delegar ao Google Play a tarefa de aplicar regras configurações (anteriormente, restrições de apps) definidas pelo administrador usando o EMM no console do Google Cloud. Usar a API Play EMM para lidar com configurações gerenciadas permite a configuração do app a ser aplicada atomicamente durante a instalação. Consulte Aplicar configurações gerenciadas para apps de trabalho para mais informações sobre como ativar esse recurso em ao seu DPC.

Siga as etapas abaixo para fazer o download da biblioteca. As tarefas detalhadas neste guia presumir o uso da Biblioteca de Suporte de DPC.

Fazer o download da Biblioteca de Suporte de DPC

Para usar a Biblioteca de Suporte de DPC, faça o download na comunidade do provedor de EMM do Android Enterprise. Você precisa adicionar a biblioteca ao seu arquivo build.gradle e cuidar dos demais dependências ao criar seu app de DPC. Por exemplo, a biblioteca requer a versão 11.4.0 Biblioteca de cliente de autenticação do Google Play Services.

  1. Adicione a biblioteca ao arquivo build.gradle:

    Groovy

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

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Adicionar 11.4.0 Biblioteca de cliente de autenticação do Google Play Services para o arquivo build.gradle:

    Groovy

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

    Kotlin

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

A biblioteca requer certas permissões para ser executada, portanto você deve adicioná-las ao o manifesto do seu app de DPC ao fazer upload para o 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"/>

Além dessas etapas preliminares de configuração e implantação, você também precisa inicializar a funcionalidade da biblioteca específica no código DPC, dependendo da recurso que você quer implementar. Os detalhes são incluídos nos campos seções abaixo.

Criar um DPC

Crie seu DPC no modelo atual usado para aplicativos de administração de dispositivos. Especificamente, o app precisa criar uma subclasse para DeviceAdminReceiver, que é uma classe da android.app.admin. ) conforme descrito nos Administração do dispositivo.

Criar um perfil de trabalho

Para ver um exemplo que demonstra como criar um perfil de trabalho básico, consulte BasicManagedProfile no GitHub.

Para criar um perfil de trabalho em um dispositivo que já tenha um perfil pessoal, faça o seguinte: descubra se o dispositivo é compatível com um perfil de trabalho, verificando o a existência do Recurso do sistema do FEATURE_MANAGED_USERS:

Kotlin

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

Java

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

Se o dispositivo permitir perfis de trabalho, crie um perfil de trabalho enviando uma intent com um ACTION_PROVISION_MANAGED_PROFILE à ação. Em algumas documentações, o perfil gerenciado é um termo geral que significa o mesmo que perfil de trabalho no contexto do Android na empresa.) Inclua o nome do pacote de administração de dispositivos como um extra:

Kotlin

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()
}

Java

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();
}

O sistema responde a essa intent da seguinte forma:

  • Verifica se o dispositivo está criptografado. Se não estiver, o sistema solicitará criptografe o dispositivo antes de continuar.
  • Cria um perfil de trabalho.
  • Remove aplicativos não obrigatórios do perfil de trabalho.
  • Copia o app do DPC para o perfil de trabalho e define o próprio DPC como o proprietário do perfil.

Substituir onActivityResult() por Veja se o provisionamento foi concluído:

Kotlin

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

Java

@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);
    }
}

Concluir a ativação do perfil de trabalho

Quando o perfil é provisionado, o sistema chama o DPC método DeviceAdminReceiver.onProfileProvisioningComplete() do app. Substituir esse método de callback para concluir a ativação do perfil de trabalho.

DeviceAdminReceiver.onProfileProvisioningComplete() típica implementação de callback faz o seguinte:

Ativar o perfil de trabalho

Depois de concluir essas tarefas, chame o método Método setProfileEnabled() para ativar o perfil de trabalho:

Kotlin

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

Java

// 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);

Configurar políticas do dispositivo

O app DPC aplica as políticas do dispositivo conforme definido pelo administrador para atender a uma os requisitos e as restrições da organização. Por exemplo, a política de segurança pode exigem que os dispositivos sejam bloqueados depois de um certo número de tentativas de senha. O DPC consulta as políticas atuais no console de EMM e as aplica usando o dispositivo Administration (link em inglês).

Para informações sobre como aplicar políticas de dispositivo, consulte Políticas.

Aplicar configurações gerenciadas para os apps de trabalho

Com as configurações gerenciadas, seus clientes podem fazer o seguinte: pré-configurar os aplicativos aprovados para implantação e atualizá-los facilmente quando a configuração precisar mudar. Configurar um app implantação garante que a segurança da organização e outras políticas sejam atendidas após a instalação do app no dispositivo de destino.

Os recursos do app são definidos pelo desenvolvedor em um esquema XML (o esquema de configurações gerenciadas) que acompanha o app no upload para o Google. Play (desenvolvedores de apps, consultem os detalhes em Definir configurações gerenciadas).

Recupere esse esquema do app para exibir aos administradores do cliente no console de EMM, forneça uma interface em que as várias opções definidas exibição de esquema e permitir que os administradores pré-definam as configurações do app. A configuração gerenciada resultante definida pelo administrador geralmente é no servidor de EMM, que usa os Play EMM API para definir Managedconfigurationsfordevice (link em inglês) ou Managedconfigurationsforuser. Consulte Configurações gerenciadas no Google Play para saber mais detalhes.

As configurações gerenciadas podem ser aplicadas ao app usando a API Play EMM (abordagem recomendada) ou diretamente do DPC (descrito em Aplicar configurações gerenciadas) diretamente do DPC). Como usar a API Play EMM tem várias vantagens, incluindo a fácil implementação, porque você pode usar o Biblioteca de Suporte de DPC para simplificar as tarefas de DPC. Além disso, a API Play EMM:

  • Define a configuração atomicamente quando um novo app é instalado, garantindo que ele esteja pronto na primeira vez que o usuário o iniciar.
  • Permite que você gerencie as configurações por usuário para evitar o monitoramento do provisionamento por dispositivo.

Aplique as configurações gerenciadas usando o API Play EMM

Para usar a API Play EMM em configurações gerenciadas, o DPC precisa permitir que o Google Play para definir as configurações. A Biblioteca de Suporte de DPC cuida disso para você usando o proxy da configuração enviada pelo Google Play.

Para usar o Play EMM, faça o download da Biblioteca de Suporte de DPC e ativar o suporte a configurações gerenciadas no DPC.

Ativar o suporte a configurações gerenciadas em seu DPC

Importe essa classe no seu DPC:

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

Inicializar a biblioteca de configurações gerenciadas. Neste exemplo, "admin" é o ComponentName do DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Ative as configurações gerenciadas:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Com essa biblioteca inicializada no DPC, é possível usar o API Google Play EMM no seu EMM console e servidor para aplicar configurações gerenciadas a apps aprovados, em vez de com a codificação dessas tarefas diretamente no DPC. Consulte Configurações gerenciadas pelo Google Play para mais detalhes.

Aplicar configurações gerenciadas diretamente do DPC

Para alterar as definições de configuração de um app diretamente no DPC, chame o método Método DevicePolicyManager.setApplicationRestrictions() e passar parâmetros para o código do app de DPC DeviceAdminReceiver, o nome do pacote do app de destino, e o pacote que consiste em pela configuração gerenciada do app definida pelo administrador. Consulte Como Os consoles de DPC e EMM interagem e Definir configurações gerenciadas para mais detalhes. No entanto, essa abordagem alternativa à aplicação não é recomendada em implantações de contas do Google Play gerenciado.

Provisionamento de conta do Google Play gerenciado apoiar

A Biblioteca de Suporte de DPC inclui suporte para provisionamento contas do Google Play gerenciado. Para usar esse suporte, é necessário inicializar o biblioteca e poderá garantir a ambiente de trabalho e Adicionar um conta do Google Play gerenciado.

Inicializar contas do Google Play gerenciado no DPC

Importe essa classe no seu DPC:

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

Inicializar a biblioteca de compatibilidade de provisionamento. Neste exemplo, “admin” é a ComponentName do DeviceAdminReceiver.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Garantir o ambiente de trabalho para contas do Google Play gerenciado

Depois que o DPC provisionar um dispositivo no modo de proprietário do perfil (ACTION_PROVISION_MANAGED_PROFILE) ou modo proprietário (ACTION_PROVISION_MANAGED_DEVICE), verifique se o dispositivo é compatível com contas do Google Play gerenciado chamando:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

O callback informa o sucesso ou a falha desse processo. Quando a chamada de retorno retornar, uma conta do Google Play gerenciado poderá ser adicionada. Se o retorno de chamada relatar um erro, solicite que o usuário verifique se o tem uma conexão de rede (por exemplo, se o download falhar). Em outras casos, avise o Google sobre a falha.

Kotlin

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

Java

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

Adicionar uma conta do Google Play gerenciado

O AccountManager do framework do Android podem adicionar uma conta do Google Play gerenciado a um dispositivo. Para simplificar a interação com AccountManager, use a função auxiliar (mostrada no exemplo abaixo) da Biblioteca de Suporte de DPC. A função processa o token retornado pelo servidor do Google Play e facilita o provisionamento. a conta do Google Play gerenciado. A função retorna quando o Google Play gerenciado A conta está em um estado válido:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token: o token de autenticação do usuário gerado pelo serviço Reproduzir chamada Users.generateAuthenticationToken() da API EMM.
  • accountAddedCallback: retorna a conta do Google Play gerenciado que foi adicionado ao dispositivo. Esse callback precisa incluir métodos onAccountReady() e onFailure().

Kotlin

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).
    }
}

Java

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).
        }
};
  • Para saber mais sobre a API Device Administration, consulte Dispositivo Administração.
  • Para saber mais sobre os métodos de provisionamento do Android Enterprise, consulte Provisionar dispositivos na Guia do desenvolvedor do Android Enterprise.
  • Para um exemplo no GitHub que demonstra como criar um perfil de trabalho básico, consulte BasicManagedProfile.
  • Para um exemplo do GitHub que demonstra como definir configurações em outros aplicativos como um proprietário do perfil, consulte AppRestrictionEnforcer.