Руководство разработчика по пакету SDK для приложений Microsoft Intune для Android
Пакет SDK для приложений Microsoft Intune для Android позволяет включить Intune политики защиты приложений (также известные как политики приложений или MAM) в собственное приложение Android для Java или Kotlin. Управляемое Intune приложение интегрировано с пакетом SDK для приложений Intune. администраторы Intune могут легко развертывать политики защиты приложений в приложении, управляемом Intune, когда Intune активно управляет приложением.
Важно!
Intune регулярно выпускает обновления пакета SDK для приложений Intune. Мы рекомендуем подписываться на репозитории пакета SDK для Intune приложений для обновлений, чтобы вы могли включить обновление в цикл выпуска программного обеспечения и убедиться, что приложения поддерживают последние параметры политики защиты приложений.
Запланируйте обязательное Intune обновления пакета SDK для приложений перед каждым основным выпуском ОС, чтобы обеспечить бесперебойную работу приложения, так как обновления ОС могут привести к критическим изменениям. Если вы не обновляете до последней версии до основного выпуска ОС, вы можете столкнуться с критическим изменением и (или) не сможете применить политики защиты приложений к приложению.
Поток процесса
На следующей схеме представлен поток процесса пакета SDK для приложений Intune для Android:
Этап Goals
В этом руководстве содержатся более подробные сведения об архитектуре пакета 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)
для отображения одного и того же пользовательского интерфейса для сбора Корпоративный портал журналов.
Быстрое тестирование с изменением политики
При разработке и тестировании интеграции Intune пакета SDK для приложений вы можете часто изменять параметры политики защиты приложений для тестового пользователя.
По умолчанию интегрированные приложения будут проверка со службой 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.