SDK do Aplicativo do Intune para Android – Recursos de participação do aplicativo

O SDK do aplicativo Microsoft Intune para Android permite que você incorpore políticas de proteção de aplicativo do Intune (também conhecidas como políticas de APP ou MAM) em seu aplicativo Java/Kotlin Android nativo. Um aplicativo gerenciado pelo Intune é integrado ao SDK do Aplicativo do Intune. Os administradores do Intune podem implantar facilmente 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ários estágios distintos. Comece examinando Planejar a Integração.

Estágio 7: Recursos de participação do aplicativo

Goals de estágio

  • Saiba mais sobre os vários recursos de participação do aplicativo oferecidos pelo SDK do Aplicativo do Intune.
  • Integrar recursos de participação do aplicativo relevantes para seu aplicativo e usuários.
  • Teste a integração desses recursos.

O que são "Recursos de Participação de Aplicativo"?

Esse processo de integração do SDK tenta minimizar a quantidade de código específico do aplicativo que os desenvolvedores precisam gravar. Ao concluir com êxito os estágios anteriores da integração do SDK, seu aplicativo agora pode impor a maioria das configurações de política de proteção de aplicativo, como criptografia de arquivo, restrições de cópia/colar, bloqueio de captura de tela e restrições de transferência de dados.

No entanto, há algumas configurações que exigem código específico do aplicativo para impor corretamente; são chamados de recursos de participação do 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 do aplicativo não são necessariamente opcionais. Dependendo dos recursos existentes do aplicativo, esses recursos podem ser necessários. Consulte Principais decisões para integração do SDK para obter detalhes.

Os estágios anteriores deste guia já descreveram vários recursos de participação do aplicativo:

O restante deste guia descreve o conjunto restante de recursos de participação do aplicativo:

  • Impor a política que restringe a salvação de arquivos para / abrir arquivos do armazenamento local ou na nuvem.
  • Impor a política que restringe o conteúdo em notificações.
  • Impor a política de proteção de dados de backup.
  • Impor a política que restringe a captura de tela (se seu aplicativo tiver código de captura de tela personalizado).
  • Suporte à AC de Proteção de Aplicativo.
  • Registre-se para notificações do SDK.
  • Aplicar temas de aplicativo personalizados.
  • Use certificados confiáveis do Intune para garantir a cadeia de confiança para pontos de extremidade locais.

Conceitos básicos do Recurso de Participação do Aplicativo

A interface AppPolicy contém muitos métodos que informam ao aplicativo se determinadas ações são permitidas.

A maioria dos recursos de participação do aplicativo envolve:

  • Identificar o lugar certo no código do aplicativo para marcar se uma ação for permitida.
  • Chamar um AppPolicy método para marcar se uma ação for permitida, com base na política configurada no momento.
  • Dependendo do resultado, permitir que a ação seja concluída ou modificar o comportamento do aplicativo quando a ação for bloqueada.

Para recuperar uma AppPolicy instância, use um dos métodos MAMPolicyManager , como getPolicy ou getPolicyForIdentity(final String identity).

Métodos informativos no AppPolicy

Nem todos os métodos em AppPolicy estão vinculados a um recurso de participação de aplicativo. Alguns métodos são informativos, dando aos seus aplicativos 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ência personalizada do usuário quando políticas específicas são configuradas.

Exemplo: determinar se as capturas de tela estão bloqueadas

Se seu aplicativo tiver um controle que permite que o usuário faça uma captura de tela, talvez você queira desabilitar ou ocultar esse controle se a Política de Proteção de Aplicativo tiver capturas de tela bloqueadas.

Seu aplicativo pode marcar isso chamando MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Política para limitar a transferência de dados entre aplicativos e locais de armazenamento em nuvem ou dispositivo

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 de dados e vazamento de dados restringindo de onde os aplicativos podem salvar dados e abrir dados.

Observação

Se o aplicativo permitir salvar em locais pessoais ou de nuvem diretamente do aplicativo ou permitir que os dados sejam abertos diretamente no aplicativo, você deverá implementar esse recurso de participação do aplicativo SDK do Aplicativo do Intune para permitir que os administradores de TI bloqueiem essa economia/abertura.

Salvar no dispositivo ou no armazenamento em nuvem

A getIsSaveToLocationAllowed API permite que seu aplicativo saiba se salvar em determinados locais é permitido para uma determinada identidade, com base na política configurada:

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(
SaveLocation service, String username);

Para determinar se seu aplicativo deve implementar o getIsSaveToLocationAllowed marcar, determine se seu aplicativo dá suporte à saída de dados examinando a seguinte tabela:

service Parâmetro: SaveLocation Valor de Enum Caso de uso Nome de usuário associado
ONEDRIVE_FOR_BUSINESS O aplicativo está salvando dados no OneDrive. Um username para uma conta que é usada para autenticação de serviço de nuvem e autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
SHAREPOINT O aplicativo está salvando dados no Sharepoint. Um username para uma conta que é usada para autenticação de serviço de nuvem e autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
BOX Este aplicativo está salvando dados no Box. Um username para uma conta que é usada para autenticação de serviço de nuvem e autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário 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. O armazenamento externo não é considerado um serviço de nuvem e, portanto, deve ser sempre usado com um null parâmetro de nome de usuário.
PHOTO_LIBRARY O aplicativo está salvando dados para o armazenamento de fotos local do Android. O armazenamento de fotos local do Android não é considerado um serviço de nuvem e, portanto, deve ser sempre usado com um null parâmetro de nome de usuário.
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 especificados acima. *Esse local deve ser usado para determinar se os dados podem ser passados entre contas em um aplicativo de várias identidades.- Um username para uma conta usada para autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
OTHER O aplicativo está salvando dados em um local que não é especificado acima e não atende aos critérios para ACCOUNT_DOCUMENT. O username não é avaliado para esse local e, portanto, deve ser null.

