Partilhar 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 Intune políticas de proteção de aplicações (também conhecidas como políticas de APLICAÇÃO ou MAM) na sua aplicação Java/Kotlin Android nativa. Uma aplicação gerida Intune é uma aplicação integrada no SDK da Aplicação Intune. Intune administradores podem facilmente implementar políticas de proteção de aplicações na sua aplicação gerida Intune quando Intune gere ativamente a aplicação.

Importante

Intune disponibiliza regularmente atualizações para o SDK da Aplicação Intune. Recomendamos que subscreva os repositórios do SDK da Aplicação Intune para 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 Intune SDK da Aplicação 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 Microsoft Intune.

Fase Goals

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 permitir a gestão de 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 Gerenciamento 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 na Política de Proteção de Aplicações sem que essa conta esteja inscrita para Gerenciamento de Dispositivos. Da mesma forma, um utilizador pode ter inscrito um dispositivo para Gerenciamento 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 de Portal da Empresa

Portal da Empresa registos 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 de Portal da Empresa, veja Rever registos de proteção de aplicações cliente. Quando a política de MAM não estiver a ser imposta conforme esperado, recomendamos que marcar Portal da Empresa registos ou a IU de diagnóstico, verifique se a aplicação é gerida pela política de MAM e confirme se as definições de política têm valores esperados.

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

  • Através da 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 de 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 Portal da Empresa registos e ver diagnóstico de MAM.
  • Chame MAMPolicyManager.showDiagnostics(context) para apresentar a mesma IU para recolher Portal da Empresa registos.

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 marcar no serviço Intune para uma política atualizada a cada 30 minutos, quando ativas. Pode evitar esta espera e forçar um marcar 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 marcar e obterá a 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 não 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 marcar política de captura de ecrã antes de permitir o acesso total à funcionalidade. Por exemplo, se a aplicação utilizar um motor de composição personalizado para compor a vista atual para um ficheiro PNG, primeiro tem de marcar 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 de Intune "transferir ou receber" 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

Os testes Intune comportamento do SDK da Aplicação no Robolectric não são suportados. 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.