Руководство разработчика по пакету 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:
Цели этапа
В этом руководстве содержатся более подробные сведения об архитектуре пакета 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
и NotificationManagerCompat
NotificationManager
.PackageManager
ContentResolver
ContentProviderClient
Регистрация 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 минут, когда она активна. Вы можете избежать этого ожидания и принудительно пройти проверку на корпоративном портале:
- Запустите корпоративный портал. Вам не нужно выполнять вход.
- Выберите ... значок меню.
- Выберите Настройки.
- Прокрутите страницу до параметра с именем "Политика управления".
- Нажмите кнопку Синхронизировать.
Это сразу же запланировало проверку и получите актуальную политику, предназначенную для вашего приложения и учетной записи.
Устранение неполадок с миграцией 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, прежде чем разрешить пользователям доступ к приложению.
Примечание.
Регистрация по умолчанию учитывается в национальном облаке.
Включите регистрацию по умолчанию, выполнив следующие действия.
Если ваше приложение интегрирует MSAL или вам нужно включить единый вход, настройте MSAL. В противном случае этот шаг можно пропустить.
Включите регистрацию по умолчанию, добавив следующее значение в манифест под тегом
<application>
:<meta-data android:name="com.microsoft.intune.mam.DefaultMAMServiceEnrollment" android:value="true" />
Включите требуемую политику 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.