Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SDK do aplicativo do Microsoft Intune para Android permite incorporar políticas de proteção do aplicativo do Intune (também conhecidas como políticas de MAM) em seu aplicativo nativo Java/Kotlin para Android. Um aplicativo gerenciado do Intune se integra ao SDK do Aplicativo do Intune. Os administradores do Intune podem facilmente implantar políticas de proteção de aplicativo em seu aplicativo gerenciado pelo Intune quando o Intune gerencia ativamente o aplicativo.
Observação
Este guia é dividido em várias etapas distintas. Comece revisando Planeje a integração.
Etapa 7: Recursos de participação no aplicativo
Objetivos do Estágio
- Saiba mais sobre os recursos de participação no aplicativo oferecidos pelo SDK do Aplicativo do Intune.
- Integre recursos de participação no aplicativo relevantes para seu aplicativo e usuários.
- Teste a integração desses recursos.
O que são os "Recursos de Participação no Aplicativo"?
Esse processo de integração do SDK tenta minimizar a quantidade de código específico do aplicativo que os desenvolvedores precisam escrever. Ao concluir com êxito os estágios anteriores da integração do SDK, seu aplicativo agora impõe a maioria das configurações de política de proteção do aplicativo, como criptografia de arquivo, restrições de copiar/colar, bloqueio de captura de tela e restrições de transferência de dados.
No entanto, algumas configurações exigem código específico do aplicativo para serem aplicadas corretamente; Essas configurações são chamadas de recursos de participação no aplicativo. Normalmente, o SDK não tem contexto suficiente sobre o código do aplicativo ou o cenário do usuário final para impor automaticamente essas configurações e, portanto, depende dos desenvolvedores para chamar as APIs do SDK adequadamente.
Os recursos de participação no aplicativo não são necessariamente opcionais. Dependendo dos recursos existentes do seu aplicativo, esses recursos podem ser necessários. Consulte Principais decisões para integração do SDK para obter detalhes.
As etapas anteriores deste guia já descrevem vários recursos de participação no aplicativo:
- Várias identidades, conforme abordado no Estágio 5: Identidades Múltiplas.
- Configuração do aplicativo, conforme abordado no Estágio 6: Configuração de Aplicativos.
O restante deste guia descreve o conjunto restante de recursos de participação no aplicativo:
- Aplicar política que restringe o salvamento de arquivos ou a abertura de arquivos do armazenamento local ou em nuvem.
- Impor política que restrinja o conteúdo em notificações.
- Impor política que protege os dados de backup.
- Impor política que restrinja a captura de tela (se o aplicativo tiver um código de captura de tela personalizado).
- Suporte à AC de Proteção de Aplicativo.
- Registre-se para receber notificações do SDK.
- Aplicar temas de aplicativo personalizados.
- Use certificados confiáveis do Intune, garantindo a cadeia de confiança para pontos de extremidade locais.
Participação no aplicativo Noções básicas de recursos
A interface AppPolicy contém muitos métodos que informam ao seu aplicativo se determinadas ações são permitidas.
A maioria dos recursos de participação em aplicativos envolve:
- Identificar o lugar certo no código do aplicativo para marcar se uma ação é permitida.
- Chamar um
AppPolicymétodo para marcar se uma ação é permitida, com base na política configurada no momento. - Dependendo do resultado, permitindo que a ação seja concluída ou modificando o comportamento do aplicativo quando a ação for bloqueada.
Para recuperar uma AppPolicy instância, use um dos métodos MAMPolicyManager , como getPolicy(final Context context) ou getPolicyForIdentityOID(final String oid).
Métodos informativos em AppPolicy
Nem todos os métodos AppPolicy estão vinculados a um recurso de participação do aplicativo.
Alguns métodos são informativos e fornecem ao aplicativo dados sobre quais políticas estão configuradas no momento, mesmo que essas políticas sejam impostas automaticamente pelo SDK.
Esses métodos existem para dar ao seu aplicativo oportunidades de apresentar experiências de usuário personalizadas quando políticas específicas são configuradas.
Exemplo: determinar se as capturas de tela estão bloqueadas
Se o aplicativo tiver um controle que permita que o usuário faça uma captura de tela, considere desabilitar ou ocultar esse controle se a Política de Proteção do Aplicativo bloquear capturas de tela.
O aplicativo pode marcar chamando MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().
Política para limitar a transferência de dados entre aplicativos e dispositivos ou locais de armazenamento em nuvem
Muitos aplicativos permitem que o usuário final salve dados ou abra dados de serviços locais de armazenamento de arquivos ou armazenamento em nuvem. O SDK do aplicativo do Intune permite que os administradores de TI protejam contra entrada e vazamento de dados, restringindo onde os aplicativos podem salvar e abrir dados.
Observação
Se o seu aplicativo permitir salvar em locais pessoais ou na nuvem diretamente do aplicativo ou permitir que os dados sejam abertos diretamente no aplicativo, você deverá implementar esse recurso de participação no aplicativo SDK do Aplicativo do Intune** para permitir que os administradores de TI bloqueiem o salvamento e a abertura.
Salvando no dispositivo ou no armazenamento em nuvem
A getIsSaveToLocationAllowedForOID API permite que o aplicativo saiba se o salvamento em determinados locais é permitido para uma determinada identidade, com base na política configurada:
MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);
Para determinar se o aplicativo deve implementar a getIsSaveToLocationAllowedForOID marca, determine se o aplicativo dá suporte à saída de dados examinando a seguinte tabela:
service Parâmetro: SaveLocation Valor de enumeração |
Caso de uso | OID associado |
|---|---|---|
ONEDRIVE |
O aplicativo está salvando dados no OneDrive. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
SHAREPOINT |
O aplicativo está salvando dados no SharePoint. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
BOX |
O aplicativo está salvando dados no Box. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
LOCAL |
O aplicativo está salvando dados em um local de armazenamento externo no dispositivo que não é o armazenamento privado do aplicativo. | Esse local de armazenamento não é considerado um serviço de nuvem e sempre deve ser usado com um null parâmetro OID. |
PHOTO_LIBRARY |
O aplicativo está salvando dados no armazenamento local de fotos do Android. | O armazenamento local de fotos não é considerado um serviço de nuvem e sempre deve ser usado com um null parâmetro OID. |
IMANAGE |
O aplicativo está salvando dados no iManage. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
EGNYTE |
O aplicativo está salvando dados no Egnyte. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
ACCOUNT_DOCUMENT |
O aplicativo está salvando dados em um local associado a uma conta dentro do aplicativo e não é um dos locais de nuvem específicos nesta tabela. Use esse local para determinar se os dados podem ser transmitidos entre contas em um aplicativo de várias identidades. |
Um OID de uma conta usada para autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
OTHER |
O aplicativo está salvando dados em um local não especificado nesta tabela e que não atende aos critérios para ACCOUNT_DOCUMENT. |
O oid não é avaliado para este local e deveria ser null. |
Files colocados no armazenamento de aplicativos privados que são necessários para a operação do aplicativo ou baixados temporariamente para exibição são sempre permitidos; não é necessário marcar getIsSaveToLocationAllowedForOID.
Fazer para marcar SaveLocation.LOCAL
- Files saved outside private app storage.
- Files baixados no armazenamento de aplicativos privados que não são necessários para a operação do aplicativo (por exemplo, quando o usuário escolhe explicitamente fazer o download no dispositivo).
Observação
Ao verificar a política de salvamento, oid deve ser o OID da conta associada ao serviço de nuvem que está sendo salvo (essa conta não é necessariamente a mesma que a conta proprietária do documento que está sendo salvo).
Abrindo dados de um local de armazenamento local ou em nuvem
A getIsOpenFromLocationAllowedForOID API permite que o aplicativo saiba se a abertura de determinados locais é permitida para uma determinada identidade, com base na política configurada:
MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);
Para determinar se o aplicativo deve implementar a getIsOpenFromLocationAllowedForOID marca, determine se o aplicativo dá suporte à entrada de dados examinando a seguinte tabela:
location Parâmetro: OpenLocation Valor de enumeração |
Caso de uso | OID associado |
|---|---|---|
ONEDRIVE_FOR_BUSINESS |
O aplicativo está abrindo dados do OneDrive. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
SHAREPOINT |
O aplicativo está abrindo dados do SharePoint. | Um OID para uma conta que é usada para autenticação de serviço de nuvem e autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
CAMERA |
O aplicativo está abrindo dados da câmera do dispositivo. | Um null valor, pois a câmera do dispositivo não é um serviço de nuvem. |
LOCAL |
O aplicativo está abrindo dados de um local de armazenamento externo no dispositivo que não é o armazenamento privado do aplicativo. | Embora o armazenamento externo não seja um serviço de nuvem, um oid parâmetro é esperado porque indica propriedade.* Para arquivos marcados com identidade: oid deve ser a identidade do proprietário do arquivo.* Para arquivos sem uma marca de identidade: oid deveria ser null. |
PHOTO_LIBRARY |
O aplicativo está abrindo dados do armazenamento local de fotos do Android. | O armazenamento local de fotos não é considerado um serviço de nuvem e sempre deve ser usado com um null parâmetro OID. |
ACCOUNT_DOCUMENT |
O aplicativo está abrindo dados de um local associado a uma conta dentro do aplicativo e não é um dos locais de nuvem específicos nesta tabela. Use esse local para determinar se os dados podem ser transmitidos entre contas em um aplicativo de várias identidades. |
Um OID de uma conta usada para autenticação do Microsoft Entra. Se essa conta não existir ou o OID não for conhecido, use null. |
OTHER |
O aplicativo está abrindo dados de um local não especificado nesta tabela e que não atende aos critérios para ACCOUNT_DOCUMENT. |
O oid não é avaliado para este local e deveria ser null. |
Observação
Quando você marca a política aberta, oid deve ser o OID da conta associada ao arquivo ou serviço de nuvem que está sendo aberto (não necessariamente o mesmo que a conta que está abrindo o documento).
Dica
Por conveniência, o SDK fornece o método AppPolicy.isOpenFromLocalStorageAllowed que usa um File parâmetro para um arquivo no armazenamento local.
Para a imposição de política, esse método é funcionalmente idêntico à chamada AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) , exceto que lida com a análise do proprietário do oid arquivo do File.
Compartilhamento de diálogo bloqueado
O SDK fornece uma caixa de diálogo para notificar o usuário quando a política de MAM bloqueia uma ação de transferência de dados.
A caixa de diálogo deve ser exibida para o usuário sempre que a chamada de getIsSaveToLocationAllowedForOID API ou getIsOpenFromLocationAllowedForOID resultar no bloqueio da ação salvar/abrir.
A caixa de diálogo exibe uma mensagem genérica e retorna à chamada Activity quando ignorada.
Para exibir a caixa de diálogo, adicione o seguinte código:
MAMUIHelper.showSharingBlockedDialog(currentActivity)
Permitir compartilhamento de arquivos
Se não for permitido salvar em locais de armazenamento público, seu aplicativo ainda deve permitir que o usuário exiba arquivos baixando-os para o armazenamento privado do aplicativo e, em seguida, abrindo-os com o seletor de sistema.
Política para restringir conteúdo dentro de notificações
Para aplicativos de identidade única, o comportamento padrão do SDK do Aplicativo do Intune tenta bloquear todas as notificações quando a Política de Proteção do Aplicativo restringe notificações.
O comportamento padrão do SDK é limitado. O SDK não pode honrar automaticamente o valor "Bloquear dados da organização", que se destina a remover apenas o conteúdo gerenciado das notificações. Para aplicativos com várias identidades, o SDK não pode determinar quais notificações contêm conteúdo gerenciado.
Se o aplicativo exibir notificações e tiver várias identidades e/ou precisar honrar o valor "Bloquear dados da organização", ele deverá marcar a política de restrição de notificação da conta associada à notificação antes de mostrar a notificação.
Para determinar se a política é imposta, faça a seguinte chamada:
NotificationRestriction notificationRestriction =
MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();
A enumeração retornada NotificationRestriction tem os seguintes valores:
NotificationRestriction Enumeração |
Comportamento esperado do aplicativo |
|---|---|
BLOCKED |
O aplicativo não deve mostrar nenhuma notificação para a conta associada a essa política. Para aplicativos de identidade única, o SDK do aplicativo do Intune bloqueia todas as notificações automaticamente e nenhum código extra é necessário. |
BLOCK_ORG_DATA |
O aplicativo deve mostrar uma notificação modificada que não contenha dados da organização. |
UNRESTRICTED |
O aplicativo deve mostrar todas as notificações. |
Se o aplicativo não invocar getNotificationRestrictioncorretamente, o MAM SDK fará um esforço melhor para restringir as notificações automaticamente apenas para aplicativos de identidade única.
Nesse caso, BLOCK_ORG_DATA é tratado da mesma forma que BLOCKED e a notificação não é mostrada.
Para um controle mais refinado, marque o valor e modifique as notificações de getNotificationRestriction aplicativos adequadamente.
Política para proteger dados de backup
O SDK do aplicativo do Intune pode bloquear o upload de dados para o recurso interno de backup e restauração do Android. Para obter mais informações sobre backup e restauração no Android, consulte o guia da API do Android e as alterações introduzidas no Android S/12 em Alterar para backup e restauração.
Backup Automático para Aplicativos
A partir do Android M, o Android fornece backups completos automáticos para o Google Drive para aplicativos, independentemente da API de destino do aplicativo.
O Intune permite que você use todos os recursos de backup automático que o Android oferece, incluindo a capacidade de definir regras personalizadas em XML, com diretrizes de integração específicas do Intune para garantir que a proteção de dados se aplica.
Configurar o comportamento de backup no manifesto do aplicativo
Por padrão, é definido como verdadeiro, android:allowBackup conforme descrito em habilitar e desabilitar o backup.
Se o aplicativo não exigir a funcionalidade completa de backup e restauração, defina android:allowBackup como false.
Nesse caso, nenhuma ação adicional é necessária e os dados corporativos permanecem dentro do aplicativo.
Se o aplicativo exigir a funcionalidade completa de backup e restauração, defina android:allowBackup como true e execute as seguintes etapas:
Se o aplicativo não usar seu próprio personalizado
BackupAgent, use o MAMBackupAgent padrão para habilitar backups completos automáticos em conformidade com a política do Intune. Coloque o seguinte no manifesto do aplicativo:<application ... android:fullBackupOnly="true" android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent" ...> </application>Opcional. Se você implementar um personalizado
BackupAgent, deverá usar MAMBackupAgent ou MAMBackupAgentHelper. Consulte as seções a seguir. Considere mudar para o MAMDefaultBackupAgent do Intune, descrito na etapa 1, que fornece backup fácil no Android M e posterior.Quando você decidir qual tipo de backup completo seu aplicativo deve receber (não filtrado, filtrado ou nenhum), defina o atributo
android:fullBackupContentcomotrue,falseou um recurso XML em seu aplicativo.Em seguida, você deve copiar o valor para
android:fullBackupContentacom.microsoft.intune.mam.FullBackupContentmarca de metadados e, para aplicativos que dão suporte ao formato de configuração XML adicionado na API 31, para acom.microsoft.intune.mam.DataExtractionRulesmarca de metadados.Exemplo 1: se você quiser que seu aplicativo tenha backups completos sem exclusões, deverá definir os atributos e as marcas de metadados como true:
<application ... android:fullBackupContent="true" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />Exemplo 2: se você quiser que seu aplicativo use seu personalizado
BackupAgente recuse backups automáticos completos e em conformidade com a política do Intune, deverá definir os atributos e as marcas de metadados como falsos:<application ... android:fullBackupContent="false" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />Exemplo 3: se você quiser que seu aplicativo tenha backups completos de acordo com suas regras personalizadas definidas em um arquivo XML, defina o atributo e a marca de metadados para o mesmo recurso XML:
<application ... android:fullBackupContent="@xml/my_full_backup_content_scheme" android:dataExtractionRules="@xml/my_data_extraction_rules_scheme" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
Backup de chave/valor
A opção de Backup de Chave/Valor está disponível para todas as APIs 8+ e carrega dados do aplicativo para o Serviço de Backup do Android. A quantidade de dados por aplicativo é limitada a 5 MB. Se você usar o Backup de Chave/Valor, deverá usar um BackupAgentHelper ou um BackupAgent.
BackupAgentHelper
O BackupAgentHelper é mais fácil de implementar do que o BackupAgent em termos de funcionalidade nativa do Android e integração do Intune MAM.
O BackupAgentHelper permite que o desenvolvedor registre arquivos inteiros e preferências compartilhadas em um FileBackupHelper e SharedPreferencesBackupHelper (respectivamente) que são adicionados ao BackupAgentHelper após a criação.
Siga estas etapas para usar um BackupAgentHelper com o Intune MAM:
Para usar o backup de várias identidades com um
BackupAgentHelper, siga o guia do Android para estender o BackupAgentHelper.Faça com que sua classe estenda o equivalente MAM de BackupAgentHelper, FileBackupHelper e SharedPreferencesBackupHelper.
| Classe Android | Equivalente MAM |
|---|---|
BackupAgentHelper |
MAMBackupAgentHelper |
FileBackupHelper |
MAMFileBackupHelper |
SharedPreferencesBackupHelper |
MAMSharedPreferencesBackupHelper |
Seguir essas diretrizes permite realizar backup e restauração de várias identidades com êxito.
Agente de backup
Um BackupAgent permite que você seja muito mais explícito sobre quais dados são copiados. Como o desenvolvedor é responsável pela implementação, mais etapas são necessárias para garantir a proteção de dados apropriada do Intune. Como a maior parte do trabalho depende de você como desenvolvedor, a integração do Intune é um pouco mais complexa.
Integre o MAM:
Leia atentamente o guia do Android para backup de chave/valor e, especificamente, Estendendo o BackupAgent para garantir que a implementação do BackupAgent siga as diretrizes do Android.
Faça com que sua classe estenda MAMBackupAgent.
Backup de várias identidades:
Antes de iniciar o backup, Marque se os arquivos ou buffers de dados que você planeja fazer backup são permitidos pelo administrador de TI para backup em cenários de várias identidades. Use
isBackupAllowedem MAMFileProtectionManager e MAMDataProtectionManager para determinar esse comportamento. Se o arquivo ou o buffer de dados não tiver permissão para ser copiado, você não deverá incluí-lo em seu backup.Em algum momento durante o backup, se quiser fazer backup das identidades dos arquivos verificados na etapa 1, você deverá chamar
backupMAMFileIdentity(BackupDataOutput data, File … files)com os arquivos dos quais planeja extrair dados. Esse método cria automaticamente novas entidades de backup e as grava noBackupDataOutputpara você. Essas entidades são consumidas automaticamente na restauração.
Restauração de várias identidades: O guia Data Backup especifica um algoritmo geral para restaurar os dados do aplicativo e fornece uma amostra de código na seção Estendendo o BackupAgent . Para executar uma restauração de várias identidades bem-sucedida, você deve seguir a estrutura geral fornecida neste exemplo de código, com atenção especial aos seguintes pontos:
Você deve usar um
while(data.readNextHeader())loop * para percorrer as entidades de backup.Você deverá pagar
data.skipEntityData()sedata.getKey()não corresponder à chave que você escreveu emonBackup. Sem esta etapa, suas restaurações podem não ter sucesso.Evite retornar ao consumir entidades de backup no constructo *, pois todas as
while(data.readNextHeader())entidades que gravamos automaticamente são perdidas nesse caso.
- Onde
dataestá o nome da variável local para o MAMBackupDataInput que o aplicativo recebe na restauração.
Restrições de Captura de Tela Personalizadas
Se o seu aplicativo contiver um recurso de captura de tela personalizado que ignore a Windowrestrição no nível FLAG_SECURE do Android, você deverá marcar a política de captura de tela antes de permitir o acesso total ao recurso.
Por exemplo, se o aplicativo usa um mecanismo de renderização personalizado para renderizar a exibição atual em um arquivo PNG, primeiro você deve marcar AppPolicy.getIsScreenCaptureAllowed().
Observação
Se o aplicativo não contiver recursos de captura de tela personalizados ou que não sejam da Microsoft, nenhuma ação será necessária para restringir as capturas de tela.
A política de captura de tela é imposta automaticamente no nível para todos os aplicativos integrados ao Window MAM.
Quaisquer tentativas do sistema operacional ou de outro aplicativo de capturar um Window em seu aplicativo são bloqueadas conforme necessário.
Por exemplo, se um usuário tentar capturar a tela do seu aplicativo por meio dos recursos integrados de captura de tela ou gravação de tela do Android, a captura será automaticamente restrita sem a participação do seu aplicativo.
Suporte da AC de Proteção do Aplicativo
A CA de Proteção de Aplicativo (Acesso Condicional), também conhecida como CA baseada em aplicativo, restringe o acesso aos recursos. As Políticas de Proteção do Aplicativo do Intune devem gerenciar seu aplicativo antes que ele possa acessar esses recursos. O Microsoft Entra ID impõe essa política exigindo que o aplicativo se registre e seja gerenciado pelas Políticas de Proteção de Aplicativo do Intune antes de conceder um token para acessar um recurso protegido por Acesso Condicional.
Observação
O suporte da CA de Proteção de Aplicativo requer a MSAL (Biblioteca de Autenticação da Microsoft) versão 1.0.0 ou posterior.
Lidar com a não conformidade com a MSAL
Quando o aplicativo adquire um token para uma conta, a biblioteca MSAL pode retornar ou lançar um MsalIntuneAppProtectionPolicyRequiredException para indicar a não conformidade com o gerenciamento da política de proteção do aplicativo.
Você pode extrair mais parâmetros da exceção para uso na correção da conformidade (consulte MAMComplianceManager).
Após a correção ser bem-sucedida, o aplicativo poderá tentar a aquisição do token novamente por meio da MSAL.
MAMComplianceManager
A interface MAMComplianceManager é usada quando o erro de política necessária é recebido da MSAL.
Ele contém o método [remediateCompliance] que você deve chamar para tentar colocar o aplicativo em um estado compatível.
Você pode obter uma referência ao MAMComplianceManager seguinte:
MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);
// make use of mgr
É garantido que a MAMComplianceManager instância retornada não seja null.
package com.microsoft.intune.mam.policy;
public interface MAMComplianceManager {
void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}
O remediateCompliance() método tenta colocar o aplicativo sob gerenciamento para satisfazer as condições para que o Microsoft Entra ID conceda o token solicitado.
Os primeiros quatro parâmetros podem ser extraídos da exceção que o método MSAL AuthenticationCallback.onError() recebe.
O parâmetro final é um booliano que controla se uma experiência do usuário aparece durante a tentativa de conformidade.
remediateCompliance Exibe uma caixa de diálogo de progresso de bloqueio simples para que os aplicativos não precisem mostrar experiências personalizadas durante essa operação.
Essa caixa de diálogo aparece somente enquanto a correção de conformidade está em andamento. Ele não exibe o resultado final.
Seu aplicativo pode registrar um destinatário para a COMPLIANCE_STATUS notificação para lidar com o sucesso ou falha da tentativa de correção de conformidade.
Consulte Notificações de status de conformidade para obter mais detalhes.
remediateCompliance() pode iniciar um registro de MAM como parte do estabelecimento de conformidade.
O aplicativo poderá receber uma notificação de registro se tiver registrado um receptor de notificação para notificações de registro.
O registro MAMServiceAuthenticationCallback do aplicativo tem seu acquireToken() método chamado para obter um token para o registro.
acquireToken() é chamada antes que o aplicativo adquira seu próprio token. Quaisquer tarefas de contabilidade ou criação de contas que o aplicativo executa após uma aquisição bem-sucedida de token podem não ter sido feitas ainda.
O retorno de chamada deve ser capaz de adquirir um token nesse caso.
Se você não puder retornar um token de , a tentativa de acquireToken()correção de conformidade falhará.
Se você chamar updateToken mais tarde com um token válido para o recurso solicitado, a correção de conformidade será retomada imediatamente com o token fornecido.
Observação
A aquisição silenciosa de token ainda é possível acquireToken() porque o usuário já foi orientado a instalar o agente e registrar o dispositivo antes que a MsalIntuneAppProtectionPolicyRequiredException exceção ocorra.
Esse processo faz com que o agente tenha um token de atualização válido em seu cache, o que permite que o agente adquira o token solicitado silenciosamente.
Aqui está um exemplo que recebe o erro de política exigida AuthenticationCallback.onError() no método e chama o MAMComplianceManager para lidar com o erro.
public void onError(@Nullable MsalException exc) {
if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {
final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
(MsalIntuneAppProtectionPolicyRequiredException) ex;
final String upn = policyRequiredException.getAccountUpn();
final String aadId = policyRequiredException.getAccountUserId();
final String tenantId = policyRequiredException.getTenantId();
final String authority = policyRequiredException.getAuthorityURL();
MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
}
}
Notificações de status de conformidade
Se o aplicativo se registrar para notificações do tipo COMPLIANCE_STATUS, o sistema enviará um MAMComplianceNotification para informar o aplicativo sobre o status final da tentativa de correção de conformidade.
Consulte Registrar-se para notificações do SDK para obter detalhes sobre como se registrar.
public interface MAMComplianceNotification extends MAMUserNotification {
MAMCAComplianceStatus getComplianceStatus();
String getComplianceErrorTitle();
String getComplianceErrorMessage();
}
O getComplianceStatus() método retorna o resultado da tentativa de correção de conformidade como um valor da enumeração [MAMCAComplianceStatus].
| Código de status | Explicação |
|---|---|
UNKNOWN |
O status é desconhecido. Esse status pode indicar um motivo de falha inesperado. Mais informações podem ser encontradas nos logs do Portal da Empresa. |
COMPLIANT |
Correção de conformidade bem-sucedida e o aplicativo agora está em conformidade com a política. A aquisição do token MSAL deve ser tentada novamente. |
NOT_COMPLIANT |
A tentativa de corrigir a conformidade falhou. O aplicativo não está em conformidade e a aquisição de token MSAL não deve ser repetida até que a condição de erro seja corrigida. Inclui MAMComplianceNotification informações de erro adicionais. |
SERVICE_FAILURE |
Ocorreu uma falha ao tentar recuperar dados de conformidade do serviço do Intune. Mais informações podem ser encontradas nos logs do Portal da Empresa. |
NETWORK_FAILURE |
Ocorreu um erro ao conectar-se ao serviço do Intune. O aplicativo deverá repetir a aquisição de token quando a conexão de rede for restaurada. |
CLIENT_ERROR |
A tentativa de corrigir a conformidade falhou devido a um problema relacionado ao cliente, como token de usuário ausente ou incorreto. Inclui MAMComplianceNotification mais informações de erro. |
PENDING |
A tentativa de corrigir a conformidade falha porque o serviço não envia a resposta de status antes que o limite de tempo expire. O aplicativo deve tentar a aquisição de token novamente mais tarde. |
COMPANY_PORTAL_REQUIRED |
O Portal da Empresa deve ser instalado no dispositivo para que a correção de conformidade seja bem-sucedida. Se ele já estiver instalado, o aplicativo deverá ser reiniciado. Uma caixa de diálogo solicita que o usuário reinicie o aplicativo. |
Se o status de conformidade for MAMCAComplianceStatus.COMPLIANT, o aplicativo deverá reiniciar a aquisição de token original (para seu próprio recurso).
Se a tentativa de correção de conformidade falhar, os getComplianceErrorTitle() métodos and getComplianceErrorMessage() retornarão cadeias de caracteres localizadas que o aplicativo poderá exibir para o usuário final, se desejar.
O aplicativo não pode resolver a maioria dos casos de erro. Em geral, falhe na criação ou entrada da conta e permita que o usuário tente novamente mais tarde.
Se uma falha persistir, os logs do Portal da Empresa poderão ajudar a determinar a causa. O usuário final pode enviar os logs. Para obter mais informações, consulte Logs de upload e email.
Aqui está um exemplo de registro de um receptor usando uma classe anônima para implementar a interface MAMNotificationReceiver:
final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
public boolean onReceive(MAMNotification notification) {
if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
// take appropriate action based on complianceNotification.getComplianceStatus()
// unregister this receiver if no longer needed
notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
}
return true;
}
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);
Observação
Você deve registrar o receptor de notificação antes de ligar remediateCompliance() para evitar uma condição de corrida que pode resultar na perda da notificação.
Declarando suporte para a Autoridade de Certificação de Proteção de Aplicativos
Depois que seu aplicativo estiver pronto para lidar com a correção da CA de aplicativo, você poderá dizer à Microsoft Identity que seu aplicativo está pronto para a CA de aplicativo. Para fazer isso no aplicativo MSAL, crie o Cliente Público com os Recursos de Cliente do "protapp"
{
"client_id" : "[YOUR_CLIENT_ID]",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "[YOUR_REDIRECT_URI]",
"multiple_clouds_supported":true,
"broker_redirect_uri_registered": true,
"account_mode": "MULTIPLE",
"client_capabilities": "protapp",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount"
}
}
]
}
Depois que as etapas forem concluídas, prossiga para a Validação da AC de Proteção do Aplicativo.
Notas de implementação
Observação
O método do MAMServiceAuthenticationCallback.acquireToken() aplicativo deve passar false para que o forceRefresh sinalizador .acquireTokenSilentAsync()
AcquireTokenSilentParameters acquireTokenSilentParameters =
builder.withScopes(Arrays.asList(scopes))
.forceRefresh(false)
.build();
acquireTokenSilentAsync(acquireTokenSilentParameters);
Observação
Se você quiser mostrar uma experiência de usuário de bloqueio personalizada durante a tentativa de correção, deverá passar false para o parâmetro showUX para remediateCompliance().
Você deve mostrar sua experiência do usuário e registrar seu ouvinte de notificação antes de ligar remediateCompliance().
Isso evita uma condição de corrida em que a notificação pode ser perdida se remediateCompliance() falhar rapidamente.
Por exemplo, o onCreate() método ou onMAMCreate() de uma subclasse Activity é o local ideal para registrar o ouvinte de notificação e chamar remediateCompliance().
Os parâmetros para remediateCompliance() podem ser passados para sua experiência do usuário como extras de Intenção.
Quando a notificação de status de conformidade for recebida, você poderá exibir o resultado ou concluir a atividade.
Observação
remediateCompliance() Registra a conta e tenta o registro. Depois que o token principal é adquirido, a chamada registerAccountForMAM() não é necessária, mas não há mal nenhum em fazê-lo.
Por outro lado, se o aplicativo não conseguir adquirir seu token e quiser remover a conta de usuário, ele deverá chamar unregisterAccountForMAM() para remover a conta e evitar novas tentativas de registro em segundo plano.
Registre-se para receber notificações do SDK
O guia do SDK do Aplicativo do Intune discute vários cenários em que seu aplicativo pode ser necessário para se registrar para receber notificações do SDK, como:
- Manipulação
WRONG_USERde aplicativos de várias identidades (consulte Identidades gerenciadas versus identidades não gerenciadas) - Manipulação
MANAGEMENT_REMOVEDde aplicativos de várias identidades (consulte Proteção de buffer de dados). - Manipulação
WIPE_USER_DATAde aplicativos de identidade múltipla ouWIPE_USER_AUXILIARY_DATA(consulte Apagamento seletivo). - Aplicativos que implementam o gerenciamento
REFRESH_APP_CONFIGde configuração de aplicativos (consulte Recuperando a configuração de aplicativos do SDK).
Esta seção descreve todos os tipos de notificação que o SDK pode enviar, quando e por que seu aplicativo gostaria de ouvi-la e como implementar um receptor de notificação.
Tipos de notificações
Todas as notificações do SDK implementam a interface MAMNotification , que tem uma única função, getType(), que retorna uma enumeração MAMNotificationType .
A maioria das notificações são instâncias MAMUserNotification , que fornecem informações específicas para uma única identidade. O OID da identidade pode ser recuperado por meio da getUserOid() função, e o UPN da identidade pode ser recuperado por meio de getUserIdentity().
MAMEnrollmentNotification e MAMComplianceNotification estendem MAMUserNotificationainda mais, que contém resultados para tentativas de registrar um usuário ou dispositivo no serviço MAM e resultados para tentativas de corrigir a conformidade para a AC de Proteção de Aplicativo, respectivamente.
| Tipo de notificação | Classe de notificação | Motivo da notificação | Aplicabilidade | Dicas para manuseio | Informações do tópico |
|---|---|---|---|---|---|
COMPLIANCE_STATUS |
MAMComplianceNotification |
Retorna o resultado de uma tentativa de correção de conformidade. | Os aplicativos que implementam a AC de Proteção de Aplicativo devem lidar com isso. | – | Não determinístico |
MAM_ENROLLMENT_RESULT |
MAMEnrollmentNotification |
retorna o resultado de uma tentativa de registro. | Todos os aplicativos recebem isso. | – | Não determinístico |
MANAGEMENT_REMOVED |
MAMUserNotification |
O aplicativo está prestes a se tornar não gerenciado. | Os aplicativos que usam MAMDataProtectionManager devem lidar com isso. |
Consulte MANAGEMENT_REMOVED. | Nunca no thread da interface do usuário |
REFRESH_APP_CONFIG |
MAMUserNotification |
Os valores de configuração do aplicativo podem ter sido alterados. | Os aplicativos que implementam a configuração de aplicativos e armazenam em cache os dados de configuração de aplicativos devem lidar com isso. | Os aplicativos devem invalidar e atualizar todos os dados de configuração de aplicativo armazenados em cache. | Não determinístico |
REFRESH_POLICY |
MAMUserNotification |
A política de Proteção de aplicativos pode ter sido alterada. | Os aplicativos que armazenam em cache a política de proteção do aplicativo devem lidar com isso. | Os aplicativos devem invalidar e atualizar os dados da política de proteção do aplicativo em cache. | Não determinístico |
WIPE_USER_DATA |
MAMUserNotification |
O apagamento está prestes a ocorrer (*). | Os aplicativos que usam MAMDataProtectionManager devem lidar com isso ouWIPE_USER_AUXILIARY_DATA. |
Consulte Apagamento seletivo. | Nunca no thread da interface do usuário |
WIPE_USER_AUXILIARY_DATA |
MAMUserNotification |
O apagamento está prestes a ocorrer (*). | Somente aplicativos com várias identidades recebem isso. Os aplicativos que usam MAMDataProtectionManager devem lidar com isso ouWIPE_USER_DATA. |
Consulte Apagamento seletivo. | Nunca no thread da interface do usuário |
WIPE_COMPLETED |
MAMUserNotification |
Limpeza concluída. | Opcional para todos os aplicativos. | Entregue após WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA.Se o aplicativo relatar uma falha de seu manipulador de limpeza, essa notificação não será enviada. |
Nunca no thread da interface do usuário |
(*) As apagamentos podem ocorrer por vários motivos, por exemplo:
- Seu aplicativo chamado unregisterAccountForMAM.
- Um administrador de TI iniciou um apagamento remoto.
- Administração políticas de Acesso Condicional exigidas não foram atendidas.
Aviso
Um aplicativo nunca deve se registrar para notificações WIPE_USER_DATA e WIPE_USER_AUXILIARY_DATA .
MANAGEMENT_REMOVED
A MANAGEMENT_REMOVED notificação informa ao aplicativo que uma conta gerenciada por política anterior está prestes a se tornar não gerenciada.
Depois que a conta não é gerenciada, o aplicativo não pode mais ler os arquivos criptografados dessa conta, ler os dados criptografados com MAMDataProtectionManagera conta, interagir com a área de transferência criptografada ou participar do ecossistema de aplicativos gerenciados.
Isso não requer a limpeza de dados do usuário ou a desconexão do usuário (se uma limpeza fosse necessária, uma WIPE_USER_DATA notificação seria enviada).
Muitos aplicativos podem não precisar lidar com essa notificação, mas os aplicativos que usam MAMDataProtectionManager devem lidar com isso.
Consulte Proteção de Buffer de Dados para obter detalhes.
Quando o SDK chama o receptor do MANAGEMENT_REMOVED aplicativo, o seguinte é verdadeiro:
O SDK já descriptografou arquivos criptografados anteriormente (mas não buffers de dados protegidos) que pertencem ao aplicativo. Files em locais públicos no card SD que não pertencem diretamente ao aplicativo (por exemplo, as pastas Documents ou Download) não são descriptografados.
Todos os novos arquivos ou buffers de dados protegidos que o método receptor cria (ou qualquer outro código executado após o início do receptor) não são criptografados.
O aplicativo ainda tem acesso às chaves de criptografia, portanto, operações como descriptografar buffers de dados são bem-sucedidas.
Depois que o receptor do seu aplicativo retornar, ele não terá mais acesso às chaves de criptografia.
Implementando MAMNotificationReceiver
Para se registrar para notificações do SDK, seu aplicativo deve criar um MAMNotificationReceiver e registrá-lo no MAMNotificationReceiverRegistry.
Para registrar o receptor, ligue registerReceiver com o receptor e o tipo de notificação desejado em seu Application.onCreate método:
@Override
public void onCreate() {
super.onCreate();
MAMComponents.get(MAMNotificationReceiverRegistry.class)
.registerReceiver(
new ToastNotificationReceiver(),
MAMNotificationType.WIPE_USER_DATA);
}
A implementação MAMNotificationReceiver do aplicativo deve incluir o onReceive(MAMNotification notification) método.
Esse método invoca individualmente para cada notificação recebida e deve retornar um boolean.
Geralmente, esse método sempre deve retornar true, a menos que seu aplicativo tenha encontrado uma falha ao responder a uma notificação.
Assim como acontece com outros tipos de receptores Android, seu aplicativo tem flexibilidade com o tratamento de notificações:
- Ele pode criar implementações MAMNotificationReceiver distintas para tipos de notificação distintos. Nesse caso, certifique-se de registrar cada implementação e cada tipo de notificação separadamente.
- Ele pode usar uma única implementação MAMNotificationReceiver que contém lógica para responder a vários tipos de notificação distintos. Nesse caso, ele deve ser registrado para cada tipo de notificação a que ele pode responder.
- Ele pode criar várias implementações MAMNotificationReceiver que respondem ao mesmo tipo de notificação. Nesse caso, ambos devem ser registrados no mesmo tipo de notificação.
Dica
É seguro bloquear porque MAMNotificationReceiver.onReceive seu retorno de chamada não é executado no thread da interface do usuário.
Temas personalizados
Um tema personalizado pode ser fornecido ao SDK do Aplicativo do Intune. Esse tema personalizado se aplica a todas as telas e caixas de diálogo do SDK. Se um tema não for fornecido, o tema padrão do SDK será usado.
Fornecendo um tema personalizado
Para fornecer um tema, adicione a seguinte linha de código no Application.onMAMCreate método:
MAMThemeManager.setAppTheme(R.style.AppTheme);
No exemplo, substitua R.style.AppTheme pelo tema de estilo que o SDK deve aplicar.
Gerenciamento de certificados raiz confiáveis
Se o aplicativo exigir certificados SSL/TLS emitidos por uma autoridade de certificação local ou privada para fornecer acesso seguro a sites e aplicativos internos, o SDK do aplicativo do Intune adicionou suporte ao gerenciamento de confiança de certificado com as classes de API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient.
Observação
O MAMCertTrustWebViewClient é compatível com o Android 10 ou posterior.
O Gerenciamento de Certificados Raiz Confiáveis dá suporte para:
- SSLContext
- SSLSocketFactory
- TrustManager
- Modo de Exibição da Web
Requisitos
- O Gerenciamento de Certificados Raiz Confiáveis requer uma licença do Microsoft Tunnel para Gerenciamento de Aplicativos Móveis. Para saber mais, visite: Microsoft Tunnel com Gerenciamento de Aplicativos Móveis.
- Configurar políticas de Intune Configuração de Aplicativos para fornecer certificados raiz confiáveis para aplicativos de linha de negócios e Microsoft Edge no Android. Confira: Usar a VPN do Microsoft Tunnel com dispositivos Android que não são registrados no Microsoft Intune.
Observação
O Gerenciamento de Certificados Raiz Confiáveis pode ser usado independentemente do Gateway de VPN do Microsoft Tunnel, mas você deve licenciar o Microsoft MAM Tunnel para uso.
Usando certificados raiz confiáveis do Intune para estabelecer âncoras de confiança
O Gerenciamento de Certificados Raiz Confiáveis permite que seu aplicativo use certificados raiz confiáveis do Intune em combinação com certificados do dispositivo.
As classes de API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient usarão os certificados raiz confiáveis do Intune fornecidos por meio da Política de Configuração de Aplicativos como uma opção de fallback se os armazenamentos de certificados raiz confiáveis do dispositivo não contiverem os certificados raiz confiáveis necessários para estabelecer uma conexão segura com recursos locais. Dessa forma, o aplicativo pode usar certificados do dispositivo e do Intune para verificar conexões seguras e comunicação com fontes confiáveis.
Para aprimorar suas configurações de segurança de rede, um aplicativo pode usar o arquivo XML de Configuração de Segurança de Rede. O Gerenciamento de Certificados Raiz Confiáveis respeita essa segurança extra verificando se o XML de configuração de segurança de rede do aplicativo tem algum destes recursos:
- Âncoras de confiança personalizadas com ACs extras, como certificados autoassinados.
- Regras específicas do domínio para limitar autoridades de certificação confiáveis.
- Conjuntos de pinos para certificados de domínios específicos.
Observação
Para obter mais informações sobre a Configuração de segurança de rede do Android, consulte Configuração de segurança de rede.
Se qualquer uma delas se aplicar a um domínio que está sendo verificado quanto à confiança, o Gerenciamento de Certificados Raiz Confiáveis ignorará as verificações de confiança personalizadas para esse domínio e permitirá que somente os gerenciadores de confiança padrão da plataforma façam as verificações.
Class MAMTrustedRootCertsManager
Essa classe fornece as seguintes APIs:
-
createSSLContextForOID(String oid, String protocol): cria umSSLContextobjeto que usa certificados raiz confiáveis para a identidade especificada e o protocolo SSL/TLS especificado. O objeto retornadoSSLContextdessa classe já está inicializado corretamente comX509TrustManagerobjetos que usam os certificados raiz confiáveis combinados do dispositivo e do serviço MAM. -
createSSLSocketFactoryForOID(String oid, String protocol): cria umSSLSocketFactoryobjeto que usa certificados raiz confiáveis para a identidade especificada e o protocolo SSL/TLS especificado. O objeto retornadoSSLSocketFactoryé referenciado do mesmoSSLContextobjeto nesta classe. -
createX509TrustManagersForOID(String oid): cria uma matriz deX509TrustManagerobjetos que usam os certificados raiz confiáveis combinados do dispositivo e do serviço MAM para a identidade especificada.
Observação
Espera-se que o oid parâmetro seja a ID do usuário (OID) do Microsoft Entra para um usuário específico que executa o aplicativo. Se o identificador de usuário for desconhecido de antemão, você poderá passar um valor de null e o MAM tentará descobrir a identidade correta do thread ou processo no qual essas APIs são invocadas. A identidade deve ser definida corretamente no processo ou thread para que o MAM descubra a identidade. Para obter mais informações sobre como definir a identidade ativa em um processo ou thread, consulte Estágio 5: Várias identidades.
Observação
Quando o protocol parâmetro não é fornecido, a plataforma usa o protocolo SSL/TLS mais alto com suporte.
Aqui estão alguns exemplos de uso dessa classe.
Exemplo: Usando HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");
// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");
// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);
// Perform any other configuration or operations on the connection as needed
...
Exemplo: usando OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);
// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);
// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();
// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();
// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();
// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();
// Perform any other operations on the response as needed
...
Class MAMCertTrustWebViewClient
Essa classe fornece uma implementação personalizada da classe android.webkit.WebViewClientAndroid . A classe fornece uma maneira de lidar com o erro android.net.http.SslError.SSL_UNTRUSTED SSL em WebView.
Ao lidar com o erro, a classe usa certificados raiz confiáveis que o Intune configura e o serviço MAM fornece. Essa abordagem verifica a confiabilidade do host a partir da URL de destino que gerou o erro SSL no WebView. Se a implementação personalizada não lidar com o erro SSL, o sistema invocará o comportamento padrão herdado da superclasse.
Ao usar essa classe, crie uma instância dela e chame WebView.setWebViewClient(WebViewClient) para registrá-la com uma WebView instância.
Aqui está um exemplo de como usar essa classe.
Exemplo: usando o WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();
// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);
// Perform any other operations on WebView
...
Conformidade de Privacidade da China App Store
Algumas lojas de aplicativos da China exigem que os aplicativos exibam uma caixa de diálogo de consentimento de privacidade para os usuários antes de realizar operações que interagem com outros aplicativos no dispositivo. Isso inclui o registro de broadcast receivers que escutam eventos de instalação/desinstalação de pacote. O MAM SDK faz isso para escutar a presença do Portal da Empresa, onde reside a maior parte da lógica do MAM.
Se o aplicativo for distribuído por meio de lojas de aplicativos da China que têm esse requisito, use a integração a seguir para adiar as operações de inicialização offline até que o consentimento de privacidade seja obtido.
1. Adicionar sinalizador de manifesto
Adicione os seguintes metadados ao do seu aplicativo AndroidManifest.xml:
<application>
<meta-data
android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
android:value="true"/>
</application>
Observação
Esse sinalizador só deve ser adicionado a APKs distribuídos por meio de lojas de aplicativos da China que exigem consentimento de privacidade antes de interagir com outros aplicativos. Para APKs distribuídos por meio de outras lojas, esse sinalizador não deve ser incluído.
2. Prontidão do sinal após a caixa de diálogo de privacidade
Depois que o usuário aceitar sua caixa de diálogo de consentimento de privacidade, chame o SDK para sinalizar que as operações de inicialização offline podem continuar:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
.setOfflineStartupReady()
ou em Java:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
.setOfflineStartupReady();
Comportamento
O estado pronto é mantido entre inicializações de aplicativos. Uma vez setOfflineStartupReady() chamado, as inicializações subsequentes registrarão o receptor imediatamente durante a inicialização do aplicativo.
Observações
- O
setOfflineStartupReady()método é idempotente; chamá-lo várias vezes é seguro. - Se o Portal da Empresa já estiver instalado (modo online), a chamada
setOfflineStartupReady()não terá efeito, pois o receptor não é necessário. -
Importante: você deve sempre ligar
setOfflineStartupReady()depois que sua caixa de diálogo de privacidade for aceita.
Critérios de Saída
Para obter mais informações, consulte Teste rápido com alteração da política para facilitar o teste.
Validando restrições de salvamento e abertura a partir delas
Ignore esta seção se você não implementou a Política para limitar a transferência de dados entre aplicativos e dispositivos ou locais de armazenamento em nuvem.
Familiarize-se novamente com todos os cenários em que seu aplicativo pode salvar dados em serviços de nuvem ou dados locais e abrir dados de serviços de nuvem ou dados locais.
Para simplificar, esses testes pressupõem que seu aplicativo inclui apenas suporte para salvar e abrir dados do OneDrive de um único local dentro do aplicativo. No entanto, você deve validar todas as combinações: todos os locais de salvamento com suporte em todos os lugares em que seu aplicativo permite salvar dados e todos os locais abertos com suporte em todos os lugares em que seu aplicativo permite abrir dados.
Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; entre com uma conta gerenciada antes de iniciar o teste. Também:
- Defina a política da conta gerenciada como:
- "Enviar dados da organização para outros aplicativos" definido como "Aplicativos gerenciados por política".
- "Receber dados de outros aplicativos" definido como "Aplicativos gerenciados por política".
| Cenário | Condições prévias | Etapas |
|---|---|---|
| Salvar em, totalmente permitido | Política "Salvar cópias de dados da organização" definida como Permitir | - Navegue até a parte do seu aplicativo onde ele pode salvar dados no OneDrive. - Tente salvar um documento no OneDrive usando a mesma conta gerenciada conectada ao seu aplicativo. - Confirme se o salvamento é permitido. |
| Salvar em, isento | - Política "Salvar cópias dos dados da organização" definida como Bloquear - Política "Permitir que o usuário salve cópias em serviços selecionados" definida apenas para OneDrive |
- Navegue até a parte do seu aplicativo onde ele pode salvar dados no OneDrive. - Tente salvar um documento no OneDrive usando a mesma conta gerenciada conectada ao seu aplicativo. - Confirme se o salvamento é permitido. - Se o aplicativo permitir, tente salvar o arquivo em um local de armazenamento em nuvem diferente e confirme se ele está bloqueado. |
| Salvar em, bloqueado | Política "Salvar cópias de dados da organização" definida como Bloquear | - Navegue até a parte do seu aplicativo onde ele pode salvar dados no OneDrive. - Tente salvar um documento no OneDrive usando a mesma conta gerenciada conectada ao seu aplicativo. - Confirme se o salvamento está bloqueado. - Se o aplicativo permitir, tente salvar o arquivo em um local de armazenamento em nuvem diferente e confirme se ele está bloqueado. |
| Aberto de, totalmente permitido | Política "Abrir dados em documentos da organização" definida como Permitir | - Navegue até a parte do seu aplicativo onde ele pode abrir dados do OneDrive. - Tente abrir um documento do OneDrive usando a mesma conta gerenciada conectada ao armazenamento do seu aplicativo. - Confirme se a abertura é permitida. |
| Aberto de, isento | - Política "Abrir dados em documentos da organização" definida como Bloquear - Política "Permitir que os usuários abram dados de serviços selecionados" definida apenas para o OneDrive |
- Navegue até a parte do seu aplicativo onde ele pode abrir dados do OneDrive. - Tente abrir um documento do OneDrive usando a mesma conta gerenciada conectada ao armazenamento do seu aplicativo. - Confirme se a abertura é permitida. - Se o aplicativo permitir, tente abrir outro arquivo de um local de armazenamento em nuvem diferente e confirme se ele está bloqueado. |
| Abrir de, bloqueado | Política "Abrir dados em documentos da organização" definida como Bloquear | - Navegue até a parte do seu aplicativo onde ele pode abrir dados do OneDrive. - Tente abrir um documento do OneDrive usando a mesma conta gerenciada conectada ao armazenamento do seu aplicativo. - Confirme se a abertura está bloqueada. - Se o aplicativo permitir, tente abrir outro arquivo de um local de armazenamento em nuvem diferente e confirme se ele está bloqueado. |
Validando restrições de notificação
Ignore esta seção se você não implementou a Política para restringir o conteúdo dentro das notificações.
No que diz respeito à Política de Proteção do Aplicativo, seu aplicativo pode disparar três tipos diferentes de notificações:
- Notificações que não contêm dados da conta.
- Notificações que contêm dados que pertencem a uma conta gerenciada.
- Notificações que contêm dados que pertencem a uma conta não gerenciada.
Se o aplicativo for de identidade única, somente as duas primeiras serão relevantes, pois nenhuma proteção será aplicada se a conta exclusiva não for gerenciada.
Você pode validar restrições de notificação disparando todos os três tipos de notificações com diferentes valores de política configurados.
Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; entre com uma conta gerenciada antes de iniciar o teste. Se o aplicativo tiver várias identidades, entre também nele com uma conta não gerenciada.
| Cenário | Condições prévias | Etapas |
|---|---|---|
| Conteúdo completo bloqueado | Política de "notificações de dados da organização" definida como Bloquear | - Acione seu aplicativo para disparar uma notificação sem dados da conta. - Confirme se a notificação não exibe nenhum conteúdo. - Acione seu aplicativo para disparar uma notificação com os dados da conta gerenciada. - Confirme se a notificação não exibe nenhum conteúdo. - Acione seu aplicativo para disparar uma notificação com os dados da conta não gerenciada. - Confirme se a notificação não exibe nenhum conteúdo. |
| Conteúdo parcial bloqueado | Política de "notificações de dados da organização" definida como Bloquear dados da organização | - Acione seu aplicativo para disparar uma notificação sem dados da conta. - Confirme se a notificação exibe seu conteúdo completo. - Acione seu aplicativo para disparar uma notificação com os dados da conta gerenciada. - Confirme se a notificação edita o conteúdo da conta gerenciada. - Acione seu aplicativo para disparar uma notificação com os dados da conta não gerenciada. - Confirme se a notificação exibe seu conteúdo completo. |
| Nenhum conteúdo bloqueado | Política de "notificações de dados da organização" definida como Permitir | - Acione seu aplicativo para disparar uma notificação sem dados da conta. - Confirme se a notificação exibe seu conteúdo completo. - Acione seu aplicativo para disparar uma notificação com os dados da conta gerenciada. - Confirme se a notificação exibe seu conteúdo completo. - Acione seu aplicativo para disparar uma notificação com os dados da conta não gerenciada. - Confirme se a notificação exibe seu conteúdo completo. |
Validando o backup e restauração de dados
Ignore esta seção se você não implementou a Política para proteger os dados de backup.
Familiarize-se novamente com o conteúdo (arquivos e pares de chave-valor) que seu aplicativo configurou para backup. Você deve validar que apenas o conteúdo esperado faz parte da restauração. Conteúdo extra na restauração pode levar a um vazamento de dados.
Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; entre com uma conta gerenciada antes de iniciar o teste. Se o aplicativo tiver várias identidades, entre também nele com uma conta não gerenciada.
Siga as instruções oficiais do Android para testar o backup. Essas instruções são diferentes para backup automático e backups de chave/valor, portanto, siga-as de perto.
Validando a captura de tela personalizada em relação à política
Ignore esta seção se você não implementou Restrições de Captura de Tela Personalizadas.
Se o aplicativo tiver um recurso que ignore o Windownível FLAG_SECUREdo Android, valide se esse recurso está bloqueado pelas restrições de captura de tela da política de proteção do aplicativo.
Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; entre com uma conta gerenciada antes de iniciar o teste.
| Cenário | Condições prévias | Etapas |
|---|---|---|
| Captura de tela bloqueada | Política de "Captura de tela e Google Assistente" definida como Bloquear | - Navegue até a parte do seu aplicativo que usa o código personalizado FLAG_SECURE .- Tente usar esse recurso. - Confirme se o recurso está bloqueado. |
| Captura de tela permitida | Política de "Captura de tela e Google Assistente" definida como Permitir | - Navegue até a parte do seu aplicativo que usa o código personalizado FLAG_SECURE .- Tente usar esse recurso. - Confirme se o recurso é permitido. |
Validando a Autoridade de Certificação de Proteção do Aplicativo
Ignore esta seção se você não implementou a AC de Proteção de Aplicativo de Suporte.
Além das etapas de validação típicas de criação e atribuição da política de proteção do aplicativo ao seu aplicativo e conta de teste, você também deve criar e atribuir uma política de Acesso Condicional de Proteção do Aplicativo à sua conta de teste. Confira Configurar políticas de Acesso Condicional baseadas em aplicativo com o Intune para obter detalhes.
Etapas do teste:
- Desinstale o Microsoft Authenticator e o Portal da Empresa do Intune antes de iniciar este teste.
- Instale seu aplicativo.
- Entre em seu aplicativo com sua conta de teste direcionada à política de proteção do aplicativo e à política de autoridade de certificação baseada no aplicativo.
- Confirme se o aplicativo solicita a instalação do Portal da Empresa.
- Entre novamente.
- Confirme se o aplicativo solicita que você registre seu dispositivo. Siga as instruções na tela. Se o aplicativo não solicitar o registro aqui, confirme se o dispositivo de teste desinstalou outros aplicativos habilitados para SDK, o Portal da Empresa e o Authenticator primeiro. Se isso ainda não funcionar, reveja as instruções de implementação.
- Confirme se você pode acessar todos os dados do aplicativo após o registro.
Validando receptores de notificação
Ignore esta seção se você não tiver implementado o Registre-se para notificações do SDK.
As etapas de validação dependem dos tipos de notificações para as quais seu aplicativo foi registrado. Para todos os tipos de notificações, adicione o log para garantir que o receptor seja invocado corretamente.
MAM_ENROLLMENT_RESULT pode ser disparado ao entrar em seu aplicativo com uma conta que a política de Proteção do Aplicativo visa.
Você pode disparar REFRESH_APP_CONFIG e REFRESH_POLICY atualizando a respectiva Política de Configuração de Aplicativos e Política de Proteção de Aplicativo direcionadas à sua conta de teste e aguardando o SDK receber a política atualizada.
Dica
Consulte Teste rápido com alteração de política para acelerar esse processo.
Você pode disparar MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAe WIPE_COMPLETED notificações emitindo um apagamento seletivo do Microsoft Intune.
Validação de temas personalizados
Ignore esta seção se você não implementou os Temas Personalizados.
Você pode validar o suporte a temas personalizados inspecionando as cores nas caixas de diálogo do SDK. A caixa de diálogo mais simples de marcar é a tela PIN do MAM.
Pré-condições:
- Defina a política da conta gerenciada como:
- "PIN para acesso" definido como "Obrigatório".
- Instale seu aplicativo e o Portal da Empresa do Intune.
Etapas do teste:
- Inicie seu aplicativo e entre com a conta de teste.
- Verifique se a tela do PIN do MAM é exibida e tem um tema baseado no tema personalizado que você forneceu ao SDK.
Próximas etapas
Se você seguiu este guia na ordem e concluiu todos os Critérios de Saída anteriormente neste artigo, seu aplicativo agora está totalmente integrado ao SDK do Aplicativo do Intune e pode impor políticas de proteção do aplicativo. Se você ignorou qualquer uma das seções anteriores de participação do aplicativo, Estágio 5: Identidade múltipla e Estágio 6: Configuração de Aplicativos, e não tem certeza se seu aplicativo deve dar suporte a esses recursos, revise as principais decisões para integração do SDK.
Proteção de aplicativos agora é um cenário central para seu aplicativo. Continue a consultar este guia e o Apêndice à medida que você continua a desenvolver seu aplicativo.