Compartilhar via


SDK da Aplicação Intune para Android – Princípios essenciais da integração de MAM

O SDK da Aplicação Microsoft Intune para Android permite-lhe incorporar políticas de proteção de aplicações do Intune (também conhecidas como políticas de APLICAÇÃO ou MAM) na sua aplicação Java/Kotlin Android nativa. Uma aplicação gerida pelo Intune é uma aplicação integrada com o SDK da Aplicação intune. Os administradores do Intune podem facilmente implementar políticas de proteção de aplicações na sua aplicação gerida pelo Intune quando o Intune gere ativamente a aplicação.

Observação

Este guia está dividido em várias fases distintas. Comece por rever a Fase 1: Planear a Integração.

Fase 4: Integração de MAM – Versão Essentials

Objetivos de Fase

  • Ative o Modo Restrito de MAM.
  • Registe-se para receber notificações críticas do SDK.
  • Implemente e registe uma chamada de retorno de autenticação para fornecer tokens do Microsoft Entra da MSAL ao SDK.
  • Registar novas contas para a gestão de MAM após a autenticação com a MSAL.
  • Anule o registo de contas ao terminar sessão para remover dados empresariais.
  • (Recomendado) Incorpore o registo de MAM na sua aplicação.
  • (Recomendado) Saiba como utilizar a caixa de diálogo de diagnóstico do SDK.

Histórico

Agora que transferiu o SDK da Aplicação intune, integrou-se na sua compilação e efetuou com êxito substituições de classes e métodos, está na altura de fazer as alterações essenciais ao código para começar a impor as definições da política de proteção de aplicações para contas protegidas por MAM.

Esta fase indica-lhe como ligar ao registo do SDK, invocar uma caixa de diálogo de diagnóstico, ativar o Modo Estrito de MAM para identificar possíveis erros de integração, registar-se para receber notificações do SDK e, mais importante, como registar uma conta para a MAM do Intune para começar a receber a política.

Modo Estrito de MAM

O Modo Restrito de MAM pode identificar potenciais erros na integração da sua aplicação no SDK da Aplicação intune. Estes erros de integração podem resultar em falhas ao aplicar corretamente a política de proteção de aplicações e deixar os dados empresariais desprotegidos. Como resultado, é necessária a utilização do Modo Estrito de MAM.

O Modo Restrito de MAM procura anomalias na utilização da sua aplicação de APIs de MAM e APIs de plataforma restritas de MAM. Um padrão simples após o StrictMode do Android, o Modo Estrito de MAM executa um conjunto predefinido de verificações que geram erros de runtime quando falham. O Modo Estrito de MAM não se destina a ser deixado ativado em versões de produção; em vez disso, utilize-o nas compilações internas de desenvolvimento, depuração e/ou dogfood da sua aplicação.

Para ativar o Modo Restrito de MAM, chame

MAMStrictMode.enable();

Inicialização da aplicação (por exemplo, Application.onCreate).

Quando uma verificação do Modo Restrito de MAM falha, tente determinar se é um problema real que pode ser corrigido na sua aplicação ou um falso positivo. Se acredita que é um falso positivo ou não tem a certeza, informe a equipa de MAM do Intune. Isto irá permitir-nos garantir que concordamos com a determinação de falsos positivos e tentar melhorar a deteção para lançamentos futuros. Para suprimir falsos positivos, desative a verificação com falhas ao seguir as instruções abaixo.

Lidar com Violações

Quando uma verificação falha, executa um MAMStrictViolationHandler. O processador predefinido gera um Error, que se espera que falhe na aplicação. Isto é para tornar as falhas o mais ruidosas possível e adequa-se à intenção de que o modo rigoroso não deve ser ativado nas compilações de produção.

Se a sua aplicação quiser lidar com violações de forma diferente, pode fornecer o seu próprio processador ao chamar:

MAMStrictMode.global().setHandler(handler);

Onde handler implementa MAMStrictViolationHandlero .

Suprimir Verificações

Se uma verificação falhar numa situação em que a aplicação não está a fazer nada de incorreto, comunique-a conforme mencionado acima. Entretanto, poderá ser necessário desativar a verificação com um falso positivo, pelo menos enquanto aguarda por um SDK atualizado. A verificação, que falhou, será apresentada no erro gerado pelo processador predefinido ou será transmitida para um processador personalizado, se definido.

Embora as supressões possam ser feitas globalmente, é preferível desativar temporariamente por thread no site de chamada específico. Os exemplos seguintes mostram várias formas de desativar MAMStrictCheck.IDENTITY_NO_SUCH_FILE (gerado se for efetuada uma tentativa de proteger um ficheiro, que não existe).

Supressão Temporária Per-Thread

Este é o mecanismo de supressão preferencial.

try (StrictScopedDisable disable = MAMStrictMode.thread().disableScoped(MAMStrictCheck.IDENTITY_NO_SUCH_FILE)) {
    // Perform the operation which raised a violation here
}
// The check is no longer disabled once the block exits

Supressão Permanente Per-Thread

MAMStrictMode.thread().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Supressão Global (Em Todo o Processo)

MAMStrictMode.global().disable(MAMStrictCheck.IDENTITY_NO_SUCH_FILE);

Registar-se para receber notificações do SDK

O SDK da Aplicação Intune emite vários tipos diferentes de notificações para informar as aplicações de operações de gestão sensíveis ao tempo. A sua aplicação pode registar-se e tomar medidas ao receber qualquer uma destas notificações.

Por exemplo, sempre que um administrador de TI emite um comando de eliminação seletiva para um dispositivo, o serviço do Intune envia uma notificação para o SDK, que é transmitida à sua aplicação como WIPE_USER_DATA. A sua aplicação pode escutar esta notificação e controlar que dados são apagados; ou pode depender do comportamento de eliminação predefinido do SDK.

