Compartilhar via


Guia para programadores do SDK da Aplicação Microsoft Intune para Android

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.

Importante

O Intune lança regularmente atualizações para o SDK da Aplicação Intune. Recomendamos que subscreva os repositórios do SDK da Aplicação Intune para obter atualizações para que possa incorporar a atualização no ciclo de lançamento de desenvolvimento de software e garantir que as suas aplicações suportam as definições mais recentes da Política de Proteção de Aplicações.

Planeie efetuar atualizações obrigatórias do SDK da Aplicação do Intune antes de todas as versões principais do SO para garantir que a sua aplicação continua a funcionar sem problemas, uma vez que as atualizações do SO podem causar alterações interruptivas. Se não atualizar para a versão mais recente antes de uma versão principal do SO, poderá correr o risco de encontrar uma alteração interruptiva e/ou não conseguir aplicar políticas de proteção de aplicações à sua aplicação.

Fluxo de processo

O diagrama seguinte fornece o fluxo de processos do SDK da Aplicação Intune para Android:

Diagrama de arquitetura de alto nível para o Microsoft Intune.

Objetivos de Fase

O guia contém mais detalhes sobre a arquitetura do SDK da Aplicação Intune, informações sobre passos de integração invulgares e outros conteúdos úteis.

O SDK em Maior Detalhe

Substituições de Classes e Métodos

Através das ferramentas de compilação, o SDK da Aplicação Intune tenta minimizar a carga de integração dos programadores Android. Antes das ferramentas de compilação, os programadores precisavam de realizar todas as substituições manualmente.

Observação

As aplicações têm agora de se integrar com as ferramentas de compilação do SDK, que irão efetuar automaticamente todas estas substituições.

As classes base do Android são substituídas pelos respetivos equivalentes de MAM para ativar a gestão do Intune. As classes SDK residem entre a classe base android e a versão derivada da própria aplicação dessa classe. Por exemplo, uma atividade de aplicação pode acabar com uma hierarquia de herança semelhante a: AppSpecificActivity expande MAMActivity o .Activity A camada MAM filtra as chamadas para as operações do sistema para fornecer uma vista gerida do mundo à sua aplicação de forma totalmente integrada.

Além das classes base, algumas classes que a sua aplicação pode utilizar sem derivar de (por exemplo MediaPlayer, ) também têm equivalentes de MAM necessários e algumas chamadas de método também têm de ser substituídas. A tabela abaixo lista muitas das substituições de MAM.

Classe base android Substituição do SDK da Aplicação Intune
android.app.Activity MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Application MAMApplication
android.app.Dialog MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Fragment MAMFragment
android.app.IntentService MAMIntentService
android.app.LauncherActivity MAMLauncherActivity
android.app.ListActivity MAMListActivity
android.app.ListFragment MAMListFragment
android.app.NativeActivity MAMNativeActivity
android.app.PendingIntent MAMPendingIntent
android.app.Service MAMService
android.app.TabActivity MAMTabActivity
android.app.TaskStackBuilder MAMTaskStackBuilder
android.app.backup.BackupAgent MAMBackupAgent
android.app.backup.BackupAgentHelper MAMBackupAgentHelper
android.app.backup.FileBackupHelper MAMFileBackupHelper
android.app.backup.SharePreferencesBackupHelper MAMSharedPreferencesBackupHelper
android.app.job.JobService MAMJobService
android.content.BroadcastReceiver MAMBroadcastReceiver
android.content.ContentProvider MAMContentProvider
android.os.Binder MAMBinder (apenas necessário se o Binder não for gerado a partir de uma interface AIDL (Android Interface Definition Language)
android.media.MediaPlayer MAMMediaPlayer
android.media.MediaMetadataRetriever MAMMediaMetadataRetriever
android.media.MediaRecorder MAMMediaRecorder
android.provider.DocumentsProvider MAMDocumentsProvider
android.preference.PreferenceActivity MAMPreferenceActivity
android.widget.PopupWindow MAMPopupMenu
android.widget.PopupWindow MAMPopupWindow
android.widget.ListPopupWindow MAMListPopupWindow
android.widget.TextView MAMTextView
android.widget.AutoCompleteTextView MAMAutoCompleteTextView
android.widget.CheckedTextView MAMCheckedTextView
android.widget.EditText MAMEditText
android.inputmethodservice.ExtractEditText MAMExtractEditText
android.widget.MultiAutoCompleteTextView MAMMultiAutoCompleteTextView
android.view.LayoutInflater MAMLayoutInflater
android.view.ViewGroup MAMViewGroup
android.view.SurfaceView MAMSurfaceView
android.opengl.GLSurfaceView MAMGLSurfaceView
android.widget.VideoView MAMVideoView

Métodos com Nome Mudado

Em muitos casos, um método disponível na classe Android foi marcado como final na classe de substituição MAM. Neste caso, a classe de substituição MAM fornece um método com um nome semelhante (geralmente sufixo com MAM) que deve substituir. Por exemplo, ao derivar de MAMActivity, em vez de substituir onCreate() e chamar super.onCreate(), Activity tem de substituir onMAMCreate() e chamar super.onMAMCreate(). O compilador java deve impor as restrições finais para evitar a substituição acidental do método original em vez do equivalente de MAM.

Wrapped System Services

Para algumas classes de serviço do sistema, é necessário chamar um método estático numa classe de wrapper MAM em vez de invocar diretamente o método pretendido na instância de serviço. Por exemplo, uma chamada para getSystemService(ClipboardManager.class).getPrimaryClip() tem de se tornar uma chamada para MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class). Mais uma vez, o plug-in de construção necessário efetua automaticamente estas substituições.

