Руководство разработчика пакета SDK приложения Microsoft Intune для Android

Пакет SDK для приложений Microsoft Intune для Android позволяет включать политики защиты приложений Intune (также известные как политики MAM) в родное приложение Java/Kotlin для Android. Приложение, управляемое Intune, интегрировано с пакетом SDK для приложений Intune. Администраторы Intune могут легко развернуть политики защиты приложений в вашем приложении, управляемом Intune, когда Intune активно управляет приложением.

Важно!

Intune регулярно выпускает обновления для пакета SDK приложения Intune. Мы рекомендуем подписаться на репозитории пакета SDK приложения Intune для получения обновлений, чтобы вы могли включить это обновление в цикл выпуска разработки программного обеспечения и обеспечить поддержку приложениями последних параметров политики защиты приложений.

Запланируйте получение обязательных обновлений пакета SDK для приложений Intune перед каждым выпуском основной ОС, чтобы обеспечить бесперебойную работу приложения, поскольку обновления ОС могут привести к критическим изменениям. Если не выполнить обновление до последней версии до основного выпуска операционной системы, существует риск критического изменения и/или невозможности применения политик защиты приложений к приложению.

Схема процесса

На следующей схеме показана схема процесса пакета SDK приложения Intune для Android:

Высокоуровневая архитектурная схема для Microsoft Intune.

Цели этапа

Это руководство содержит более подробные сведения об архитектуре пакета SDK для приложений Intune, сведения о необычных шагах интеграции и другое полезное содержимое.

Подробные сведения о пакете SDK

Замена классов и методов

С помощью инструментов сборки пакет SDK для приложений Intune пытается свести к минимуму нагрузку на разработчиков Android, связанную с интеграцией. До появления инструментов сборки разработчикам приходилось выполнять все замены вручную.

Примечание.

Теперь приложения должны интегрироваться с инструментами сборки SDK, которые выполнят все эти замены автоматически.

Базовые классы Android заменяются соответствующими эквивалентами MAM, чтобы обеспечить управление Intune. Классы SDK находятся между базовым классом Android и собственной производной версией этого класса приложения. Например, действие приложения может закончиться иерархией наследования, которая выглядит следующим образом: AppSpecificActivity extends MAMActivity extends Activity. Уровень MAM фильтрует вызовы системных операций, чтобы обеспечить вашему приложению управляемое представление мира.

Помимо базовых классов, некоторые классы, которые приложение может использовать без наследования (например, MediaPlayer), также имеют обязательные эквиваленты MAM, и некоторые вызовы методов также должны быть заменены. В таблице ниже перечислены многие замены MAM.

Базовый класс Android Замена пакета SDK для приложения Intune
android.app.Действия MAMActivity
android.app.ActivityGroup MAMActivityGroup
android.app.AliasActivity MAMAliasActivity
android.app.Применение МАМАппликация
android.app.Dialog MAMDialog
android.app.AlertDialog.Builder MAMAlertDialogBuilder
android.app.DialogFragment MAMDialogFragment
android.app.ExpandableListActivity MAMExpandableListActivity
android.app.Фрагмент 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.Сервис 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 (необходим только в том случае, если подшивка не создана из интерфейса Android Interface Definition Language (AIDL))
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

Переименованные методы

Во многих случаях метод, доступный в классе Android, был помечен как окончательный в классе замены MAM. В этом случае класс замены MAM предоставляет метод с аналогичным именем (обычно с суффиксом MAM), который необходимо переопределить. Например, при наследовании от MAMActivity, вместо того, чтобы переопределять onCreate() и вызывать super.onCreate(), Activity должен переопределять onMAMCreate() и вызывать super.onMAMCreate(). Компилятор Java должен применить последние ограничения, чтобы предотвратить случайное переопределение исходного метода вместо эквивалента MAM.

Упакованные системные службы