Muitas das notificações são opcionais. Dependendo das funcionalidades do SDK que a sua aplicação utiliza, poderão ser necessárias algumas notificações. Veja Registar notificações do SDK na Fase 7: Funcionalidades de Participação da Aplicação para obter detalhes sobre como se registar para receber notificações, quais as notificações que o SDK fornece e como lidar com tipos de notificação específicos.

Registar-se na Política de Proteção de Aplicações

Quando os administradores criam Políticas de Proteção de Aplicações, direcionam estas políticas para contas específicas na organização. No cliente, o SDK precisa de saber que conta está a utilizar a aplicação para que possa obter a política dessa conta e impor as definições adequadamente. A sua aplicação é responsável por fornecer ao SDK estas informações de conta. Este processo chama-se registo.

Sempre que a aplicação adiciona uma nova conta, tem de registar a conta no SDK, mesmo que outras contas já estejam registadas. A sua aplicação pode registar várias contas. No entanto, atualmente, apenas uma conta pode ser inscrita ou ter a política de proteção de aplicações aplicada. No Android, esta limitação de conta gerida única é ao nível do dispositivo.

Registo vs Inscrição

O registo é o processo em que a sua aplicação informa o SDK de que está a ser utilizada uma nova conta. O SDK contém funções que a sua aplicação tem de chamar para registar e anular o registo de contas.

A inscrição é o processo em que o SDK regista a conta registada no serviço do Intune para que possa aplicar a política da conta. A sua aplicação não precisa de chamar nenhuma função para inscrição. O SDK processa totalmente a inscrição depois de uma conta ser registada.

Se uma conta já estiver inscrita na sua aplicação, quando registar outra conta, mesmo que essa conta seja direcionada para Políticas de Proteção de Aplicações, essa segunda conta não será inscrita e a política não será aplicada.

Observação

O termo "inscrição" também pode referir-se à inscrição mdm em todo o dispositivo Saiba mais no Apêndice na inscrição MDM e MAM.

Implementar o registo

Cuidado

Se a sua aplicação não integrar o MSAL (vivamente recomendado), veja Inscrição Predefinida no Apêndice em vez de continuar esta secção.

A aplicação tem de efetuar três alterações de código para registar com êxito uma conta:

  1. A aplicação tem de implementar e registar uma instância da interface MAMServiceAuthenticationCallback . A instância de chamada de retorno tem de estar registada no onCreate() método (ou onMAMCreate()) da subclasse da Aplicação.

  2. Quando uma conta é criada e o utilizador inicia sessão com êxito na MSAL, a aplicação tem de chamar registerAccountForMAM.

  3. Quando uma conta é removida, a aplicação deve chamar unregisterAccountForMAM para remover a conta da gestão do Intune.

    Cuidado

    A chamada pode iniciar uma eliminação para remover completamente os dados empresariais da conta.

Todas as APIs de autenticação e registo necessárias podem ser encontradas na interface MAMEnrollmentManager . Uma referência ao pode ser obtida da MAMEnrollmentManager seguinte forma:

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

// make use of mgr

É MAMEnrollmentManager garantido que a instância devolvida não é nula. Os métodos de API enquadram-se em duas categorias: autenticação e registo de conta.

MAMEnrollmentManager e Autenticação

O SDK comunica frequentemente com o serviço intune: para inscrever contas registadas, obter atualizações para as definições da Política de Proteção de Aplicações e obter ações de administração pendentes, como limpar seletivamente os dados protegidos dentro da sua aplicação. Para comunicar com êxito com o serviço do Intune, o SDK requer tokens de acesso novos de aplicações que tenham o MSAL integrado.

Se o SDK não conseguir obter um token novo, não conseguirá comunicar com o serviço do Intune, o que pode atrasar a obtenção e a imposição de novas definições de política ou ações de administrador. É fundamental que a sua aplicação conclua estes passos para garantir uma aplicação totalmente integrada da política.

Na Fase 2, integrou a MSAL na sua aplicação para autenticação e aquisição de tokens de acesso. Aqui, vai implementar uma chamada de retorno de autenticação para permitir que o SDK peça os tokens necessários.

MAMEnrollmentManager tem os seguintes métodos de autenticação:

