Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SDK do aplicativo do Microsoft Intune para Android permite incorporar políticas de proteção do aplicativo do Intune (também conhecidas como políticas de MAM) em seu aplicativo nativo Java/Kotlin para Android. Um aplicativo gerenciado do Intune é aquele que é integrado ao SDK do aplicativo do Intune. Os administradores do Intune podem facilmente implantar políticas de proteção de aplicativo em seu aplicativo gerenciado pelo Intune quando o Intune gerencia ativamente o aplicativo.
Importante
O Intune lança regularmente atualizações para o SDK do aplicativo do Intune. Recomendamos assinar os repositórios do SDK do Aplicativo do Intune para obter atualizações, para que você possa incorporar a atualização ao ciclo de lançamento de desenvolvimento de software e garantir que seus aplicativos dêem suporte às configurações mais recentes da Política de Proteção do Aplicativo.
Planeje fazer atualizações obrigatórias do SDK do Aplicativo do Intune antes de cada versão principal do sistema operacional para garantir que seu aplicativo continue funcionando sem problemas, pois as atualizações do sistema operacional podem causar alterações significativas. Se você não atualizar para a versão mais recente antes de uma versão principal do sistema operacional, poderá correr o risco de encontrar uma alteração significativa e/ou não conseguir aplicar políticas de proteção de aplicativo ao seu aplicativo.
Fluxo do processo
O diagrama a seguir fornece o fluxo de processo do SDK do Aplicativo do Intune para Android:
Objetivos do Estágio
O guia contém mais detalhes sobre a arquitetura do SDK do Aplicativo do Intune, informações sobre etapas de integração incomuns e outros conteúdos úteis.
O SDK em mais detalhes
Substituições de classe e método
Por meio das ferramentas de build, o SDK do Aplicativo do Intune tenta minimizar a carga de integração dos desenvolvedores Android. Antes das ferramentas de compilação, os desenvolvedores precisavam executar todas as substituições manualmente.
Observação
Os aplicativos agora devem se integrar às ferramentas de build do SDK, que executarão todas essas substituições automaticamente.
As classes base do Android são substituídas por seus respectivos equivalentes MAM para habilitar o gerenciamento do Intune.
As classes do SDK vivem entre a classe base do Android e a própria versão derivada do aplicativo dessa classe.
Por exemplo, uma atividade de aplicativo pode acabar com uma hierarquia de herança semelhante a: AppSpecificActivity extends MAMActivity extends Activity.
A camada MAM filtra chamadas para operações do sistema para fornecer perfeitamente ao seu aplicativo uma visão gerenciada do mundo.
Além das classes base, algumas classes que seu aplicativo pode usar sem derivar de (por exemplo MediaPlayer, ) também têm equivalentes MAM necessários, e algumas chamadas de método também devem ser substituídas.
A tabela abaixo lista muitas das substituições de MAM.
| Classe base do Android | Substituição do SDK do aplicativo do Intune |
|---|---|
| android.app.Atividade | MAMActivity |
| android.app.ActivityGroup | MAMActivityGroup |
| android.app.AliasActivity | MAMAliasActivity |
| android.app.Application | MAMApplication |
| android.app.Diálogo | 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 (necessário apenas se o Binder não for gerado de uma interface AIDL (Linguagem de Definição de Interface) do Android) |
| 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 Renomeados
Em muitos casos, um método disponível na classe Android foi marcado como final na classe de substituição MAM.
Nesse caso, a classe de substituição MAM fornece um método de nome semelhante (geralmente com o sufixo MAM) que você deve substituir.
Por exemplo, ao derivar de MAMActivity, em vez de substituir onCreate() e chamar super.onCreate(), Activity deve 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 MAM.
Serviços de Sistema Encapsulado
Para algumas classes de serviço do sistema, é necessário chamar um método estático em uma classe wrapper MAM em vez de invocar diretamente o método desejado na instância de serviço.
Por exemplo, uma chamada para getSystemService(ClipboardManager.class).getPrimaryClip() deve se tornar uma chamada para MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class).
Novamente, o plug-in de build necessário faz automaticamente essas substituições.
| Classe Android | Substituição do SDK do aplicativo do 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 de seus métodos encapsulados, por exemplo, ClipboardManager, , ContentProviderClientContentResolver, e PackageManager enquanto outras classes têm apenas um ou dois métodos encapsulados, por exemplo, DownloadManager, , PrintManager, ViewPrintHelper, NotificationManagerDragEvent, , e .NotificationManagerCompat
Registro de MDM e MAM
Conforme discutido no Registro versus Registro do Estágio 4, o SDK do Aplicativo do Intune "registrará" as contas que seu aplicativo registra para que a conta seja protegida com a política. A conta torna-se gerenciada após esse registro ser bem-sucedido, e as políticas de MAM agora devem ser aplicadas a essa conta.
O termo "registro" também pode se referir ao processo iniciado pelo usuário final para habilitar o MDM (Gerenciamento de Dispositivos). O registro no MDM é totalmente separado do registro na Política de Proteção do Aplicativo.
Um aplicativo integrado ao SDK pode ter uma conta registrada na Política de Proteção do Aplicativo sem que essa conta esteja registrada no Gerenciamento de Dispositivos. Da mesma forma, um usuário pode ter registrado um dispositivo para o Gerenciamento de Dispositivos sem ter nenhum aplicativo integrado ao SDK com contas registradas para a Política de Proteção do Aplicativo.
Normalmente, quando os desenvolvedores e administradores se referem ao registro, eles estão se referindo ao registro do MDM, já que o registro da Política de Proteção do Aplicativo é praticamente invisível para desenvolvedores e usuários finais. Consulte Inscrever dispositivos Android para obter mais detalhes sobre o registro no MDM.
Dicas de integração
Noções básicas sobre logs do Portal da Empresa
Portal da Empresa Os logs contêm informações que os engenheiros da Microsoft usam para investigações de problemas. Alguns dos logs também podem ser úteis para desenvolvedores que integram o SDK.
Em particular, o arquivo DiagnosticsInfo-scrubbed.log contém informações sobre quais aplicativos são gerenciados pelo MAM e os detalhes da política do MAM na PolicyDB Information seção.
Cada aplicativo gerenciado tem uma entrada na PolicyDB Information seção.
Você deve procurar o nome do pacote do seu aplicativo aqui para confirmar se a política de MAM foi direcionada corretamente para seu aplicativo.
Se você não vir o nome do pacote do seu aplicativo aqui, isso indica que a conta conectada não tem a política MAM aplicada.
Para obter a descrição de cada configuração de política de MAM, consulte Configurações de política de proteção de aplicativo Android no Microsoft Intune. Para obter uma descrição de como essas configurações serão exibidas nos logs de Portal da Empresa, consulte Revisar logs de proteção do aplicativo cliente. Quando a política MAM não estiver sendo imposta conforme o esperado, recomendamos que você marcar Portal da Empresa logs ou a IU de diagnóstico, verifique se o seu aplicativo é gerenciado pela política MAM e confirme se as configurações da política têm os valores esperados.
Você pode coletar logs do Portal da Empresa de uma das seguintes maneiras:
- Por meio do Portal da Empresa
- Abra o aplicativo do Portal da Empresa
- Selecione o menu de três pontos no canto superior direito
- Selecione Configurações
- Em Logs de Diagnóstico, selecione Salvar Logs
- Siga a solicitação para escolher o diretório de saída para salvar os logs do Portal da Empresa.
- Use
adb shell pullo comando para extrair os logs do seu dispositivo Android para a máquina local.
- [Use o Microsoft Edge para Android para acessar logs de aplicativos gerenciados]. Isso exibirá a interface do usuário para coletar logs do Portal da Empresa e exibir diagnósticos de MAM.
- Chamada
MAMPolicyManager.showDiagnostics(context)para exibir a mesma interface do usuário para coletar logs do Portal da Empresa.
Testando rapidamente com a alteração da política
Ao desenvolver e testar a integração do SDK do aplicativo do Intune do seu aplicativo, você pode alterar frequentemente as configurações da Política de Proteção do Aplicativo para o usuário de teste.
Por padrão, os aplicativos integrados serão marcar com o serviço Intune para atualização da política a cada 30 minutos, quando ativo. Você pode evitar essa espera e forçar uma marca-in por meio do Portal da Empresa:
- Inicie o Portal da Empresa. Você não precisa entrar.
- Selecione o ... ícone de menu.
- Selecione Configurações.
- Role até a configuração chamada "Política de gerenciamento".
- Pressione o botão Sincronizar.
Isso agendará imediatamente um marcar-in e recuperará a política atualizada direcionada ao seu aplicativo e conta.
Solução de problemas de migração do AndroidX
Se você integrou o SDK do aplicativo do Intune antes de aproveitar o 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
Esses erros podem ocorrer porque seu aplicativo faz referência às classes de suporte herdadas do SDK. As classes de suporte do MAM envolvem classes de suporte do Android que foram movidas no AndroidX. Para combater esses erros, substitua todas as referências de classe de suporte do MAM por seus equivalentes do AndroidX. Isso pode ser feito removendo primeiro as dependências da biblioteca de suporte do MAM dos arquivos de build do Gradle. As linhas em questão serão semelhantes 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 de tempo de compilação resultantes substituindo todas as referências às classes MAM nos com.microsoft.intune.mam.client.support.v7 pacotes and com.microsoft.intune.mam.client.support.v4 por seus equivalentes do AndroidX.
Por exemplo, as referências a MAMAppCompatActivity devem ser alteradas AppCompatActivitypara o arquivo .
Conforme discutido acima, o plug-in/ferramenta de compilação do MAM reescreverá automaticamente as classes nas bibliotecas do AndroidX com os equivalentes apropriados do MAM em tempo de compilação.
Limitações e Casos Especiais
Registro padrão
Como alternativa, seu aplicativo pode se registrar nas políticas de proteção do aplicativo por meio de um processo simplificado chamado registro padrão. Esse recurso destina-se principalmente a dar suporte a aplicativos de linha de negócios privados que não integraram a MSAL.
Aviso
O registro padrão vem com compensações significativas e não é recomendado. Os aplicativos que aproveitam o registro padrão não dão suporte ao Acesso Condicional, não se beneficiam do SSO com os serviços Microsoft e não podem ser usados por contas que não são do Intune. Se o aplicativo for enviado para uma loja de aplicativos pública, o registro padrão não será compatível.
O registro padrão forçará o usuário final a instalar o Portal da Empresa e concluir um fluxo de registro do MAM antes de permitir que os usuários entrem em seu aplicativo.
Observação
O registro padrão reconhece a nuvem soberana.
Habilite o registro padrão com as seguintes etapas:
Se o aplicativo integrar a MSAL ou você precisar habilitar o SSO, configure a MSAL. Caso contrário, você pode ignorar esta etapa.
Habilite o registro padrão adicionando o seguinte valor no manifesto sob a
<application>marca:<meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />Habilite a política de MAM exigida adicionando o seguinte valor no manifesto sob a
<application>marca:<meta-data android:name="com.microsoft.intune.mam.MAMPolicyRequired" android:value="true" />
Processos isolados
O SDK do aplicativo do Intune não pode aplicar proteções a processos isolados.
O suporte para processos isolados (android:isolatedProcess) requer a adição da marca de metadados abaixo.
Aviso
Ao adicionar esses metadados, seu aplicativo está declarando que o processo isolado não pode expor dados da organização. Seu aplicativo é responsável por garantir isso.
<meta-data android:name="com.microsoft.intune.mam.AllowIsolatedProcesses" android:value="true" />
Restrições de Captura de Tela Personalizadas
Se o seu aplicativo contiver um recurso de captura de tela personalizado que ignore a Windowrestrição no nível FLAG_SECURE do Android, você deverá marcar a política de captura de tela antes de permitir o acesso total ao recurso.
Por exemplo, se o aplicativo usa um mecanismo de renderização personalizado para renderizar a exibição atual em um arquivo PNG, primeiro você deve marcar AppPolicy.getIsScreenCaptureAllowed().
Se o seu aplicativo não contiver recursos de captura de tela personalizados ou de terceiros, você não precisará executar nenhuma ação para restringir as capturas de tela.
A política de captura de tela é imposta automaticamente no nível para todos os aplicativos integrados ao Window MAM.
Qualquer tentativa do sistema operacional ou de outro aplicativo de capturar um Window em seu aplicativo será bloqueada conforme necessário.
Por exemplo, se um usuário tentar capturar a tela do seu aplicativo por meio dos recursos integrados de captura de tela ou gravação de tela do Android, a captura será automaticamente restrita sem a participação do seu aplicativo.
Limitações de imposição de política
Usando resolvedores de conteúdo: a política do Intune de "transferir ou receber" pode bloquear ou bloquear parcialmente o uso de um resolvedor de conteúdo para acessar o provedor de conteúdo em outro aplicativo. Isso fará com que
ContentResolveros métodos retornem nulo ou lancem um valor de falha (por exemplo,openOutputStreamlançaráFileNotFoundExceptionse bloqueado). O aplicativo pode determinar se uma falha na gravação de dados por meio de um resolvedor de conteúdo foi causada por política (ou seria causada por política) fazendo a chamada:MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowed(contentURI);Ou, se não houver nenhuma atividade associada:
MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);Nesse segundo caso, os aplicativos de várias identidades devem ter o cuidado de definir a identidade do thread adequadamente (ou passar uma identidade explícita para uma
getPolicyForIdentitychamada).
Serviços exportados
O arquivo AndroidManifest.xml incluído no SDK do Aplicativo Intune contém MAMNotificationReceiverService, que deve ser um serviço exportado para permitir que o Portal da Empresa envie notificações para um aplicativo gerenciado. O serviço verifica o chamador para garantir que somente o Portal da Empresa tenha permissão para enviar notificações.
Limitações de reflexão
Algumas das classes básicas do MAM (por exemplo, MAMActivity, MAMDocumentsProvider) contêm métodos (com base nas classes base originais do Android) que usam tipos de parâmetro ou retorno presentes apenas acima de determinados níveis de API.
Por esse motivo, nem sempre é possível usar a reflexão para enumerar todos os métodos de componentes do aplicativo.
Essa restrição não se limita ao MAM, é a mesma restrição que se aplicaria se o próprio aplicativo implementasse esses métodos das classes base do Android.
Robótica
Não há suporte para testar o comportamento do SDK do aplicativo do Intune no Robolectric. Há 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 você precisar testar seu aplicativo no Robolectric, a solução recomendada é mover a lógica da classe do aplicativo para um auxiliar e produzir o apk de teste de unidade com uma classe de aplicativo que não herda do MAMApplication.