Classe Android Substituição do SDK da Aplicação Intune
android.content.ClipboardManager MAMClipboard
android.content.ContentProviderClient MAMContentProviderClientManagement
android.content.ContentResolver MAMContentResolverManagement
android.content.pm.PackageManager MAMPackageManagement
android.app.DownloadManager MAMDownloadManagement
android.print.PrintManager MAMPrintManagement
android.view.View MAMViewManagement
android.view.DragEvent MAMDragEventManagement
android.view.LayoutInflater MAMLayoutInflaterManagement
android.app.NotificationManager MAMNotificationManagement
android.app.blob.BlobStoreManager MAMBlobStoreManager
android.app.blob.BlobStoreManager.Session MAMBlobStoreManager.Session

Algumas classes têm a maioria dos métodos encapsulados, por exemplo, ClipboardManager, ContentProviderClient, ContentResolvere PackageManager enquanto outras classes têm apenas um ou dois métodos encapsulados, por exemplo, DownloadManager, PrintManager, PrintHelper, View, DragEvente NotificationManagerNotificationManagerCompat.

Inscrição mdm e MAM

Conforme abordado no Registo vs. Inscrição da Fase 4, o SDK da Aplicação Intune irá "inscrever" contas que a sua aplicação regista para que a conta seja protegida com a política. A conta torna-se gerida após esta inscrição ser bem-sucedida e as políticas de MAM devem agora ser aplicadas a esta conta.

O termo "inscrição" também pode referir-se ao processo iniciado pelo utilizador final para ativar a Gestão de Dispositivos (MDM). A inscrição MDM está totalmente separada da inscrição da Política de Proteção de Aplicações.

Uma aplicação integrada no SDK pode ter uma conta inscrita para a Política de Proteção de Aplicações sem que essa conta esteja inscrita na Gestão de Dispositivos. Da mesma forma, um utilizador pode ter inscrito um dispositivo para a Gestão de Dispositivos sem ter aplicações integradas no SDK com contas inscritas para a Política de Proteção de Aplicações.

Normalmente, quando os programadores e administradores se referem à inscrição, referem-se à inscrição mdm, uma vez que a inscrição da Política de Proteção de Aplicações é em grande parte invisível para os programadores e os utilizadores finais. Veja Inscrever dispositivos Android para obter mais detalhes sobre a inscrição na MDM.

Sugestões de Integração

Compreender os registos do Portal da Empresa

Os registos do Portal da Empresa contêm informações que os engenheiros da Microsoft utilizam para investigações de problemas. Alguns dos registos também podem ser úteis para programadores que integram o SDK.

Em particular, o ficheiro DiagnosticsInfo-scrubbed.log contém informações sobre que aplicações são geridas pela MAM e os detalhes da política de MAM na PolicyDB Information secção. Cada aplicação gerida tem uma entrada na PolicyDB Information secção . Deve procurar o nome do pacote da sua aplicação aqui para confirmar que a política de MAM está corretamente direcionada para a sua aplicação. Se não vir o nome do pacote da sua aplicação aqui, significa que a conta com sessão iniciada não tem a política de MAM aplicada.