interface MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String resourceId);
}
interface MAMServiceAuthenticationCallbackExtended extends MAMServiceAuthenticationCallback {
    String acquireToken(String upn, String aadId, String tenantId, String authority, String resourceId);
}
void registerAuthenticationCallback(MAMServiceAuthenticationCallback callback);
void updateToken(String upn, String aadId, String resourceId, String token);
  1. A aplicação tem de implementar a interface MAMServiceAuthenticationCallback ou a MAMServiceAuthenticationCallbackExtended interface para permitir que o SDK solicite um token do Microsoft Entra para a conta e o ID de recurso especificados. A instância de chamada de retorno tem de ser fornecida ao ao chamar o MAMEnrollmentManager respetivo método registerAuthenticationCallback . Pode ser necessário um token no início do ciclo de vida da aplicação para repetições de inscrição ou registos de atualização da política de proteção de aplicações, pelo que a chamada de retorno tem de ser registada no onCreate() método (ou onMAMCreate()) da subclasse da Application aplicação.

  2. O acquireToken método deve adquirir o token de acesso para o ID de recurso pedido para a conta especificada. Se não conseguir adquirir o token pedido, deverá devolver nulo.

    Dica

    Certifique-se de que a aplicação utiliza os resourceId parâmetros e aadId transmitidos para acquireToken() para que o token correto seja adquirido. O resourceId deve ser utilizado para gerar os âmbitos adequados e o aadId deve ser utilizado para transmitir a conta correta. Se a sua aplicação precisar da Autoridade do Microsoft Entra para adquirir o token corretamente, implemente a MAMServiceAuthenticationCallbackExtended interface.

    class MAMAuthCallback implements MAMServiceAuthenticationCallback {
        public String acquireToken(String upn, String aadId, String resourceId) {
            final String[] scopes = {resourceId + "/.default"};
    
            final IAccount account = getAccount(aadId);
            if (account == null) {
                callback.onError(
                        new MsalUiRequiredException(MsalUiRequiredException.NO_ACCOUNT_FOUND, "no account found for " + aadId));
                return;
            }
    
            AcquireTokenSilentParameters params =
                new AcquireTokenSilentParameters.Builder()
                        .forAccount(account)
                        .fromAuthority(account.getAuthority())
                        .withScopes(Arrays.asList(scopes))
                        .withCallback(callback)
                        .build();
    
            return mMsalClientApplication.acquireTokenSilent(params);
        }
    
        private static IAccount getAccount(String aadId) throws InterruptedException, MsalException {
          IAccount account = null;
    
          if (mMsalClientApplication instanceof IMultipleAccountPublicClientApplication) {
              IMultipleAccountPublicClientApplication multiAccountPCA =
                      (IMultipleAccountPublicClientApplication) mMsalClientApplication;
    
              account = multiAccountPCA.getAccount(aadId);
          } else {
              ISingleAccountPublicClientApplication singleAccountPCA =
                      (ISingleAccountPublicClientApplication) mMsalClientApplication;
    
              ICurrentAccountResult accountResult = singleAccountPCA.getCurrentAccount();
              if (accountResult != null) {
                  account = accountResult.getCurrentAccount();
                  // make sure this is the correct user
                  if (account != null && !account.getId().equals(aadId))
                      account = null;
              }
          }
          return account;
      }
    }
    
  3. Caso a aplicação não consiga fornecer um token quando o SDK chama acquireToken() , por exemplo, se a autenticação silenciosa falhar e for um momento inconveniente para mostrar uma IU, a aplicação pode fornecer um token posteriormente ao chamar o método updateToken . O mesmo UPN, o Microsoft Entra ID e o ID de recurso pedidos pela chamada anterior para acquireToken() têm de ser transmitidos para updateToken(), juntamente com o token que foi finalmente adquirido. A aplicação deve chamar este método assim que possível depois de devolver nulo da chamada de retorno fornecida.

    Aviso

    Não chame updateToken() a partir da implementação do acquireToken(). updateToken() deve ser utilizado no caso acquireToken() de não ser possível adquirir um token.

    Observação

    O SDK irá chamar acquireToken() periodicamente para obter o token, pelo que a chamada updateToken() não é estritamente necessária. No entanto, é vivamente recomendado, uma vez que pode ajudar as inscrições e as verificações de políticas de proteção de aplicações a concluir em tempo útil.

Notas de Implementação de Autenticação

  • As aplicações são encorajadas a adquirir tokens do Microsoft Entra antes de chamar registerAccountForMAM. Depois de registar uma conta, as aplicações receberão uma chamada de retorno para o método do acquireToken() registado MAMServiceAuthenticationCallbacknum thread diferente. Fornecer um token válido nessa chamada de retorno permite que a inscrição prossiga. A aplicação obtém o resultado da inscrição através de notificação.

  • Se a aplicação não devolver um token válido do Microsoft Entra, o resultado final da tentativa de inscrição será AUTHORIZATION_NEEDED. Se a aplicação receber este Resultado através de notificação, é recomendado agilizar o processo de inscrição ao adquirir o token para a conta e o recurso pedidos anteriormente a partir de acquireToken e ao chamar o método updateToken para iniciar novamente o processo de inscrição.

  • O registo MAMServiceAuthenticationCallback da aplicação também será chamado para adquirir um token para as verificações periódicas de atualização da política de proteção de aplicações. Se a aplicação não conseguir fornecer um token quando solicitado, não receberá uma notificação, mas deverá tentar adquirir um token e chamar updateToken() na próxima altura conveniente para agilizar o processo de entrada. Se não for fornecido um token, a chamada de retorno ainda poderá ser chamada na próxima tentativa de entrada.

  • O suporte para clouds soberanas requer o fornecimento da autoridade.

  • Se MAMServiceAuthenticationCallbackExtended a interface for implementada, o método herdado acquireToken() de MAMServiceAuthenticationCallback não precisa de ser implementado, uma vez que a MAMServiceAuthenticationCallbackExtended interface fornece uma implementação predefinida.

MAMEnrollmentManager e Registo

Sempre que a aplicação adiciona uma conta, tem de registar a conta no SDK. Da mesma forma, sempre que a aplicação remover uma conta, deve anular o registo dessa conta para indicar que a aplicação já não deve aplicar a política a essa conta. Se a conta tiver sido inscrita no serviço MAM, a conta será anulada e a aplicação será eliminada.

MAMEnrollmentManager tem os seguintes métodos de registo de conta:

void registerAccountForMAM(String upn, String aadId, String tenantId);
void registerAccountForMAM(String upn, String aadId, String tenantId, String authority);
void unregisterAccountForMAM(String upn, String aadId);
Result getRegisteredAccountStatus(String upn, String aadId);
  1. Para registar uma conta para gestão, a aplicação deve chamar registerAccountForMAM(). Uma conta é identificada pelo respetivo UPN e pelo respetivo ID de utilizador do Microsoft Entra. O ID do inquilino também é necessário para associar os dados de inscrição ao inquilino do Microsoft Entra da conta. A autoridade da conta também pode ser fornecida para permitir a inscrição em clouds soberanas específicas; para obter mais informações, veja Registo de Cloud Soberana. O SDK pode tentar inscrever a aplicação para a conta especificada no serviço MAM; Se a inscrição falhar, repetirá periodicamente a inscrição até que a inscrição seja bem-sucedida ou a conta não seja registada. Normalmente, o período de repetição será de 12 a 24 horas. O SDK fornece o estado das tentativas de inscrição de forma assíncrona através de notificações.

  2. A melhor altura para chamar registerAccountForMAM é depois de o utilizador ter iniciado sessão na aplicação e ser autenticado com êxito com a MSAL. O ID de utilizador e o ID de inquilino do Microsoft Entra da conta são devolvidos a partir da chamada de autenticação MSAL como parte do IAccount relacionado com o IAuthenticationResult.

    • A conta provém do IAuthenticationResult.getAccount() método e contém as informações de conta pertinentes.
    • O ID do AAD provém do IAccount.getId() método .
    • O ID do inquilino provém do IAccount.getTenantId() método .
    • A autoridade vem do IAccount.getAuthority() método .
  3. Para anular o registo de uma conta da gestão do Intune, a aplicação deve chamar unregisterAccountForMAM(). Se a conta tiver sido inscrita com êxito e for gerida, o SDK anula a inscrição da conta e elimina os respetivos dados. As repetições de inscrição periódicas da conta serão interrompidas. O SDK fornece o estado dos pedidos de anulação da inscrição de forma assíncrona através da notificação.

