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.
- Adicione a biblioteca ao arquivo
build.gradle
:
Groovy
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- 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:
- Verifica se o dispositivo está em compliance com as políticas do dispositivo do EMM, conforme descrito em Configurar políticas de dispositivo.
- Ativa os aplicativos do sistema criados pelo administrador
disponíveis no perfil de trabalho usando
DevicePolicyManager.enableSystemApp()
. - Se o dispositivo usar o Google Play gerenciado, adiciona a conta apropriada ao
o perfil de trabalho para que apps aprovados possam ser instalados no dispositivo.
- Contas do Google Play gerenciado: consulte Garantir o funcionamento ambiente para contas do Google Play gerenciado e Adicionar uma conta do Google Play gerenciado para mais detalhes.
- Contas do Google: use
AccountManager.addAccount()
.
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 chamadaUsers.generateAuthenticationToken()
da API EMM.accountAddedCallback
: retorna a conta do Google Play gerenciado que foi adicionado ao dispositivo. Esse callback precisa incluir métodosonAccountReady()
eonFailure()
.
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). } };
Documentação relacionada
- 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.