Para obter uma descrição sobre cada definição de política de MAM, consulte Definições de política de proteção de aplicações Android no Microsoft Intune. Para obter uma descrição de como estas definições serão apresentadas nos registos do Portal da Empresa, veja Rever os registos de proteção de aplicações do cliente. Quando a política de MAM não estiver a ser imposta conforme esperado, recomendamos que verifique os registos do Portal da Empresa ou a IU de diagnóstico, verifique se a sua aplicação é gerida pela política de MAM e confirme se as definições de política têm valores esperados.

Pode recolher os registos do Portal da Empresa de uma das seguintes formas:

  • Através do Portal da Empresa
    • Abrir a aplicação Portal da Empresa
    • Selecione o menu de três pontos no canto superior direito
    • Selecionar Definições
    • Em Registos de Diagnóstico, selecione Guardar Registos
    • Siga o pedido para escolher o diretório de saída para guardar os registos do Portal da Empresa.
    • Utilize adb shell pull o comando para solicitar os registos do seu dispositivo Android para o seu computador local.
  • [Utilize o Microsoft Edge para Android para aceder aos registos de aplicações geridas]. Esta ação irá apresentar a IU para recolher os registos do Portal da Empresa e ver os diagnósticos de MAM.
  • Chamada MAMPolicyManager.showDiagnostics(context) para apresentar a mesma IU para recolher registos do Portal da Empresa.

Testar rapidamente com a alteração da política

À medida que está a desenvolver e a testar a integração da sua aplicação no SDK da Aplicação intune, pode alterar frequentemente as definições da Política de Proteção de Aplicações para o utilizador de teste.

Por predefinição, as aplicações integradas darão entrada no serviço do Intune para uma política atualizada a cada 30 minutos, quando estiverem ativas. Pode evitar esta espera e forçar uma entrada através do Portal da Empresa:

  1. Inicie o Portal da Empresa. Não precisa de iniciar sessão.
  2. Selecione o ... ícone de menu.
  3. Selecione Configurações.
  4. Desloque-se para a definição denominada "Política de Gestão".
  5. Prima o botão Sincronizar.

Esta ação agendará imediatamente uma entrada e obterá uma política atualizada direcionada para a sua aplicação e conta.

Resolução de Problemas de Migração do AndroidX

Se integrou o SDK da Aplicação intune antes de tirar partido do AndroidX, poderá encontrar um erro como este ao migrar para o AndroidX:

incompatible types: android.support.v7.app.ActionBar cannot be converted to androidx.appcompat.app.ActionBar

Estes erros podem ocorrer porque a sua aplicação faz referência às classes de suporte legadas do SDK. As classes de suporte MAM encapsulam as classes de suporte do Android que foram movidas para AndroidX. Para combater esses erros, substitua todas as referências da classe de suporte MAM pelos respetivos equivalentes AndroidX. Isto pode ser conseguido ao remover primeiro as dependências da biblioteca de suporte de MAM dos seus ficheiros de criação do Gradle. As linhas em questão terão um aspeto semelhante ao seguinte:

implementation "com.microsoft.intune.mam:android-sdk-support-v4:$intune_mam_version"
implementation "com.microsoft.intune.mam:android-sdk-support-v7:$intune_mam_version"

Em seguida, corrija os erros resultantes de tempo de compilação ao substituir todas as referências às classes MAM nos com.microsoft.intune.mam.client.support.v7 pacotes e com.microsoft.intune.mam.client.support.v4 pelos respetivos equivalentes AndroidX. Por exemplo, as referências a MAMAppCompatActivity devem ser alteradas para AppCompatActivity. Conforme abordado acima, o plug-in/ferramenta de compilação MAM irá reescrever automaticamente as classes nas bibliotecas AndroidX com os equivalentes de MAM adequados no momento da compilação.

Limitações e Casos Especiais

Inscrição predefinida

A sua aplicação pode, em alternativa, registar-se nas Políticas de Proteção de Aplicações através de um processo simplificado denominado inscrição predefinida. Esta funcionalidade destina-se principalmente a suportar aplicações de linha de negócio privadas que não tenham integrado a MSAL.

Aviso

A inscrição predefinida inclui compromissos significativos e não é recomendada. As aplicações que tiram partido da inscrição predefinida não suportam o Acesso Condicional, não beneficiam do SSO com serviços Microsoft e não podem ser utilizadas por contas que não sejam do Intune. Se a sua aplicação for enviada para uma loja de aplicações pública, a inscrição predefinida não é suportada.