Notas de Implementação do Registo

  • Os métodos de registo são idempotentes. Por exemplo, registerAccountForMAM apenas registará uma conta e tentará inscrever a aplicação se a conta ainda não estiver registada e unregisterAccountForMAM apenas irá anular o registo de uma conta se estiver atualmente registada. As chamadas subsequentes não são opções, pelo que não há nenhum mal em chamar estes métodos mais do que uma vez.

  • Não há garantias de que cada chamada de registo/anulação do registo tenha uma notificação de resultado correspondente. Por exemplo, se registerAccountForMAM() for chamada para uma conta que já está registada, a notificação poderá não ser enviada novamente para essa identidade. Em alternativa, o SDK pode enviar notificações mesmo quando a aplicação não chamou estes métodos, uma vez que o SDK pode tentar periodicamente inscrições em segundo plano e as inscrições podem ser acionadas por pedidos de eliminação recebidos do serviço Intune.

  • Os métodos de registo podem ser chamados para qualquer número de contas diferentes, mas atualmente apenas uma conta pode ser inscrita com êxito. Se várias contas licenciadas para o Intune e direcionadas para a política de proteção de aplicações estiverem registadas em ou perto do mesmo tempo, não há garantias sobre qual delas vencerá a corrida.

  • Pode consultar MAMEnrollmentManager para ver se uma conta específica está registada e para obter o estado atual com o método getRegisteredAccountStatus . Se a conta fornecida não estiver registada, este método devolve nulo. Se a conta estiver registada, este método devolve o estado da conta como um dos membros da enumeração MAMEnrollmentManager.Result .

Registo de Cloud Soberana

O Azure suporta várias clouds fisicamente isoladas, conhecidas como Clouds Soberanas ou Nacionais. Se a sua aplicação tiver conhecimento de cloud soberana, tem de fornecer o authority parâmetro para registerAccountForMAM().

Orientação MSAL

Para MSAL, defina multiple_clouds_supported como true no ficheiro de configuração MSAL.

{
  "multiple_clouds_supported": true,
}

Resultados do Registo e códigos de estado

Quando uma conta é registada pela primeira vez, começa no PENDING estado, indicando que a tentativa inicial de inscrição do serviço MAM está incompleta. Após a conclusão da tentativa de inscrição, será enviada uma notificação com um dos Códigos de resultado na tabela abaixo. Além disso, o método getRegisteredAccountStatus devolve o estado da conta para que a aplicação possa sempre determinar se essa conta tem políticas de proteção de aplicações impostas. Se a tentativa de inscrição falhar, o estado da conta poderá mudar ao longo do tempo à medida que o SDK repete a inscrição em segundo plano.

Código de resultado Explicação
AUTHORIZATION_NEEDED Este resultado indica que um token não foi fornecido pela instância MAMServiceAuthenticationCallback registada da aplicação ou que o token fornecido era inválido. A aplicação deve adquirir um token válido e chamar updateToken , se possível.
NOT_LICENSED A conta não está licenciada para o Intune ou a tentativa de contactar o serviço MAM do Intune falhou. A aplicação deve continuar num estado não gerido (normal) e o utilizador não deve ser bloqueado. As inscrições serão repetidas periodicamente caso a conta fique licenciada no futuro.
ENROLLMENT_SUCCEEDED A tentativa de inscrição foi efetuada com êxito ou a conta já está inscrita. No caso de uma inscrição com êxito, é enviada uma notificação de atualização de política antes desta notificação. O acesso aos dados empresariais deve ser permitido.
ENROLLMENT_FAILED A tentativa de inscrição falhou. Pode encontrar mais detalhes nos registos do dispositivo. A aplicação não deve permitir o acesso a dados empresariais neste estado, uma vez que foi anteriormente determinado que a conta está licenciada para o Intune. Todas as aplicações devem garantir que o acesso a dados empresariais não está autorizado, até que ENROLLMENT_SUCCEEDED seja obtido pela sua aplicação.
WRONG_USER Apenas uma conta por dispositivo pode inscrever uma aplicação com o serviço MAM. Este resultado indica que a conta para a qual este resultado foi entregue (a segunda conta) é direcionada com a política de MAM, mas já está inscrita uma conta diferente. Uma vez que a política de MAM não pode ser imposta para a segunda conta, a aplicação não pode permitir o acesso aos dados desta conta (possivelmente removendo a conta da sua aplicação), a menos que/até que a inscrição para esta conta seja bem-sucedida mais tarde. Em simultâneo com a entrega deste WRONG_USER resultado, a MAM pede a opção para remover a conta existente. Se o utilizador humano responder afirmativamente, será realmente possível inscrever a segunda conta pouco tempo depois. Desde que a segunda conta permaneça registada, a MAM volta a tentar a inscrição periodicamente.
UNENROLLMENT_SUCCEEDED A anulação da inscrição foi bem-sucedida.
UNENROLLMENT_FAILED O pedido de anulação da inscrição falhou. Pode encontrar mais detalhes nos registos do dispositivo. Em geral, isto não ocorrerá enquanto a aplicação passar um UPN válido (nem nulo nem vazio). Não existe uma remediação direta e fiável que a aplicação possa tomar. Se este valor for recebido ao anular o registo de um UPN válido, comunique como um erro à equipa de MAM do Intune.
PENDING A tentativa inicial de inscrição da conta está em curso. A aplicação pode bloquear o acesso aos dados empresariais até que o resultado da inscrição seja conhecido, mas não é necessário fazê-lo.
COMPANY_PORTAL_REQUIRED A conta está licenciada para o Intune, mas a aplicação só pode ser inscrita quando a aplicação Portal da Empresa estiver instalada no dispositivo. O SDK da Aplicação intune tenta bloquear o acesso à aplicação para a conta especificada e direcioná-la para instalar a aplicação Portal da Empresa. Ao enviar esta notificação para a aplicação, o SDK da Aplicação Do Intune mostrará uma IU sem limites sobre a Atividade atual se a Atividade estiver atualmente visível para o utilizador ou se a próxima vez onResume for chamada. Se o utilizador cancelar esta IU sem bloqueio, o SDK da Aplicação intune mostrará uma IU de bloqueio da próxima vez onCreate que for chamada para uma Atividade e a identidade atual for gerida (veja abaixo para obter detalhes sobre a resolução de problemas).