Для некоторых классов системных служб необходимо вызывать статический метод в классе-оболочке MAM вместо прямого вызова нужного метода в экземпляре службы. Например, вызов getSystemService(ClipboardManager.class).getPrimaryClip() должен стать вызовом .MAMClipboardManager.getPrimaryClip(getSystemService(ClipboardManager.class) Опять же, требуемый плагин сборки автоматически производит эти замены.

Android Class Замена пакета SDK для приложения 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

Некоторые классы имеют большую часть своих методов wrapped, например, ClipboardManager, , ContentProviderClientContentResolver, а PackageManager другие классы имеют только один или два метода wrapped, например, DownloadManager, ViewPrintHelperDragEventPrintManagerNotificationManager и .NotificationManagerCompat

Регистрация в MDM и MAM

Как описано на этапе 4 "Регистрация и регистрация", пакет SDK для приложений Intune "регистрирует" учетные записи, регистрируемые вашим приложением, чтобы защитить эту учетную запись с помощью политики. После успешной регистрации учетная запись становится управляемой, и к этой учетной записи следует применить политики MAM.

Термин "регистрация" также может относиться к инициированному конечным пользователем процессу включения Управление устройствами (MDM). Регистрация в MDM полностью отделена от регистрации в политике защиты приложений.

У приложения, интегрированного с пакетом SDK, можно зарегистрировать учетную запись, зарегистрированную в политике защиты приложений, но не в системе Управление устройствами. Точно так же пользователь может зарегистрировать устройство для Управление устройствами, не имея приложений, интегрированных с пакетом SDK, с учетными записями, зарегистрированными для политики защиты приложений.

Как правило, когда разработчики и администраторы говорят о регистрации, они имеют в виду регистрацию в MDM, так как регистрация политики защиты приложений в значительной степени невидима как для разработчиков, так и для конечных пользователей. Дополнительные сведения о регистрации в MDM см. в разделе Регистрация устройств Android .

Советы по интеграции

Общие сведения о журналах корпоративного портала

Журналы корпоративного портала содержат сведения, которые инженеры Майкрософт используют для исследования проблем. Некоторые журналы также могут быть полезны разработчикам, интегрирующим пакет SDK.

В частности, файл DiagnosticsInfo-scrubbed.log содержит сведения о том, какими приложениями управляет MAM, и подробные сведения о политике MAM в этом разделе PolicyDB Information . У каждого управляемого приложения есть запись в этом разделе PolicyDB Information . Чтобы убедиться, что политика MAM правильно нацелена на ваше приложение, найдите здесь имя пакета своего приложения. Если вы не видите здесь имя пакета вашего приложения, это означает, что к учетной записи, вошедшей в систему, не применена политика MAM.

Описание каждого параметра политики MAM см. в разделе Параметры политики защиты приложений Android в Microsoft Intune. Описание того, как эти параметры будут отображаться в журналах корпоративного портала, см. в разделе "Просмотр журналов защиты клиентских приложений". Если политика MAM не применяется должным образом, рекомендуется проверка Корпоративный портал журналы или пользовательский интерфейс диагностики, убедиться, что приложение управляется политикой MAM, и что параметры политики соответствуют ожидаемым значениям.

Вести сбор журналов корпоративного портала можно одним из следующих способов:

  • Через Корпоративный портал
    • Откройте приложение "Корпоративный портал"
    • Выберите меню с тремя точками в правом верхнем углу
    • Выберите "Параметры"
    • В разделе "Журналы диагностики" выберите "Сохранить журналы"
    • Следуйте инструкциям, чтобы выбрать выходной каталог для сохранения журналов Корпоративного портала.
    • Используйте adb shell pull команду command, чтобы переместить журналы с устройства Android на локальный компьютер.
  • [Используйте Microsoft Edge для Android для доступа к журналам управляемых приложений]. Откроется пользовательский интерфейс для сбора журналов корпоративного портала и просмотра диагностики MAM.
  • Вызов MAMPolicyManager.showDiagnostics(context) для отображения того же пользовательского интерфейса для сбора журналов корпоративного портала.

Быстрое тестирование с изменяющейся политикой

В процессе разработки и тестирования интеграции приложения SDK с приложением Intune вы можете часто изменять параметры политики защиты приложений для тестового пользователя.

По умолчанию интегрированные приложения будут проверка в службу Intune для обновления политики каждые 30 минут, если она активна. Можно избежать этого ожидания и принудительно выполнить проверку через Корпоративный портал:

  1. Запустите Корпоративный портал. Для этого не требуется выполнять вход.
  2. Выберите ... значок меню.
  3. Выберите Настройки.
  4. Прокрутите страницу до параметра "Политика управления".
  5. Нажмите кнопку "Синхронизировать".

В этом случае будет немедленно запланирована проверка и получена актуальная политика, предназначенная для вашего приложения и учетной записи.

Устранение неполадок с миграцией AndroidX

Если вы интегрировали пакет SDK для приложений Intune до использования AndroidX, вы можете столкнуться с такой ошибкой при переходе на AndroidX:

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

Эти ошибки могут возникнуть, поскольку приложение ссылается на устаревшие классы поддержки пакета SDK. Классы поддержки MAM охватывают классы поддержки Android, перемещенные в AndroidX. Чтобы избежать таких ошибок, замените все ссылки на классы поддержки MAM их эквивалентами в AndroidX. Это можно сделать, сначала удалив зависимости библиотеки поддержки MAM из файлов сборки Gradle. Эти строки будут выглядеть примерно следующим образом:

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

Затем исправьте возникающие ошибки во время компиляции, заменив все ссылки на классы MAM в пакетах com.microsoft.intune.mam.client.support.v7 and com.microsoft.intune.mam.client.support.v4 их эквивалентами в AndroidX. Например, ссылки на MAMAppCompatActivity Android X должны быть изменены AppCompatActivityна . Как обсуждалось выше, плагин/средство сборки MAM автоматически перезаписывает классы в библиотеках AndroidX соответствующими эквивалентами MAM во время компиляции.

Ограничения и особые случаи

Регистрация по умолчанию

Кроме того, ваше приложение может зарегистрироваться для получения политик защиты приложений с помощью упрощенной процедуры, называемой регистрацией по умолчанию. Эта функция в основном предназначена для поддержки частных бизнес-приложений, в которых нет интеграции MSAL.

Предупреждение

Регистрация по умолчанию сопряжена со значительными компромиссами и не рекомендуется. Приложения, использующие регистрацию по умолчанию, не поддерживают условный доступ, не имеют преимуществ единого входа со службами Майкрософт и не могут использоваться учетными записями, не входящими в Intune. Если ваше приложение поставляется в общедоступный магазин приложений, регистрация по умолчанию не поддерживается.

Регистрация по умолчанию заставит пользователя установить Корпоративный портал и завершить процесс регистрации MAM, прежде чем разрешить пользователям доступ к вашему приложению.

Примечание.

Регистрация по умолчанию производится с учетом национального облака.

Включите регистрацию по умолчанию, выполнив следующие действия.

  1. Если ваше приложение интегрирует MSAL или вам нужно включить единый вход, настройте MSAL. В противном случае вы можете пропустить этот шаг.

  2. Включите регистрацию по умолчанию, добавив следующее значение в манифест под тегом <application> :

    <meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
    
  3. Включите политику MAM, которая требуется, добавив следующее значение в манифест под тегом <application> :

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

Изолированные процессы

Пакет SDK для приложений Intune не может применять средства защиты к изолированным процессам. Поддержка изолированных процессов (android:isolatedProcess) требует добавления тега метаданных ниже.

Предупреждение

Добавляя эти метаданные, приложение заявляет, что изолированный процесс не может предоставлять данные организации. Ваша заявка несет ответственность за обеспечение этого.

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

Пользовательские ограничения записи экрана

Если ваше приложение содержит функцию пользовательского захвата экрана, которая обходит ограничение уровня FLAG_SECURE AndroidWindow, необходимо выполнить проверку политики захвата экрана перед предоставлением полного доступа к этой функции. Например, если приложение использует пользовательский модуль отрисовки для отображения текущего представления в PNG-файле, необходимо сначала выполнить проверкуAppPolicy.getIsScreenCaptureAllowed().

Если ваше приложение не содержит пользовательские или сторонние функции захвата экрана, вам не нужно предпринимать никаких действий для ограничения захвата экрана. Политика захвата экрана автоматически применяется на этом уровне для всех приложений, Window интегрированных с MAM.

Любые попытки операционной системы или другого приложения записать звук Window в приложении будут заблокированы по мере необходимости. Например, если пользователь попытается захватить экран вашего приложения с помощью встроенных в Android функций записи снимков экрана или записи экрана, захват будет автоматически ограничен без участия вашего приложения.

Ограничения для применения политик

  • Использование распознавателей содержимого: Политика Intune "Передача или получение" может блокировать или частично блокировать использование распознавателя содержимого для доступа к поставщику содержимого в другом приложении. Это приведет к тому, что ContentResolver методы вернут null или выдадут значение ошибки (например, openOutputStream будет выброшено FileNotFoundException в случае блокировки). Приложение может определить, вызвана ли сбой записи данных через распознаватель содержимого политикой (или будет вызвана политикой), выполнив вызов:

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

    При отсутствии связанных действий выполните следующие действия.

    MAMPolicyManager.getCurrentThreadPolicy().getIsSaveToLocationAllowed(contentURI);
    

    Во втором случае приложения с несколькими удостоверениями должны позаботиться о соответствующей настройке удостоверения потока (или передать явное удостоверение вызову getPolicyForIdentity ).

Экспортированные услуги

Файл AndroidManifest.xml, включенный в пакет SDK для Intune приложений, содержит MAMNotificationReceiverService, который должен быть экспортированной службой, чтобы Корпоративный портал могли отправлять уведомления управляемому приложению. Служба проверяет вызывающего абонента, чтобы убедиться, что только Корпоративный портал имеет право отправлять уведомления.

Ограничения отражения

Некоторые из базовых классов MAM (например, MAMActivity, MAMDocumentsProvider) содержат методы (основанные на исходных базовых классах Android), которые используют типы параметров или возвратов, присутствующие только над определенными уровнями API. По этой причине не всегда можно использовать рефлексию для перечисления всех методов компонентов приложения. Это ограничение не ограничивается MAM, это то же самое ограничение, которое применялось бы, если бы само приложение реализовало эти методы из базовых классов Android.

Роболектрик

Тестирование поведения пакета SDK приложения Intune в Robolectric не поддерживается. Существуют известные проблемы при работе пакета SDK в Robolectric из-за поведения, присутствующего в Robolectric, который не точно имитирует поведение на реальных устройствах или эмуляторах.

Если вам нужно протестировать свое приложение в Robolectric, рекомендуется переместить логику класса приложения во вспомогательную службу и создать apk для модульного тестирования с классом приложения, который не наследуется от MAMApplication.