Поделиться через


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

Пакет SDK для приложений Microsoft Intune для Android позволяет включать политики защиты приложений Intune (также известные как политики ПРИЛОЖЕНИЙ или MAM) в собственное приложение Android для Java или Kotlin. Приложение, управляемое 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 расширяет .Activity Слой MAM фильтрует вызовы системных операций, чтобы легко предоставить приложению управляемое представление о мире.

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

Базовый класс Android Замена пакета SDK для приложений 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 (требуется только в том случае, если связыватель не создан из интерфейса AIDL) 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

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

Во многих случаях метод, доступный в классе 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 Замена пакета 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

Некоторые классы имеют большую часть своих методов, например , ClipboardManager, и в то время как в других классах заключен только один или два метода, например DownloadManager, PrintManager, PrintHelper, View, DragEventи NotificationManagerCompatNotificationManager .PackageManagerContentResolverContentProviderClient

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

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

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

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

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

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

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

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

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

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

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

  • Через корпоративный портал
    • Открытие приложения корпоративного портала
    • Выберите меню с тремя точками в правом верхнем углу
    • Выберите Параметры
    • В разделе Журналы диагностики выберите Сохранить журналы.
    • Следуйте инструкциям, чтобы выбрать выходной каталог, чтобы сохранить журналы корпоративного портала.
    • Используйте adb shell pull команду , чтобы извлечь журналы с устройства 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 пакетах и com.microsoft.intune.mam.client.support.v4 их эквивалентами AndroidX. Например, ссылки на MAMAppCompatActivity должны быть изменены на AndroidX 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.

Robolectric

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

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