O registo deve ser inicializado mais cedo para tirar o máximo partido dos dados registados. Application.onMAMCreate() é normalmente o melhor local para inicializar o registo.

Para receber registos de MAM na sua aplicação, crie um Processador Java e adicione-o ao MAMLogHandlerWrapper. Esta ação invoca publish() no processador de aplicações para cada mensagem de registo.

/**
 * Global log handler that enables fine grained PII filtering within MAM logs.  
 * To start using this you should build your own log handler and add it via
 * MAMComponents.get(MAMLogHandlerWrapper.class).addHandler(myHandler, false);  
 * You may also remove the handler entirely via
 * MAMComponents.get(MAMLogHandlerWrapper.class).removeHandler(myHandler);
 */
public interface MAMLogHandlerWrapper {
    /**
     * Add a handler, PII can be toggled.
     * @param handler handler to add.
     * @param wantsPII if PII is desired in the logs.    
     */
    void addHandler(final Handler handler, final boolean wantsPII);

    /**
     * Remove a handler.
     * @param handler handler to remove.
     */
    void removeHandler(final Handler handler);
}

Observação

O PII significa "informações pessoais identificáveis" e pode incluir dados como nomes de utilizador e UPNs. Recomendamos vivamente que exclua essas informações pessoais nos seus próprios registos de produção. Consulte a Política de Privacidade da Microsoft para obter mais detalhes.

A aplicação Portal da Empresa do Intune tem várias opções para recolher informações de diagnóstico. O Portal da Empresa inclui a IU que:

  • Permite que os utilizadores finais recolham os registos do Portal da Empresa.
  • Apresenta os metadados do dispositivo e da conta.
  • Inclui informações por aplicação sobre a política de MAM atual.

Informações da Aplicação Intune da IU de Diagnóstico do Intune

Para obter uma explicação detalhada dos dados incluídos nos registos do Portal da Empresa e na IU de diagnóstico, veja Compreender os registos do Portal da Empresa no Apêndice.

Dica

Se estiver a testar com uma conta que deveria ter a política de MAM aplicada, mas os diagnósticos não apresentarem nenhuma política para o nome do pacote da sua aplicação, consulte a secção Resolução de problemas abaixo.

As aplicações podem iniciar esta IU de diagnóstico ao invocar MAMPolicyManager.showDiagnostics(context). Os utilizadores finais também podem iniciar a consola de diagnóstico do Portal da Empresa através do Microsoft Edge, introduzindo about:intunehelp na barra de endereço. Esta é uma funcionalidade opcional que pode ajudar na depuração.

Estas informações de diagnóstico só estão disponíveis quando o Portal da Empresa está instalado no dispositivo. Será apresentada uma caixa de diálogo de aviso sempre que showDiagnostics for chamada sem o Portal da Empresa instalado.

Critérios de Saída

Nesta fase da integração, a sua aplicação pode agora receber e impor a Política de Proteção de Aplicações. Execute os seguintes testes para validar a integração.

Primeiro Teste de Aplicação de Política

Execute primeiro o seguinte teste para se familiarizar com a experiência completa do utilizador final da aplicação de política na sua aplicação:

  1. Crie uma Política de Proteção de Aplicações Android no centro de administração do Microsoft Intune (consulte Criar uma política de proteção de aplicações Android de teste na Fase 1 para obter detalhes). Para este teste, configure a política:
    • Em Proteção de Dados, defina "Captura de ecrã e Assistente do Google" como "Bloquear".
    • Em Requisitos de Acesso, deixe as predefinições. Nomeadamente, "PIN para Acesso" deve ser "Exigir".
  2. Certifique-se de que a Política de Proteção de Aplicações está direcionada para a sua aplicação. Provavelmente terá de adicionar manualmente o nome do pacote no assistente de criação de políticas.
  3. Atribua a Política de Proteção de Aplicações a um grupo de utilizadores que contenha a sua conta de teste.
  4. Num dispositivo Android de teste, desinstale outras aplicações integradas no SDK, como o Microsoft Outlook, Teams, OneDrive e Office. Desinstale também a aplicação Portal da Empresa do Intune e a aplicação Microsoft Authenticator.
    • Dica

      Desinstalar outras aplicações integradas no SDK ajuda a garantir que está a testar exclusivamente a integração da sua própria aplicação.

  5. Instale a sua aplicação.
  6. Inicie sessão na sua aplicação com a sua conta de teste direcionada para a Política de Proteção de Aplicações.
  7. Confirme que lhe é pedido para instalar o Portal da Empresa do Intune a partir do Google Play.
    • Observação

      Se o seu dispositivo de teste não tiver a aplicação Google Play Store, confirme que lhe é pedido para instalar o Portal da Empresa do Intune a partir de outra loja de aplicações ou de um site da Microsoft.

  8. Instale o Portal da Empresa. Não precisa de iniciar o Portal da Empresa ou iniciar sessão no Portal da Empresa.
  9. Volte à sua aplicação e inicie sessão novamente, se necessário.
  10. Confirme que lhe foi pedido com um ecrã Obter Acesso. Isto indica que o SDK obteve com êxito a política para esta conta.
  11. Deverá ser-lhe pedido para definir um PIN da aplicação. Criar um PIN.
  12. Navegue pela sua aplicação e tente efetuar capturas de ecrã. Dado que o SDK tem uma política, este procedimento deve ser bloqueado de forma consistente em qualquer ecrã.
  13. Registe a conta gerida na sua aplicação.
  14. Se possível, sem iniciar sessão, navegue pela sua aplicação e tente efetuar capturas de ecrã. Agora que a conta foi removida, esta ação não deve ser bloqueada.