Os arquivos colocados no armazenamento de aplicativos privados necessários para a operação do aplicativo ou baixados temporariamente para exibição são sempre permitidos; você não precisa marcar getIsSaveToLocationAllowed. Fazer marcar SaveLocation.LOCAL para

  1. Arquivos salvos fora do armazenamento de aplicativos privados.
  2. Arquivos baixados no armazenamento de aplicativos privados que não são necessários para a operação do aplicativo (por exemplo, o usuário deliberadamente opta por baixar para o dispositivo).

Observação

Ao verificar a política de salvamento, username deve ser o UPN/nome de usuário/email associado ao serviço de nuvem que está sendo salvo (não necessariamente o mesmo que a conta que possui o documento que está sendo salvo).

Abrir dados de um local ou local de armazenamento em nuvem

A getIsOpenFromLocationAllowed API permite que seu aplicativo saiba se a abertura de determinados locais é permitida para uma determinada identidade, com base na política configurada:

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowed(
OpenLocation location, String username);

Para determinar se seu aplicativo deve implementar o getIsOpenFromLocationAllowed marcar, determine se seu aplicativo dá suporte à entrada de dados examinando a seguinte tabela:

location Parâmetro: OpenLocation Valor de Enum Caso de uso Nome de usuário associado
ONEDRIVE_FOR_BUSINESS O aplicativo está abrindo dados do OneDrive. Um username para uma conta que é usada para autenticação de serviço de nuvem e autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
SHAREPOINT O aplicativo está abrindo dados do Sharepoint. Um username para uma conta que é usada para autenticação de serviço de nuvem e autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
CAMERA O aplicativo está abrindo dados da câmera. Um null valor, porque 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 local de serviço de nuvem, um username parâmetro é esperado porque indica a propriedade.
Ao abrir um arquivo do armazenamento local, o proprietário do arquivo deve sempre ser considerado, pois a política de salvamento do proprietário do arquivo pode ou não permitir que outras identidades abram o arquivo:
- Para arquivos marcados por identidade,username deve ser a identidade do proprietário do arquivo.
- Para arquivos sem uma marca de identidade,username deve ser null.
PHOTO_LIBRARY O aplicativo está abrindo dados do armazenamento local de fotos do Android. O armazenamento de fotos local do Android não é considerado um serviço de nuvem e, portanto, deve ser sempre usado com um null parâmetro de nome de usuário.
ACCOUNT_DOCUMENT O aplicativo está abrindo dados de um local associado a uma conta no aplicativo e não é um dos locais de nuvem específicos especificados acima. *Esse local deve ser usado para determinar se os dados podem ser passados entre contas em um aplicativo de várias identidades.- Um username para uma conta usada para autenticação Microsoft Entra. Se esse nome de usuário não existir ou o nome de usuário não for conhecido, use null.
OTHER O aplicativo está abrindo dados de um local que não é especificado acima e não atende aos critérios para ACCOUNT_DOCUMENT. O username não é avaliado para esse local e, portanto, deve ser null.

Observação

Ao verificar a política aberta, username deve ser o UPN/nome de usuário/email associado 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

Para conveniência, o SDK fornece o método AppPolicy.isOpenFromLocalStorageAllowed que usa um File parâmetro para um arquivo no armazenamento local. Os termos de imposição da política são funcionalmente idênticos à chamadaAppPolicy.isOpenFromLocationAllowed(OpenLocation.LOCAL, username), exceto que ele manipula a análise do proprietário do arquivo do Fileusername .

Caixa de diálogo bloqueada de compartilhamento

O SDK fornece uma caixa de diálogo para notificar o usuário de que uma ação de transferência de dados foi bloqueada pela política MAM.

A caixa de diálogo deve ser exibida para o usuário sempre que a chamada ou isOpenFromAllowedForLocation a isSaveToAllowedForLocation API resultar na ação save/open sendo bloqueada. A caixa de diálogo exibe uma mensagem genérica e retornará à chamada Activity quando for descartada.

Para exibir a caixa de diálogo, adicione o seguinte código:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Permitir o compartilhamento de arquivos

Se não for permitido salvar em locais de armazenamento público, seu aplicativo ainda deverá permitir que o usuário exiba arquivos baixando-os para o armazenamento privado do aplicativo e abrindo-os com o seletor do sistema.

Política para restringir conteúdo dentro de notificações

Para aplicativos de identidade única, o comportamento padrão do SDK de Aplicativo do Intune tentará bloquear todas as notificações quando a Política de Proteção de Aplicativo restringir as notificações.

O comportamento padrão do SDK é limitado. O SDK não pode honrar automaticamente o valor "Bloquear dados da organização", que destina-se a remover apenas conteúdo gerenciado de notificações. Para aplicativos de 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 desejar 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.getPolicyForIdentity(notificationIdentity).getNotificationRestriction();

O enum retornado NotificationRestriction tem os seguintes valores:

NotificationRestriction Enum Comportamento esperado do aplicativo
BLOCKED O aplicativo não deve mostrar nenhuma notificações para a conta associada a essa política. Para aplicativos de identidade única , o SDK do Aplicativo do Intune bloqueará todas as notificações automaticamente e nenhum código adicional é necessário.
BLOCK_ORG_DATA O aplicativo deve mostrar uma notificação modificada que não contém dados da organização.
UNRESTRICTED O aplicativo deve mostrar todas as notificações.