A inscrição predefinida forçará o utilizador final a instalar o Portal da Empresa e a concluir um fluxo de inscrição de MAM antes de permitir que os utilizadores entrem na sua aplicação.

Observação

A inscrição predefinida está ciente da cloud soberana.

Ative a inscrição predefinida com os seguintes passos:

  1. Se a sua aplicação integrar a MSAL ou precisar de ativar o SSO, configure a MSAL. Caso contrário, pode ignorar este passo.

  2. Ative a inscrição predefinida ao adicionar o seguinte valor no manifesto sob a <application> etiqueta:

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Ative a política de MAM necessária ao adicionar o seguinte valor no manifesto sob a <application> etiqueta:

    <meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
    

Processos Isolados

O SDK da Aplicação Intune não pode aplicar proteções a processos isolados. O suporte para processos isolados (android:isolatedProcess) requer a adição da etiqueta de metadados abaixo.

Aviso

Ao adicionar estes metadados, a aplicação declara que o processo isolado não pode expor os dados da organização. A sua aplicação é responsável por garantir esta situação.

<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />

Restrições de Captura de Ecrã Personalizada

Se a sua aplicação contiver uma funcionalidade de captura de ecrã personalizada que ignore a restrição ao nível FLAG_SECURE do WindowAndroid, tem de verificar a política de captura de ecrã antes de permitir o acesso total à funcionalidade. Por exemplo, se a sua aplicação utilizar um motor de composição personalizado para compor a vista atual para um ficheiro PNG, primeiro tem de verificar AppPolicy.getIsScreenCaptureAllowed().

Se a sua aplicação não contiver funcionalidades de captura de ecrã personalizadas ou de terceiros, não terá de efetuar qualquer ação para restringir as capturas de ecrã. A política de captura de ecrã é imposta automaticamente ao Window nível de todas as aplicações integradas de MAM.

Todas as tentativas do SO ou de outra aplicação para capturar um Window na sua aplicação serão bloqueadas conforme necessário. Por exemplo, se um utilizador tentar capturar o ecrã da sua aplicação através das funcionalidades de gravação de ecrã ou captura de ecrã incorporadas do Android, a captura será automaticamente restringida sem a participação da sua aplicação.

Limitações de imposição de políticas

  • Utilizar Resoluções de Conteúdos: a política "transferir ou receber" do Intune pode bloquear ou bloquear parcialmente a utilização de uma resolução de conteúdos para aceder ao fornecedor de conteúdos noutra aplicação. Isto fará com que ContentResolver os métodos devolvam um valor nulo ou lancem um valor de falha (por exemplo, openOutputStream será apresentado FileNotFoundException se forem bloqueados). A aplicação pode determinar se uma falha ao escrever dados através de uma resolução de conteúdos foi causada pela política (ou seria causada pela política) ao efetuar a chamada:

    MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);
    

    ou se não existir nenhuma atividade associada:

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    Neste segundo caso, as aplicações de várias identidades têm de ter o cuidado de definir a identidade do thread adequadamente (ou transmitir uma identidade explícita a uma getPolicyForIdentity chamada).

Serviços exportados

O ficheiro AndroidManifest.xml incluído no SDK da Aplicação Intune contém MAMNotificationReceiverService, que tem de ser um serviço exportado para permitir que o Portal da Empresa envie notificações para uma aplicação gerida. O serviço verifica o autor da chamada para garantir que apenas o Portal da Empresa tem permissão para enviar notificações.

Limitações de reflexão

Algumas das classes base de MAM (por exemplo, MAMActivity, MAMDocumentsProvider) contêm métodos (com base nas classes base originais do Android) que utilizam parâmetros ou tipos de retorno apenas presentes acima de determinados níveis de API. Por este motivo, pode nem sempre ser possível utilizar a reflexão para enumerar todos os métodos dos componentes da aplicação. Esta restrição não está limitada à MAM, é a mesma restrição que se aplicaria se a própria aplicação implementasse estes métodos a partir das classes base android.

Robolétrico

Testar o comportamento do SDK da Aplicação Intune no Robolectric não é suportado. Existem problemas conhecidos ao executar o SDK no Robolectric devido a comportamentos presentes no Robolectric que não imitam com precisão aqueles em dispositivos reais ou emuladores.

Se precisar de testar a sua aplicação no Robolectric, a solução recomendada é mover a lógica da classe de aplicação para um programa auxiliar e produzir o apk de teste de unidades com uma classe de aplicação que não herda da MAMApplication.