Este é um teste mínimo simples para confirmar que a sua aplicação registou corretamente a conta, registou a chamada de retorno de autenticação e anula o registo da conta. Execute os seguintes testes para validar mais detalhadamente a forma como outras definições da Política de Proteção de Aplicações modificam o comportamento da sua aplicação.

Testes de Proteção de Dados

Os seguintes testes abrangem definições específicas de proteção de dados configuradas na Política de Proteção de Aplicações. Quando altera as definições da Política de Proteção de Aplicações no centro de administração do Microsoft Intune, o cliente não será atualizado imediatamente. Veja Testar rapidamente com a alteração da política para obter sugestões sobre como acelerar os testes.

Para estes testes:

  1. Instale a sua aplicação.
  2. Instale o Portal da Empresa do Intune.
  3. Instale outra aplicação gerida, direcionada com a mesma política que a sua aplicação, que pode copiar e colar dados (como o Microsoft Office).
  4. Instale (ou reutilize) qualquer aplicação não gerida que possa copiar e colar dados.
  5. Inicie sessão na sua aplicação com a conta gerida de teste.
  6. Inicie sessão na outra aplicação gerida com a conta de teste gerida.
Cenário Definição da Política de Proteção de Aplicações Passos de Teste
Captura de tela "Captura de ecrã e Assistente google" definido como "Bloquear" 1. Navegue para todas as páginas na sua aplicação.
2. Tente efetuar uma captura de ecrã em cada página.
3. Confirme que as capturas de ecrã estão bloqueadas ou se a imagem guardada está totalmente em branco.
Copiar texto "Restringir cortar, copiar e colar entre outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não tiver texto para copiar, ignore.
1. Navegue para todas as páginas na sua aplicação que tenham texto copiável.
2. Copiar texto.
3. Mude para a aplicação não gerida.
4. Tente colar na aplicação não gerida.
5. Confirme que a pasta está bloqueada.
6. Navegue para a outra aplicação gerida.
7. Tente colar na aplicação gerida.
8. Confirme que a colagem é permitida.
Colar texto "Restringir cortar, copiar e colar entre outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não tiver entradas de texto para colar, ignore.
1. Mude para a aplicação não gerida.
2. Copie texto da aplicação não gerida.
3. Navegue para todas as páginas na sua aplicação que tenham entradas de texto.
5. Tente colar a partir da aplicação não gerida.
5. Confirme que a pasta está bloqueada.
6. Mude para a outra aplicação gerida.
7. Copie o texto da outra aplicação gerida.
7. Navegue para todas as páginas na sua aplicação que tenham entradas de texto.
8. Tente colar a partir da outra aplicação gerida.
9. Confirme que a colagem é permitida.
Impressão "Imprimir dados da Organização" definido como "Bloquear" 0. Se a sua aplicação não tiver páginas ou documentos que possam ser impressos, ignore.
1. Navegue para todas as páginas na sua aplicação que invocam a função de impressão do Android.
2. Tente imprimir a partir de cada página.
3. Confirme que a impressão está bloqueada.
Navegador gerenciado "Restringir a transferência de conteúdos Web com outras aplicações" definido como "Microsoft Edge" 0. Se a sua aplicação não compor weblinks, ignore.
1. Navegue para todas as páginas na sua aplicação que podem apresentar weblinks ou ter entradas de texto que são compostas em weblinks clicáveis.
2. Para cada página, selecione a weblink.
3. Confirme que lhe é pedido para instalar o Microsoft Edge e que a weblink não é aberta noutro browser.
Teclado restrito "Teclados aprovados" definido como "Obrigatório"
"Selecionar teclados a aprovar" definido para apenas um pacote de teclado que o seu dispositivo não tenha atualmente instalado
0. Se a sua aplicação não tiver entradas de texto, ignore.
1. Navegue para todas as páginas na sua aplicação que tenham entradas de texto.
2. Selecione a entrada de texto para apresentar o teclado do dispositivo.
3. Confirme que lhe é pedido para instalar o teclado aprovado configurado e que o teclado do dispositivo atual não é aberto.

Testes de Transferência de Dados

As definições de transferência de dados são um subconjunto de funcionalidades de proteção de dados da Política de Proteção de Aplicações que controlam a introdução e saída de dados de aplicações geridas. A maioria das aplicações que suportam o envio de dados ou a receção de dados de outras aplicações também tem a capacidade de guardar dados e abrir dados a partir do armazenamento local ou na cloud. Se a sua aplicação tiver estas capacidades, terá de implementar suporte adicional. Veja Política para limitar a transferência de dados entre aplicações e localizações de armazenamento na cloud ou dispositivo para obter detalhes.

A sua aplicação pode importar ativamente dados de outras aplicações, como o Microsoft Outlook anexar um ficheiro do Microsoft OneDrive. A sua aplicação também pode receber dados passivos de outras aplicações, como o Microsoft Office abrir um documento a partir de um anexo do Microsoft Outlook. A definição da política de proteção de aplicações recebida abrange ambos os cenários.

Para estes testes:

  1. Instale a sua aplicação.
  2. Instale o Portal da Empresa do Intune.
  3. Instale outra aplicação gerida, direcionada com a mesma política que a sua aplicação, que pode enviar e receber dados (como o Microsoft Outlook).
  4. Instale (ou reutilize) qualquer aplicação não gerida que possa enviar e receber dados.
  5. Inicie sessão na sua aplicação com a conta gerida de teste.
  6. Inicie sessão na outra aplicação gerida com a conta de teste gerida.