Se o aplicativo não invocar getNotificationRestrictioncorretamente , o SDK do MAM 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 BLOCKED e a notificação não será mostrada.

Para um controle mais refinado, marcar o valor de e modificar as notificações do getNotificationRestriction aplicativo adequadamente.

Política para proteger dados de backup

O SDK do Aplicativo do Intune pode bloquear o carregamento de dados para o recurso interno de backup e restauração do Android. Para saber mais sobre backup e restauração no Android, confira o guia de API do Android e as alterações introduzidas no Android S/12 aqui: alterar para backup e restauração.

Backup automático para aplicativos

Começando com o Android M, o Android começou a oferecer backups completos automáticos no Google Drive para aplicativos, independentemente da API de destino do aplicativo.

O Intune permite que você utilize todos os recursos de backup automático disponíveis do Android, incluindo a capacidade de definir regras personalizadas no XML, com diretrizes específicas de integração do Intune para garantir que a proteção de dados seja aplicada.

Configurando o comportamento de backup no manifesto do aplicativo

Por padrão, android:allowBackup é definido como true conforme descrito em habilitar e desabilitar o backup.

Se o aplicativo não exigir funcionalidade completa de backup e restauração, defina android:allowBackup como false. Nesse caso, nenhuma ação adicional é necessária e os dados "corporativos" permanecerão dentro do aplicativo.

Se o aplicativo exigir funcionalidade completa de backup e restauração, defina android:allowBackup como true e execute as seguintes etapas adicionais:

  1. Se seu aplicativo não usar seu próprio personalizado BackupAgent, use o MAMBackupAgent padrão para permitir backups completos automáticos compatíveis 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>
    
  2. [Opcional] Se você implementou um personalizado BackupAgentopcional, precisará usar MAMBackupAgent ou MAMBackupAgentHelper. Confira as seções a seguir. Considere alternar para usar o MAMDefaultBackupAgent do Intune, descrito na etapa 1, que fornece backup fácil no Android M e acima.

  3. Quando você decidir qual tipo de backup completo seu aplicativo deve receber (não filtrado, filtrado ou nenhum), você precisará definir o atributo android:fullBackupContent como verdadeiro, falso ou um recurso XML em seu aplicativo.

  4. Em seguida, você deve copiar o valor para android:fullBackupContent na com.microsoft.intune.mam.FullBackupContent marca de metadados e para aplicativos que dão suporte ao novo formato de configuração XML adicionado na API 31, na com.microsoft.intune.mam.DataExtractionRules marca de metadados.

    • Exemplo 1: se você quiser que seu aplicativo tenha backups completos sem exclusões, você deve definir os atributos e as marcas de metadados como verdadeiros:

      <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 o personalizado BackupAgent e opte por não fazer backups automáticos e compatíveis com a política do Intune, defina os atributos e as marcas de metadados como false:

      <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 a marca de atributo e metadados como 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 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

BackupAgentHelper é mais fácil de implementar do que BackupAgent tanto em termos de funcionalidade nativa do Android quanto na integração do MAM do Intune 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 as etapas abaixo para usar um BackupAgentHelper com o MAM do Intune:

  1. Para utilizar o backup de várias identidades com um BackupAgentHelper, siga o guia do Android para Estender BackupAgentHelper.

  2. Faça com que sua classe estenda o equivalente MAM de BackupAgentHelper, FileBackupHelper e SharedPreferencesBackupHelper.

Classe Android MAM equivalente
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Seguir essas diretrizes levará a um backup e restauração de várias identidades bem-sucedidos.

BackupAgent

Um BackupAgent permite que você seja muito mais explícito sobre quais dados são backup. Como o desenvolvedor é bastante responsável pela implementação, há mais etapas necessárias para garantir a proteção de dados apropriada do Intune. Como a maior parte do trabalho é enviada por push para você, o desenvolvedor, a integração do Intune está um pouco mais envolvida.

Integrar o MAM:

  1. Leia atentamente o guia do Android para Backup de Chave/Valor e, especificamente , Estendendo BackupAgent para garantir que sua implementação do BackupAgent siga as diretrizes do Android.

  2. Faça com que sua classe estenda MAMBackupAgent.

Backup de várias identidades:

  1. Antes de iniciar o backup, marcar que os arquivos ou buffers de dados que você planeja fazer backup são de fato permitidos pelo administrador de TI para fazer backup em cenários de várias identidades. Use isBackupAllowed em MAMFileProtectionManager e MAMDataProtectionManager para determinar isso. Se o arquivo ou o buffer de dados não tiver permissão para fazer backup, você não deverá incluí-lo no backup.

  2. Em algum momento durante o backup, se você quiser fazer backup das identidades dos arquivos que você verificou na etapa 1, você deve chamar backupMAMFileIdentity(BackupDataOutput data, File … files) com os arquivos dos quais planeja extrair dados. Isso criará automaticamente novas entidades de backup e as gravará no BackupDataOutput para você. Essas entidades serão consumidas automaticamente após a restauração.

Restauração de várias identidades: O guia backup de dados especifica um algoritmo geral para restaurar os dados do aplicativo e fornece um exemplo de código na seção Estender BackupAgent . Para ter uma restauração de várias identidades bem-sucedida, você deve seguir a estrutura geral fornecida neste exemplo de código com especial atenção ao seguinte:

  1. Você deve utilizar um while(data.readNextHeader())loop * para percorrer as entidades de backup.

  2. Você deve chamar data.skipEntityData()se data.getKey() não corresponder à chave que você escreveu em onBackup. Sem executar esta etapa, suas restaurações podem não ter êxito.

  3. Evite retornar ao consumir entidades de backup no while(data.readNextHeader())constructo *, pois as entidades que gravamos automaticamente serão perdidas.

  • Onde data está o nome da variável local para o MAMBackupDataInput que é passado para seu aplicativo após a restauração.

Restrições personalizadas de captura de tela

Se seu aplicativo contiver um recurso de captura de tela personalizado que ignora a restrição no nível FLAG_SECURE do WindowAndroid, você deve marcar política de captura de tela antes de permitir o acesso completo 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 personalizados ou de captura de tela de terceiros, você não precisará tomar nenhuma ação para restringir as capturas de tela. A política de captura de tela é imposta automaticamente no Window nível de todos os aplicativos integrados do MAM. Todas as tentativas do sistema operacional ou de outro aplicativo de capturar um Window em seu aplicativo serão bloqueadas conforme necessário. Por exemplo, se um usuário tentar capturar a tela do seu aplicativo por meio da captura de tela interna ou dos recursos de gravação de tela do Android, a captura será restrita automaticamente sem a participação do seu aplicativo.

Suporte à AC de Proteção de Aplicativo

A AC de Proteção de Aplicativo (Acesso Condicional), também conhecida como AC baseada em aplicativo, restringe o acesso aos recursos até que seu aplicativo seja gerenciado pelas Políticas de Proteção de Aplicativo do Intune. Microsoft Entra ID impõe isso exigindo que o aplicativo seja registrado e gerenciado pelo APP antes de conceder um token para acessar um recurso protegido pela AC.

Observação

O suporte para a AC de Proteção de Aplicativo requer a versão 1.0.0 (ou maior) da biblioteca MSAL.

Manipular a não conformidade com o MSAL

Ao adquirir um token para uma conta, a biblioteca MSAL pode retornar ou lançar um MsalIntuneAppProtectionPolicyRequiredException para indicar a não conformidade com o gerenciamento de política de proteção de aplicativo. Parâmetros adicionais podem ser extraídos da exceção para uso na correção da conformidade (consulte MAMComplianceManager). Depois que a correção for bem-sucedida, o aplicativo poderá reattemptar a aquisição do token por meio do MSAL.

MAMComplianceManager

A interface MAMComplianceManager é usada quando o erro exigido pela política é recebido do MSAL. Ele contém o método [remediarCompliance] que deve ser chamado para tentar colocar o aplicativo em um estado compatível. Uma referência ao pode ser obtida da MAMComplianceManager seguinte maneira:

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

A MAMComplianceManager instância retornada tem a garantia de não ser 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 é chamado para tentar colocar o aplicativo sob gerenciamento para atender às condições para que Microsoft Entra ID conceda o token solicitado. Os quatro primeiros parâmetros podem ser extraídos da exceção recebida pelo método MSAL AuthenticationCallback.onError() (confira exemplo de código abaixo). O parâmetro final é um booliano que controla se um UX é mostrado 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 a UX personalizada durante essa operação. Essa caixa de diálogo só será exibida enquanto a correção de conformidade estiver em andamento; ele não exibirá o resultado final. Seu aplicativo pode registrar um receptor para a COMPLIANCE_STATUS notificação para lidar com o sucesso ou falha da tentativa de correção de conformidade. Consulte Conformidade status notificações para obter 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 aplicativo registrado MAMServiceAuthenticationCallback terá seu acquireToken() método chamado para obter um token para o registro. acquireToken() será chamado antes que o aplicativo tenha adquirido seu próprio token, portanto, qualquer tarefa de criação de conta ou de conta que o aplicativo faz após uma aquisição de token bem-sucedida pode não ter sido feita ainda. O retorno de chamada deve ser capaz de adquirir um token nesse caso.

Se você não puder retornar um token do , 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á repetida imediatamente com o token fornecido.

Observação

A aquisição de token silencioso ainda será possível porque acquireToken() o usuário já terá sido orientado a instalar o agente e registrar o dispositivo antes que a MsalIntuneAppProtectionPolicyRequiredException exceção seja recebida. Isso faz com que o agente tenha um token de atualização válido em seu cache, permitindo que a aquisição silenciosa do token solicitado tenha êxito.

Aqui está uma amostra de como receber o erro exigido pela política no AuthenticationCallback.onError() método e chamar 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, um MAMComplianceNotification será enviado para informar o aplicativo do status final da tentativa de correção de conformidade. Consulte Registrar para obter notificações do SDK para obter detalhes sobre o registro.

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 do enumeração [MAMCAComplianceStatus].

Código de status Explicação
UNKNOWN O status é desconhecido. Isso pode indicar um motivo de falha imprevisto. Podem ser encontradas informações adicionais nos logs de Portal da Empresa.
COMPLIANT A correção de conformidade foi bem-sucedida e o aplicativo agora está em conformidade com a política. A aquisição do token MSAL deve ser repetida.
NOT_COMPLIANT Falha na tentativa de corrigir a conformidade. O aplicativo não está em conformidade e a aquisição do token MSAL não deve ser repetida até que a condição de erro seja corrigida. Informações adicionais de erro são enviadas com o MAMComplianceNotification.
SERVICE_FAILURE Houve uma falha ao tentar recuperar dados de conformidade do Serviço do Intune. Podem ser encontradas informações adicionais nos logs de Portal da Empresa.
NETWORK_FAILURE Houve um erro ao se conectar ao Serviço do Intune. O aplicativo deve tentar sua aquisição de token novamente quando a conexão de rede for restaurada.
CLIENT_ERROR A tentativa de corrigir a conformidade falhou por algum motivo relacionado ao cliente. Por exemplo, nenhum token ou usuário errado. Informações adicionais de erro são enviadas com o MAMComplianceNotification.
PENDING A tentativa de corrigir a conformidade falhou porque a resposta status ainda não havia sido recebida do serviço quando o limite de tempo foi excedido. O aplicativo deve tentar sua 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 tenha êxito. Se o Portal da Empresa já estiver instalado no dispositivo, o aplicativo precisará ser reiniciado. Nesse caso, uma caixa de diálogo será mostrada solicitando que o usuário reinicie o aplicativo.