Cenário Definição da Política de Proteção de Aplicações Passos de Teste
Enviar dados para outras aplicações "Enviar dados da organização para outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não conseguir enviar dados para outras aplicações, ignore.
1. Navegue para onde a sua aplicação pode enviar dados.
2. Tentativa de enviar dados.
3. Confirme que está limitado ao envio de dados apenas para outras aplicações geridas. Deverá ver um seletor de aplicações apenas com aplicações geridas.
Importar dados de outras aplicações "Receber dados de outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não conseguir importar dados de outras aplicações, ignore.
1. Navegue para onde a sua aplicação pode importar dados de outras aplicações.
2. Tente importar dados.
3. Confirme que está limitado à importação de dados apenas a partir de outras aplicações geridas. Deverá ver um seletor de aplicações apenas com aplicações geridas.
Receber dados de uma aplicação não gerida "Receber dados de outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não conseguir receber dados de outras aplicações, ignore.
1. Mude para a aplicação não gerida.
2. Navegue para onde pode enviar dados.
3. Tente enviar dados da aplicação não gerida para a sua aplicação.
4. Confirme que a sua aplicação não consegue receber dados da aplicação não gerida.
Receber dados da aplicação gerida "Receber dados de outras aplicações" definido como "Aplicações geridas por políticas" 0. Se a sua aplicação não conseguir receber dados de outras aplicações, ignore.
1. Mude para a outra aplicação gerida.
2. Navegue para onde pode enviar dados.
3. Tente enviar dados da outra aplicação gerida para a sua aplicação.
4. Confirme que a sua aplicação consegue receber dados da outra aplicação gerida.

Outras Definições de Proteção de Dados

As seguintes definições de proteção de dados não serão impostas até que a sua aplicação faça alterações adicionais. Não precisa de testar estas definições nesta fase. Consulte Fase 7: Funcionalidades de Participação da Aplicação para obter mais detalhes.

Cenário Definição da Política de Proteção de Aplicações Tem de implementar o suporte se...
Guardar cópias de dados Salvar cópias de dados da organização A sua aplicação pode guardar dados no armazenamento local ou na cloud.
Abrir dados a partir do armazenamento Abrir dados em documentos da organização A sua aplicação pode abrir dados a partir do armazenamento local ou na cloud.
Conteúdo de notificação gerido Notificações de dados da organização A sua aplicação inclui dados de utilizador dentro de notificações.
Backup e restauração Criar cópias de segurança de dados da organização para serviços de cópia de segurança do Android A sua aplicação partilha dados de utilizador com a funcionalidade de cópia de segurança do Android.

Testes de Iniciação Condicional

As definições de início condicional são um subconjunto de funcionalidades da Política de Proteção de Aplicações que restringem o acesso à sua aplicação com base em critérios configuráveis ao nível do dispositivo ou específicos da aplicação. Estas definições incluem condições (como "versão mínima do SO") e ações (como "bloquear acesso"). As ações de iniciação condicional podem ser:

  • Aviso: o utilizador final vê uma caixa de diálogo de aviso quando o dispositivo ou a aplicação falha nos critérios. Continuarão a ter acesso a todos os dados da aplicação.
  • Bloquear acesso: o utilizador final vê uma caixa de diálogo de aviso quando o dispositivo ou a aplicação falha nos critérios. Não lhes será permitido introduzir a aplicação e aceder aos dados da aplicação até cumprirem os critérios ou removerem a conta gerida da aplicação.
  • Apagar dados: todos os dados empresariais associados à conta gerida serão apagados quando o dispositivo ou a aplicação falhar os critérios. O utilizador não terá a oportunidade de cumprir os critérios antes de os dados serem removidos.

Algumas definições de início condicional podem ser configuradas com vários valores e ações. Por exemplo:

  • Versão mínima do SO, valor de "10.0", ação definida como "Avisar".
  • Versão mínima do SO, valor de "9.0", ação definida como "Bloquear acesso"
  • Versão mínima do SO, valor de "8.0", ação definida como "Limpar dados".

Ao concluir os passos de integração nesta fase, a sua aplicação suporta agora todas as funcionalidades de iniciação condicional. Familiarize-se com a funcionalidade de início condicional ao alterar itens de política de forma a que o dispositivo de teste:

  • Transmite todas as definições de iniciação condicional configuradas.
  • Falha numa definição de iniciação condicional configurada definida para a ação "Avisar".
  • Falha numa definição de iniciação condicional configurada definida para a ação "Bloquear acesso".
  • Falha numa definição de iniciação condicional configurada definida para a ação "Apagar dados".

Solução de problemas

Resolução de Problemas do Teste da Primeira Aplicação de Política

Ao seguir os primeiros passos do Teste da Aplicação de Política acima, poderá deparar-se com os seguintes comportamentos inesperados:

Depois de iniciar sessão com uma conta gerida, não me é pedido para instalar o Portal da Empresa (passo 7)

Primeiro, visite o centro de administração do Intune e verifique novamente se a Política de Proteção de Aplicações está direcionada para a sua conta de teste.

Em segundo lugar, verifique novamente o código fonte relativamente a chamadas e implementação registerAccountForMAM do MAMServiceAuthenticationCallback. Se este primeiro não for chamado no momento certo e/ou este não tiver fornecido corretamente um token válido, não verá o pedido do Portal da Empresa.

Por fim, procure nos registos (ou depuração) o código do resultado do registo ou chame getRegisteredAccountStatus explicitamente a conta. Códigos como NOT_LICENSED podem indicar problemas de configuração com a conta de teste.

Não vi o ecrã Obter Acesso depois de iniciar sessão (passo 10)

Se o Portal da Empresa não tiver sido instalado anteriormente, poderá ter de retomar ou reiniciar totalmente a aplicação para ver o ecrã Obter Acesso e ter a política aplicada corretamente. Este é um resultado esperado com base na forma como as aplicações integradas no SDK tiram partido do código dentro da aplicação Portal da Empresa.