Se o status de conformidade for MAMCAComplianceStatus.COMPLIANT, o aplicativo deverá reinicializar sua aquisição de token original (para seu próprio recurso).

Se a tentativa de correção de conformidade falhar, os getComplianceErrorTitle() métodos e getComplianceErrorMessage() retornarão cadeias de caracteres localizadas que o aplicativo pode exibir para o usuário final, se ele escolher. A maioria dos casos de erro não é corretiva pelo aplicativo, portanto, para o caso geral, talvez seja melhor falhar na criação ou logon da conta e permitir que o usuário tente novamente mais tarde.

Se uma falha for persistente, os logs de Portal da Empresa poderão ajudar a determinar a causa. O usuário final pode enviar os logs. Para obter mais informações, consulte Carregar e enviar logs de 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

O receptor de notificação deve ser registrado antes de chamar remediateCompliance() para evitar uma condição de corrida que possa resultar na falta da notificação.

Declarando suporte para a AC de Proteção de Aplicativos

Depois que seu aplicativo estiver pronto para lidar com a correção da AC do aplicativo, você poderá informar ao Microsoft Identity que seu aplicativo está pronto para a AC do aplicativo. Para fazer isso em seu aplicativo MSAL, crie seu Cliente Público usando as funcionalidades do cliente de "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 de concluir o acima, prossiga para Validar a AC de Proteção de Aplicativo abaixo.

Notas de Implementação

Observação

O método do MAMServiceAuthenticationCallback.acquireToken() aplicativo deve passar false para sinalizador para forceRefreshacquireTokenSilentAsync().

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

Observação

Se você quiser mostrar um UX de bloqueio personalizado durante a tentativa de correção, deverá passar false para o parâmetro showUX para remediateCompliance(). Você deve garantir que você mostre seu UX e registre seu ouvinte de notificação primeiro antes de chamar remediateCompliance(). Isso impedirá uma condição de corrida em que a notificação pode ser perdida se remediateCompliance() falhar muito rapidamente. Por exemplo, o onCreate() método ou onMAMCreate() de uma subclasse atividade é o local ideal para registrar o ouvinte de notificação e, em seguida, chamar remediateCompliance(). Os parâmetros para remediateCompliance() podem ser passados para sua UX como extras de intenção. Quando a conformidade status notificação for recebida, você poderá exibir o resultado ou simplesmente concluir a atividade.

Observação

remediateCompliance() registrará a conta e tentará o registro. Depois que o token main é adquirido, a chamada registerAccountForMAM() não é necessária, mas não há nenhum dano em fazê-lo. Por outro lado, se o aplicativo não adquirir seu token e quiser remover a conta do usuário, ele deverá chamar unregisterAccountForMAM() para remover a conta e impedir novas tentativas de registro em segundo plano.

Registrar-se para notificações do SDK

O guia SDK do Aplicativo do Intune já discutiu vários cenários em que seu aplicativo pode ser necessário para se registrar para notificações do SDK, como:

Esta seção descreve cada tipo de notificação que o SDK pode enviar, quando e por que seu aplicativo gostaria de ouvi-lo e como implementar um receptor de notificação.

Tipos de notificações

Todas as notificações de SDK implementam a interface MAMNotification , que tem uma única função , getType()retornando um enumeração MAMNotificationType .

A maioria das notificações são MAMUserNotifications, que fornecem informações específicas para uma única identidade, que podem ser recuperadas por meio da getUserIdentity() função.

MAMEnrollmentNotification e MAMComplianceNotification estendem MAMUserNotificationainda mais , que contêm resultados para tentativas de registrar um usuário/dispositivo com o Serviço MAM e o resultado para tentar 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 tratamento Informações do thread
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ãodeterminista
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Retorna o resultado de uma tentativa de registro. Todos os aplicativos receberão isso. - Nãodeterminista
MANAGEMENT_REMOVED MAMUserNotification O aplicativo está prestes a ficar não gerenciado. Os aplicativos que utilizam MAMDataProtectionManager devem lidar com isso. Confira MANAGEMENT_REMOVED abaixo. Thread nunca na 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 do aplicativo e os dados de configuração do aplicativo de cache devem lidar com isso. Os aplicativos devem invalidar e atualizar todos os dados de configuração do aplicativo armazenados em cache. Nãodeterminista
REFRESH_POLICY MAMUserNotification Proteção de aplicativos política pode ter sido alterada. Os aplicativos que armazenam em cache a política de proteção de aplicativos devem lidar com isso. Os aplicativos devem invalidar e atualizar todos os dados da política de proteção de aplicativo armazenados em cache. Nãodeterminista
WIPE_USER_DATA MAMUserNotification O apagamento está prestes a ocorrer(*). Os aplicativos que utilizam MAMDataProtectionManager devem lidar com isso ouWIPE_USER_AUXILIARY_DATA. Consulte Apagamento Seletivo. Thread nunca na interface do usuário
WIPE_USER_AUXILIARY_DATA MAMUserNotification O apagamento está prestes a ocorrer(*). Somente aplicativos de várias identidades receberão isso.
Os aplicativos que utilizam MAMDataProtectionManager devem lidar com isso ouWIPE_USER_DATA.
Consulte Apagamento Seletivo. Thread nunca na interface do usuário
WIPE_COMPLETED MAMUserNotification O apagamento foi concluído. Sempre opcional. Entregue após WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA. *Se o aplicativo relatar uma falha de seu manipulador para WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA, essa notificação não será enviada.- Thread nunca na interface do usuário