Se ainda não vir o ecrã Obter Acesso, mesmo depois de reiniciar a aplicação e iniciar sessão novamente, o SDK poderá não conseguir inscrever a conta ou obter a política para a conta. Verifique novamente a implementação do código fonte do MAMServiceAuthenticationCallback.

Não vi o ecrã para definir ou introduzir um PIN da aplicação após iniciar sessão (passo 11)

Existem outras aplicações integradas no SDK no seu dispositivo de teste? O PIN da aplicação é partilhado entre todas as aplicações geridas e o SDK tem um temporizador global para impedir que seja pedido aos utilizadores finais o PIN em cada início ou currículo da aplicação gerida.

Caso contrário, visite o centro de administração do Intune e verifique se a Política de Proteção de Aplicações tem o PIN da aplicação ativado e está direcionado para a sua conta de teste.

Como último recurso, reiniciar o dispositivo irá repor o temporizador do PIN. Se o ecrã de PIN não for apresentado depois de reiniciar o dispositivo, é provável que não esteja configurado corretamente na política.

Vi o ecrã Obter Acesso, mas as capturas de ecrã continuam a ser permitidas (passo 12)

Enquanto a política está a ser obtida, a política errada está a ser aplicada. Primeiro, visite o centro de administração do Intune e verifique se a Política de Proteção de Aplicações desativa capturas de ecrã e está direcionada para a sua conta de teste. Em segundo lugar, utilize a consola de diagnóstico (descrita acima) para verificar a política que foi retirada para a sua aplicação. Se ambas as políticas confirmarem que as capturas de ecrã devem ser bloqueadas, verifique a configuração do plug-in de compilação do Gradle para garantir que estão a ser feitas substituições de MAM.

A minha aplicação parecia falhar ou fechar após o início de sessão (passo 13)

Quando anula o registo de uma conta que foi anteriormente inscrita e que tinha a política imposta, os dados associados a essa conta serão eliminados pelo SDK. O processo de terminação da aplicação é esperado.

As capturas de ecrã continuam bloqueadas mesmo depois de ter terminado sessão (passo 14)

Verifique novamente o código fonte relativamente a chamadas para unregisterAccountForMAM(). Se a política continuar a ser imposta após o início de sessão, é provável que a conta não tenha sido devidamente registada e não tenha sido inscrição.

Resolução de Problemas do Teste de Proteção de Dados

Ao seguir os passos acima dos Testes de Proteção de Dados , poderá deparar-se com os seguintes comportamentos inesperados:

A minha aplicação não está a receber nem a impor políticas

Primeiro, confirme que a Política de Proteção de Aplicações está direcionada para um grupo que contém a sua conta de teste. Veja Como validar a configuração da política de proteção de aplicações no Microsoft Intune para obter detalhes.

Em segundo lugar, verifique as Informações de Diagnóstico do cliente para confirmar que o SDK recebeu a política configurada. Caso contrário, inspecione a implementação MAMServiceAuthenticationCallback e as chamadas da sua aplicação para registerAccountForMAM. Verifique também os registos ou a depuração para verificar o MAMEnrollmentManager.Result.

A minha aplicação pode partilhar dados para uma aplicação não gerida

Confirme que "Enviar dados da organização para outras aplicações" está definido como "Aplicações geridas por políticas". Verifique o centro de administração do Microsoft Intune para confirmar que a política está configurada e direcionada corretamente. Verifique as Informações de Diagnóstico do cliente para confirmar que o SDK recebeu a política configurada.

Em seguida, se a política estiver configurada e obtida corretamente, verifique se alguma política está a ser imposta: [A minha aplicação não está a receber nem a impor políticas].

A minha aplicação não consegue partilhar dados com outra aplicação gerida

Confirme as definições da Política de Proteção de Aplicações direcionadas para a sua aplicação e para a outra aplicação gerida. Recomenda-se que tenha o mesmo destino de política em ambas as aplicações. A política direcionada para a sua aplicação deve ter "Enviar dados da organização para outras aplicações" definida como "Aplicações geridas por políticas". Verifique a política direcionada para a outra aplicação; Se tiver "Receber dados de outras aplicações" definido como "Nenhum", este comportamento é esperado.

A minha aplicação pode receber dados de uma aplicação não gerida

Confirme que "Receber dados de outras aplicações" está definido como "Aplicações geridas por políticas". Verifique o centro de administração do Microsoft Intune para confirmar que a política está configurada e direcionada corretamente. Verifique as Informações de Diagnóstico do cliente para confirmar que o SDK recebeu a política configurada.

Em seguida, se a política estiver configurada e obtida corretamente, verifique se alguma política está a ser imposta: [A minha aplicação não está a receber nem a impor políticas].

A minha aplicação não consegue receber dados de outra aplicação gerida

Confirme as definições da Política de Proteção de Aplicações direcionadas para a sua aplicação e para a outra aplicação gerida. Recomenda-se que tenha o mesmo destino de política em ambas as aplicações. A política direcionada para a sua aplicação deve ter "Receber dados de outras aplicações" definida como "Aplicações geridas por políticas". Verifique a política direcionada para a outra aplicação; Se tiver "Enviar dados da organização para outras aplicações" definido como "Nenhum", este comportamento é esperado.

Próximas etapas

Depois de concluir todos os Critérios de Saída acima, a sua aplicação é agora integrada com êxito como identidade única e pode impor todas as políticas básicas de proteção de aplicações. As secções subsequentes, Fase 5: Identidade Múltipla, Fase 6: Configuração da Aplicação e Fase 7: Funcionalidades de Participação da Aplicação podem ou não ser necessárias, dependendo do suporte de política de proteção de aplicações pretendido da sua aplicação. Se não tiver a certeza se alguma destas secções se aplica à sua aplicação, reveja As Decisões-Chave para a integração do SDK.