(*) Os apagamentos podem ocorrer por muitos motivos, por exemplo:

  • Seu aplicativo chamado unregisterAccountForMAM.
  • Um administrador de TI iniciou um apagamento remoto.
  • Administração políticas de acesso condicional necessárias não foram atendidas.

Aviso

Um aplicativo nunca deve se registrar para as WIPE_USER_DATA notificações e WIPE_USER_AUXILIARY_DATA .

MANAGEMENT_REMOVED

A MANAGEMENT_REMOVED notificação informa que o aplicativo informa que uma conta gerenciada por políticas anteriormente está prestes a ficar não gerenciada. Depois que a conta não for gerenciada, o aplicativo não poderá mais ler os arquivos criptografados dessa conta, ler os dados da conta criptografados com MAMDataProtectionManager, interagir com a área de transferência criptografada ou participar do ecossistema de aplicativos gerenciados.

Isso não requer a eliminação de dados do usuário ou a assinatura do usuário (se um apagamento fosse necessário, 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 chamar o receptor do MANAGEMENT_REMOVED aplicativo, o seguinte será verdadeiro:

  • O SDK já descriptografou arquivos criptografados anteriormente (mas não buffers de dados protegidos) pertencentes ao aplicativo. Os arquivos em locais públicos no sdcard que não pertencem diretamente ao aplicativo (por exemplo, as pastas Documentos ou Download) não são descriptografados.

  • Novos arquivos ou buffers de dados protegidos criados pelo método receptor (ou qualquer outro código em execução após o início do receptor) não serão criptografados.

  • O aplicativo ainda tem acesso a chaves de criptografia, portanto, operações como descriptografar buffers de dados terão êxito.

Depois que o receptor do aplicativo retornar, ele não terá mais acesso a 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, chame 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 será invocado individualmente para cada notificação recebida e deve retornar um boolean. Geralmente, esse método deve sempre 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 (descritos abaixo). Nesse caso, registre 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 pode responder.
  • Ele pode criar várias implementações MAMNotificationReceiver que cada uma responde ao mesmo tipo de notificação. Nesse caso, ambos devem ser registrados no mesmo tipo de notificação.

Dica

É seguro bloquear MAMNotificationReceiver.onReceive porque o retorno de chamada não está em execução no thread da interface do usuário.

Temas personalizados

Um tema personalizado pode ser fornecido ao SDK do Aplicativo do Intune; esse tema personalizado será aplicado a todas as telas e caixas de diálogo do SDK. Se um tema não for fornecido, o tema SDK padrão será usado.

Fornecendo um tema personalizado

Para fornecer um tema, você precisa adicionar a seguinte linha de código no Application.onMAMCreate método:

MAMThemeManager.setAppTheme(R.style.AppTheme);

No exemplo acima, você precisa substituir R.style.AppTheme pelo tema de estilo que deseja que o SDK aplique.

Gerenciamento de certificados raiz confiáveis

Se seu aplicativo exigir certificados SSL/TLS emitidos por uma autoridade de certificado local ou privada para fornecer acesso seguro a sites e aplicativos internos, o SDK de Aplicativo do Intune adicionou suporte ao gerenciamento de confiança de certificado usando as classes de API MAMTrustedRootCertsManager e MAMCertTrustWebViewClient.

Observação

O MAMCertTrustWebViewClient dá suporte ao Android 10 ou superior.

O Gerenciamento de Certificados Raiz Confiáveis fornece suporte para:

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • Webview

Requisitos

Observação

O Gerenciamento de Certificados Raiz Confiáveis pode ser usado independentemente do Microsoft Tunnel Gateway de VPN, no entanto, 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 usam os certificados raiz confiáveis do Intune entregues por meio do Configuração de Aplicativos Policy como uma opção de fallback se os repositórios de certificado 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 desses recursos:

  • Âncoras de confiança personalizadas com CAs adicionais, como certificados autoassinados.
  • Regras específicas do domínio para limitar CAs confiáveis.
  • Fixar conjuntos de certificados para domínios específicos.

Observação

Saiba mais sobre a Configuração de Segurança de Rede do Android em: Configuração de segurança de rede

Se alguma delas se aplicar a um domínio que está sendo verificado em busca de confiança, o Gerenciamento de Certificados Raiz Confiáveis ignorará as verificações de confiança personalizadas para esse domínio e permitirá que apenas os gerentes de confiança padrão da plataforma façam as verificações.

Classe MAMTrustedRootCertsManager

Esta classe fornece as seguintes APIs:

  • createSSLContext(String identity, String protocol): cria um SSLContext objeto que usa certificados raiz confiáveis para a identidade especificada e o protocolo SSL/TLS especificado. O objeto retornado SSLContext dessa classe já é inicializado corretamente com X509TrustManager objetos que usam os certificados raiz confiáveis combinados do dispositivo e do serviço MAM.
  • createSSLSocketFactory(String identity, String protocol): cria um SSLSocketFactory objeto que usa certificados raiz confiáveis para a identidade especificada e o protocolo SSL/TLS especificado. O objeto retornado SSLSocketFactory é referenciado do mesmo SSLContext objeto nesta classe.
  • createX509TrustManagers(String identity): cria uma matriz de X509TrustManager objetos que usam os certificados raiz confiáveis combinados do dispositivo e do serviço MAM para a identidade especificada.

Observação

identity Espera-se que o parâmetro seja um identificador de cadeia de caracteres para um determinado usuário que executa o aplicativo, como seu UPN. No caso de o identificador de usuário ser desconhecido de antemão, um valor de nulo pode ser passado e o MAM tentará descobrir a identidade correta do thread ou processo no qual essas APIs são invocadas. A identidade deve ser definida no processo ou thread corretamente para que o MAM descubra a identidade. Para saber mais sobre como definir a identidade ativa em um processo ou thread, visite: Estágio 5: Multi-Identidade

Observação

Quando o protocol parâmetro não é fornecido, o protocolo SSL/TLS com maior suporte na plataforma é usado.

Aqui estão alguns exemplos de como usar essa classe.

Exemplo usando HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactory(identity, "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.createX509TrustManagers(identity);

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

Classe MAMCertTrustWebViewClient

Essa classe fornece uma implementação personalizada da classe android.webkit.WebViewClient Android que fornece uma maneira de lidar com o erro android.net.http.SslError.SSL_UNTRUSTED SSL no WebView. Ao lidar com o erro, a classe usa certificados raiz confiáveis configurados no Intune e recebidos do serviço MAM para marcar a confiabilidade do host da URL de destino que gerou o erro SSL em WebView. Se a implementação personalizada não manipular o erro SSL, o comportamento padrão herdado da superclasse será invocado. Ao usar essa classe, você deve criar uma instância dela e, em seguida, chamar 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
...

Critérios de saída

Consulte Testar rapidamente com a política de alteração para facilitar o teste.

Validando salvar para / abrir de restrições

Ignore se você não implementou a Política para limitar a transferência de dados entre aplicativos e dispositivos ou locais de armazenamento na nuvem.

Refamiliarize-se em 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 inclua apenas suporte para salvar e abrir dados de OneDrive for Business de um único local dentro do aplicativo. No entanto, você deve validar todas as combinações: cada local de salvamento com suporte em cada lugar em que seu aplicativo permite salvar dados e cada local aberto com suporte em cada lugar em que seu aplicativo permite a abertura de dados.

Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; faça logon com uma conta gerenciada antes de iniciar o teste. Além disso:

  • Defina a política da conta gerenciada como:
    • "Enviar dados da organização para outros aplicativos" para "Aplicativos gerenciados por políticas".
    • "Receber dados de outros aplicativos" para "Aplicativos gerenciados por políticas".
Cenário Pré-condições Etapas
Salvar para, totalmente permitido Política "Salvar cópias de dados da organização" definida como "Permitir" – Navegue até onde seu aplicativo pode salvar dados para OneDrive for Business.
- Tente salvar um documento para OneDrive for Business, para a mesma conta gerenciada registrada em seu aplicativo.
- Confirme se a salvação é permitida.
Salvar para, isento - Política "Salvar cópias de dados da organização" definida como "Bloquear"
- Política "Permitir que o usuário salve cópias em serviços selecionados" definida apenas como "OneDrive for Business"
– Navegue até onde seu aplicativo pode salvar dados para OneDrive for Business.
- Tente salvar um documento para OneDrive for Business, para a mesma conta gerenciada registrada em seu aplicativo.
- Confirme se a salvação é permitida.
- Se o aplicativo permitir, tente salvar o arquivo em um local de armazenamento na nuvem diferente e confirme se ele está bloqueado.
Salvar para, bloqueado Política "Salvar cópias de dados da organização" definida como "Bloquear" – Navegue até onde seu aplicativo pode salvar dados para OneDrive for Business.
- Tente salvar um documento para OneDrive for Business, para a mesma conta gerenciada registrada em seu aplicativo.
- Confirme se a salvação está bloqueada.
- Se o aplicativo permitir, tente salvar o arquivo em um local de armazenamento na nuvem diferente e confirme se ele está bloqueado.
Abrir de, totalmente permitido Política "Abrir dados em documentos da Organização" definida como "Permitir" – Navegue até onde seu aplicativo pode abrir dados de OneDrive for Business.
– Tente abrir um documento de OneDrive for Business, da mesma conta gerenciada registrada no armazenamento do aplicativo.
- Confirme se a abertura é permitida.
Abrir 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 como "OneDrive for Business"
– Navegue até onde seu aplicativo pode abrir dados de OneDrive for Business.
– Tente abrir um documento de OneDrive for Business, da mesma conta gerenciada registrada no armazenamento do 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, bloqueado Política "Abrir dados em documentos da Organização" definida como "Bloquear" – Navegue até onde seu aplicativo pode abrir dados de OneDrive for Business.
– Tente abrir um documento de OneDrive for Business, da mesma conta gerenciada registrada no armazenamento do 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 se você não implementou a Política para restringir o conteúdo dentro de notificações.

No que diz respeito à Política de Proteção de Aplicativo, seu aplicativo pode disparar três tipos diferentes de notificações:

  1. Notificações que não contêm dados de conta.
  2. Notificações que contêm dados pertencentes a uma conta gerenciada.
  3. Notificações que contêm dados pertencentes a uma conta não gerenciada.

Se o aplicativo for de identidade única, somente os dois primeiros serão relevantes, pois nenhuma proteção será aplicada se a conta exclusiva não for gerenciada.

As restrições de notificação podem ser validadas disparando todos os três tipos de notificações com valores de política diferentes configurados.

Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; faça logon com uma conta gerenciada antes de iniciar o teste. Se seu aplicativo for de várias identidades, faça logon no aplicativo com uma conta não gerenciada.

Cenário Pré-condições 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 de conta.
– Confirme se essa notificação não exibe nenhum conteúdo.
– Acione seu aplicativo para disparar uma notificação com os dados da conta gerenciada.
– Confirme se essa 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 essa 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 de conta.
– Confirme se essa notificação exibe o conteúdo completo.
– Acione seu aplicativo para disparar uma notificação com os dados da conta gerenciada.
- Confirme se essa notificação redigi o conteúdo da conta gerenciada.
– Acione seu aplicativo para disparar uma notificação com os dados da conta não gerenciada.
– Confirme se essa notificação exibe o conteúdo completo.
Nenhum conteúdo bloqueado Política de "notificações de dados da organização" definida como "Permitir"

Validando o backup e a restauração de dados

Ignore se você não implementou a Política para proteger dados de backup.

Familiarize-se novamente com o conteúdo (arquivos e/ou pares de valor-chave) 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; faça logon com uma conta gerenciada antes de iniciar o teste. Se seu aplicativo for de várias identidades, faça logon no aplicativo com uma conta não gerenciada.

Siga as instruções oficiais do Android para testar o backup. Essas instruções diferem para backup automático e backups de chave/valor, portanto, siga de perto.

Validando a captura de tela personalizada em relação à política

Ignore se você não implementou restrições personalizadas de captura de tela.

Se seu aplicativo tiver um recurso que ignora o nível FLAG_SECUREdo WindowAndroid, valide se esse recurso está bloqueado pelas restrições de captura de tela da política de proteção de aplicativo.

Para esses testes, instale seu aplicativo e o Portal da Empresa do Intune; faça logon com uma conta gerenciada antes de iniciar o teste.

Cenário Pré-condições Etapas
Captura de tela bloqueada Política "Captura de tela e Google Assistente" definida como "Bloquear" – Navegue até o local em seu aplicativo que aproveita seu código de FLAG_SECURE personalizado.
– Tente utilizar esse recurso.
- Confirme se o recurso está bloqueado.
Captura de tela permitida Política "Captura de tela e Google Assistente" definida como "Permitir" – Navegue até o local em seu aplicativo que aproveita seu código de FLAG_SECURE personalizado.
– Tente utilizar esse recurso.
- Confirme se o recurso é permitido.

Validando a CA da Proteção de Aplicativos

Ignore se você não implementou a AC de Proteção de Aplicativo de Suporte.

Além das etapas típicas de validação de criar e atribuir política de proteção de aplicativo à sua conta de teste e aplicativo, você também deve criar e atribuir uma política de Acesso Condicional de Proteção de Aplicativo à sua conta de teste. Consulte Configurar políticas de Acesso Condicional baseadas em aplicativo com o Intune para obter detalhes.

Etapas de teste:

  1. Desinstale o Microsoft Authenticator e Portal da Empresa do Intune antes de iniciar este teste.
  2. Instale seu aplicativo.
  3. Faça logon em seu aplicativo com sua conta de teste que é direcionada com a política de proteção de aplicativo e a política de AC baseada em aplicativo.
  4. Confirme se o aplicativo solicita que você instale o Portal da Empresa.
  5. Faça logon novamente.
  6. Confirme se seu aplicativo solicita que você registre seu dispositivo. Siga os prompts. Se o aplicativo não solicitar o registro aqui, confirme se seu dispositivo de teste desinstalou outros aplicativos habilitados para SDK, Portal da Empresa e Authenticator primeiro. Se isso ainda não solicitar, revisite as instruções de implementação acima.
  7. Confirme se você pode acessar todos os dados do aplicativo após o registro.

Validando receptores de notificação

Ignore se você não implementou o Registro para notificações do SDK.

As etapas de validação dependem do tipo de notificações para as quais seu aplicativo se registrou. Para todos os tipos de notificações, adicione log para garantir que o receptor esteja sendo invocado corretamente.

MAM_ENROLLMENT_RESULT pode ser disparado simplesmente pelo primeiro logon em seu aplicativo com uma conta direcionada à política de proteção de aplicativo.

REFRESH_APP_CONFIGe REFRESH_POLICY pode ser disparado atualizando os respectivos Configuração de Aplicativos Política e Política de Proteção de Aplicativo direcionadas à sua conta de teste e aguardando que o SDK receba a política atualizada.

Dica

Consulte Testar rapidamente com a alteração da política para acelerar esse processo.

MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAas WIPE_COMPLETED notificações podem ser disparadas emitindo um apagamento seletivo de Microsoft Intune.

Validando temas personalizados

Ignore se você não implementou Temas Personalizados.

O suporte ao tema personalizado pode ser validado inspecionando as cores nas caixas de diálogo do SDK. A caixa de diálogo mais simples para marcar é a tela PIN do MAM.

Pré-condições:

  • Defina a política da conta gerenciada como:
    • "PIN para acesso" a "Obrigatório".
  • Instale seu aplicativo e o Portal da Empresa do Intune.

Etapas de teste:

  1. Inicie seu aplicativo e faça logon com a conta de teste.
  2. Confirme se a tela PIN do MAM é exibida e é temática com base no tema personalizado fornecido ao SDK.

Próximas etapas

Se você seguiu este guia em ordem e concluiu todos os Critérios de Saída acima, parabéns, seu aplicativo agora está totalmente integrado ao SDK do Aplicativo do Intune e pode impor políticas de proteção de aplicativo! Se você ignorou uma das seções anteriores de participação do aplicativo, Estágio 5: Multi-Identidade e Estágio 6: Configuração de Aplicativos e não tem certeza se seu aplicativo deve dar suporte a esses recursos, revisite As Principais Decisões para integração do SDK.

Proteção de aplicativos agora é um cenário central para seu aplicativo. Continue a se referir a este guia e ao Apêndice à medida que você continua desenvolvendo seu aplicativo.