Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет SDK для приложений Microsoft Intune для Android позволяет включать политики защиты приложений Intune (также известные как политики MAM) в родное приложение Java/Kotlin для Android. Приложение, управляемое Intune, интегрируется с пакетом SDK приложения Intune. Администраторы Intune могут легко развернуть политики защиты приложений в вашем приложении, управляемом Intune, когда Intune активно управляет приложением.
Примечание.
Это руководство разделено на несколько отдельных этапов. Начните со знакомства со статьей "Планирование интеграции".
Этап 7. Функции участия в приложении
Цели этапа
- Узнайте о функциях участия в приложении, предлагаемых пакетом SDK для приложений Intune.
- Интегрировать функции участия в приложении, относящиеся к вашему приложению и пользователям.
- Протестируйте интеграцию этих функций.
Что такое "Функции участия в приложении"?
Этот процесс интеграции пакета SDK направлен на минимизацию объема кода, который необходимо написать разработчикам. После успешного завершения предыдущих этапов интеграции пакета SDK ваше приложение теперь применяет большинство параметров политики защиты приложений, таких как шифрование файлов, ограничения копирования и вставки, блокирование снимков экрана и ограничения передачи данных.
Однако для правильного применения некоторых параметров требуется код, специфичный для приложения; Эти параметры называются функциями участия приложения. Как правило, пакет SDK не имеет достаточного контекста о коде приложения или сценарии конечного пользователя, чтобы автоматически применять эти параметры, и поэтому полагается на то, что разработчики будут соответствующим образом вызывать API пакета SDK.
Функции участия в приложении не обязательно являются необязательными. В зависимости от существующих функций вашего приложения, эти функции могут потребоваться. Подробные сведения см. в разделе "Основные решения по интеграции пакета SDK ".
На предыдущих этапах этого руководства уже описаны некоторые функции участия в приложении:
- Множественная идентичность, рассматриваемая на этапе 5: Множественная идентичность.
- Конфигурация приложения, как описано на этапе 6: конфигурация приложений.
В оставшейся части этого руководства описаны оставшиеся функции участия приложения:
- Применение политики, ограничивающей сохранение файлов в локальном или облачном хранилище и открытие файлов из него.
- Принудительное применение политики, ограничивающей содержимое в уведомлениях.
- Принудительная политика защиты данных резервных копий.
- Принудительная политика, ограничивающая захват экрана (если ваше приложение имеет пользовательский код захвата экрана).
- Поддержка ЦС защиты приложений.
- Зарегистрируйтесь, чтобы получать уведомления от SDK.
- Примените настраиваемые темы приложений.
- Используйте доверенные сертификаты Intune, чтобы обеспечить цепочку доверия для локальных конечных точек.
Основные сведения об участии в приложении
Интерфейс AppPolicy содержит множество методов, сообщающих вашему приложению, разрешены ли определенные действия.
Большинство функций участия в приложении включают:
- Определение правильного места в коде приложения для проверки, если действие разрешено.
- Вызов
AppPolicyметода для проверки, если действие разрешено на основе настроенной политики. - В зависимости от результата либо разрешение действия, либо изменение поведения приложения при его блокировке.
Чтобы получить экземпляр, AppPolicy используйте один из методов MAMPolicyManager , например getPolicy(final Context context) или getPolicyForIdentityOID(final String oid).
Информационные методы в AppPolicy
Не каждый метод AppPolicy привязан к функции участия в приложении.
Некоторые методы являются информационными и предоставляют приложению данные о том, какие политики настроены в настоящий момент, даже если эти политики автоматически применяются пакетом SDK.
Эти методы существуют, чтобы дать вашим приложениям возможность предоставлять пользовательский интерфейс при настройке определенных политик.
Пример: Определение блокировки снимков экрана
Если в приложении есть элемент управления, который позволяет пользователю делать снимки экрана, попробуйте отключить или скрыть этот элемент управления, если политика защиты приложений блокирует снимки экрана.
Приложение может выполнить проверку, позвонив MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().
Политика ограничения передачи данных между приложениями и расположениями устройства или облачного хранилища
Многие приложения позволяют пользователю сохранять данные в локальном файловом хранилище или облачных службах хранения данных или открывать их из них. Пакет SDK для приложений Intune позволяет ИТ-администраторам защищаться от проникновения и утечки данных, ограничивая место сохранения и открытия данных приложениями.
Примечание.
Если ваше приложение допускает сохранение в личные или облачные расположения непосредственно из приложения или позволяет открывать данные непосредственно в приложении, необходимо реализовать эту функцию участия в приложении SDK приложения Intune**, чтобы ИТ-администраторы могли заблокировать такое сохранение и открытие.
Сохранение на устройстве или в облачном хранилище
API getIsSaveToLocationAllowedForOID сообщает приложению, разрешено ли сохранение в определенные расположения для данного удостоверения на основе настроенной политики:
MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);
Чтобы определить, должно ли приложение осуществлять getIsSaveToLocationAllowedForOID проверку, определите, поддерживает ли оно исходящий трафик данных, изучив следующую таблицу:
service Параметр: SaveLocation значение перечисления |
Вариант использования | Связанный OID |
|---|---|---|
ONEDRIVE |
Приложение сохраняет данные в OneDrive. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
SHAREPOINT |
Приложение сохраняет данные в SharePoint. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
BOX |
Приложение сохраняет данные в Box. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
LOCAL |
Приложение сохраняет данные во внешнем хранилище на устройстве, которое не является частным хранилищем приложения. | Это место хранения не считается облачной службой и всегда должно использоваться с параметром null OID. |
PHOTO_LIBRARY |
Приложение сохраняет данные в локальном хранилище фотографий Android. | Локальное хранилище фотографий не считается облачной службой и всегда должно использоваться с параметром null OID. |
IMANAGE |
Приложение сохраняет данные в iManage. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
EGNYTE |
Приложение сохраняет данные в Egnyte. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
ACCOUNT_DOCUMENT |
Приложение сохраняет данные в расположении, связанном с учетной записью в приложении, и не входит в число облачных расположений в этой таблице. Используйте это расположение, чтобы определить, можно ли передавать данные между учетными записями в приложении с несколькими удостоверениями. |
OID для учетной записи, используемой для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
OTHER |
Приложение сохраняет данные в расположение, не указанное в этой таблице, и не соответствует условиям .ACCOUNT_DOCUMENT |
Значение oid не оценивается для этого расположения.null |
Files, помещенные в личное хранилище приложений, которые либо необходимы для работы приложения, либо временно загружены для отображения, всегда разрешены; нет необходимости проверка getIsSaveToLocationAllowedForOID.
Выполните проверку SaveLocation.LOCAL для
- Files сохраняются за пределами частного хранилища приложений.
- Files скачаны в частное хранилище приложений, которые не нужны для работы приложения (например, когда пользователь явно выбирает скачивание на устройство).
Примечание.
При проверке политики сохранения должен быть указан OID учетной записи, связанной с облачной службой, oid в которую выполняется сохранение (эта учетная запись не обязательно совпадает с учетной записью, которой принадлежит сохраняемый документ).
Открытие данных из локального или облачного хранилища
getIsOpenFromLocationAllowedForOID API сообщает приложению, разрешено ли открытие из определенных расположений для данного удостоверения на основе настроенной политики:
MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);
Чтобы определить, должно ли приложение осуществлять getIsOpenFromLocationAllowedForOID проверку, определите, поддерживает ли оно вход данных, изучив следующую таблицу:
location Параметр: OpenLocation значение перечисления |
Вариант использования | Связанный OID |
|---|---|---|
ONEDRIVE_FOR_BUSINESS |
Приложение открывает данные из OneDrive. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
SHAREPOINT |
Приложение открывает данные из SharePoint. | OID для учетной записи, который используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
CAMERA |
Приложение открывает данные с камеры устройства. | Значение null , так как камера устройства не является облачной службой. |
LOCAL |
Приложение открывает данные из внешнего хранилища на устройстве, которое не является его личным. | Хотя внешнее oid хранилище не является облачной службой, параметр является ожидаемым, так как указывает на право собственности.* Для файлов с тегами удостоверений: oid должно быть удостоверением владельца файла.* Для файлов без идентификационного тега: oid должно быть null. |
PHOTO_LIBRARY |
Приложение открывает данные из локального хранилища фотографий Android. | Локальное хранилище фотографий не считается облачной службой и всегда должно использоваться с параметром null OID. |
ACCOUNT_DOCUMENT |
Приложение открывает данные из расположения, связанного с учетной записью в приложении, и не входит в одно из определенных облачных расположений в этой таблице. Используйте это расположение, чтобы определить, можно ли передавать данные между учетными записями в приложении с несколькими удостоверениями. |
OID для учетной записи, используемой для проверки подлинности Microsoft Entra. Если этой учетной записи не существует или OID неизвестен, используйте null. |
OTHER |
Приложение открывает данные из расположения, не указанного в этой таблице, и не соответствует критериям для ACCOUNT_DOCUMENT. |
Значение oid не оценивается для этого расположения.null |
Примечание.
При проверке открытой политики должен быть OID учетной записи, oid связанной с открываемым файлом или облачной службой (не обязательно совпадает с учетной записью, открывающей документ).
Совет
Для удобства в пакете SDK предусмотрен метод AppPolicy.isOpenFromLocalStorageAllowed , принимающий File параметр для файла в локальном хранилище.
В целях применения политик этот метод функционально идентичен вызовуAppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid), за исключением того, что он обрабатывает синтаксический анализ владельца oid файла из файла .File
Диалоговое окно блокировки общего доступа
Пакет SDK предоставляет диалоговое окно для уведомления пользователя, когда политика MAM блокирует действие передачи данных.
Диалоговое окно должно отображаться для пользователя каждый раз, когда getIsSaveToLocationAllowedForOIDgetIsOpenFromLocationAllowedForOID вызов API приводит к блокировке действия сохранения/открытия.
В диалоговом окне отображается универсальное сообщение, которое возвращается к звонку Activity при его закрытии.
Чтобы отобразить диалоговое окно, добавьте следующий код:
MAMUIHelper.showSharingBlockedDialog(currentActivity)
Разрешить общий доступ к файлам
Если сохранение в общедоступных хранилищах запрещено, приложение все равно должно позволить пользователю просматривать файлы, скачивая их в частное хранилище приложения , а затем открывая их с помощью средства выбора системы.
Политика ограничения содержимого в уведомлениях
Для приложений с одним удостоверением поведение по умолчанию пакета SDK для приложений Intune пытается заблокировать все уведомления, когда политика защиты приложений ограничивает уведомления.
Поведение пакета SDK по умолчанию является ограниченным. Пакет SDK не может автоматически учитывать значение "Блокировка данных организации", которое предназначено для удаления только управляемого контента из уведомлений. Для приложений с несколькими удостоверениями пакет SDK не может определить, какие уведомления содержат управляемое содержимое.
Если ваше приложение отображает уведомления и является мультиудостоверенным и/или должно учитывать значение «Блокировка данных организации», оно должно выполнить проверку политики ограничения уведомлений для учетной записи, связанной с уведомлением, прежде чем показывать уведомление.
Чтобы определить, применяется ли политика, выполните следующий вызов:
NotificationRestriction notificationRestriction =
MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();
Возвращаемое NotificationRestriction перечисление имеет следующие значения:
NotificationRestriction Перечисление |
Ожидаемое поведение приложения |
|---|---|
BLOCKED |
Приложение не должно отображать уведомления для учетной записи, связанной с этой политикой. Для приложений с одним удостоверением пакет SDK для приложений Intune автоматически блокирует все уведомления, и дополнительный код не требуется. |
BLOCK_ORG_DATA |
Приложение должно отображать измененное уведомление, не содержащее данных организации. |
UNRESTRICTED |
Приложение должно отобразить все уведомления. |
Если приложение не вызывается getNotificationRestrictionнадлежащим образом, пакет SDK MAM прилагает все усилия для автоматического ограничения уведомлений только для приложений с одним идентификатором.
В этом случае оно обрабатывается так же, BLOCK_ORG_DATA как BLOCKED и уведомление не отображается совсем.
Для более точного контроля проверьте, проверка значение уведомлений getNotificationRestriction приложения и соответствующим образом измените их.
Политика защиты данных резервных копий
Пакет SDK для приложения Intune может блокировать передачу данных во встроенную функцию резервного копирования и восстановления Android. Дополнительные сведения о резервном копировании и восстановлении в Android см. в руководстве по API Android и изменениях, внесенных в Android S/12 в разделе Изменение для резервного копирования и восстановления.
Автоматическое резервное копирование для приложений
Начиная с Android M, Android обеспечивает автоматическое полное резервное копирование на Google Диск для приложений независимо от целевого API приложения.
Intune позволяет использовать все функции автоматического резервного копирования, предоставляемые Android, в том числе возможность определять настраиваемые правила в XML с конкретными рекомендациями по интеграции Intune, чтобы обеспечить применение защиты данных.
Настройка поведения резервного копирования в манифесте приложения
По умолчанию установлено значение true, android:allowBackup как описано в разделе включение и отключение резервного копирования.
Если приложению не требуются функции полного резервного копирования и восстановления, установите android:allowBackup значение false.
В этом случае дальнейшие действия не требуются, и корпоративные данные остаются в приложении.
Если приложение требует полного резервного копирования и восстановления, установите android:allowBackupзначение true и выполните следующие действия.
Если приложение не использует собственные настройки
BackupAgent, используйте MAMBackupAgent по умолчанию, чтобы включить автоматическое полное резервное копирование в соответствии с политикой Intune. Поместите в манифест приложения следующее:<application ... android:fullBackupOnly="true" android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent" ...> </application>Необязательный параметр. При реализации пользовательского
BackupAgentоператора необходимо использовать MAMBackupAgent или MAMBackupAgentHelper. См. следующие разделы. Рассмотрите возможность перехода на MAMDefaultBackupAgent Intune, описанный в шаге 1, который обеспечивает простое резервное копирование на Android M и более поздних версиях.При выборе типа полной резервной копии (нефильтрованной, фильтрованной или отсутствующей), задайте для атрибута
android:fullBackupContentзначениеtrue,falseлибо ресурс XML в приложении.Затем необходимо скопировать значение в
android:fullBackupContentcom.microsoft.intune.mam.FullBackupContentтег метаданных, а для приложений, поддерживающих формат конфигурации XML, добавленный в API 31, — вcom.microsoft.intune.mam.DataExtractionRulesтег метаданных.Пример 1. Если вы хотите, чтобы в вашем приложении были полные резервные копии без исключений, вы должны установить атрибуты и теги метаданных в true:
<application ... android:fullBackupContent="true" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />Пример 2. Если вы хотите, чтобы приложение использовало свое настраиваемое
BackupAgentи отказалось от полного автоматического резервного копирования, соответствующего политике Intune, необходимо установить для атрибутов и тегов метаданных значение false:<application ... android:fullBackupContent="false" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />Пример 3. Если вы хотите, чтобы приложение имело полные резервные копии в соответствии с пользовательскими правилами, определенными в XML-файле, настройте атрибут и тег метаданных на один и тот же ресурс XML:
<application ... android:fullBackupContent="@xml/my_full_backup_content_scheme" android:dataExtractionRules="@xml/my_data_extraction_rules_scheme" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
Резервное копирование ключей и значений
Опция резервного копирования ключей/значений доступна для всех API 8+ и загружает данные приложения в службу резервного копирования Android. Объем данных на одно приложение ограничен 5 МБ. Если вы используете резервное копирование "ключ/значение", необходимо использовать BackupAgentHelper или BackupAgent.
BackupAgentHelper
BackupAgentHelper проще внедрить, чем BackupAgent, как с точки зрения встроенной функциональности Android, так и с точки зрения интеграции Intune MAM.
BackupAgentHelper позволяет разработчику регистрировать целые файлы и общие настройки в и FileBackupHelperSharedPreferencesBackupHelper (соответственно), которые затем добавляются в BackupAgentHelper при создании.
Выполните следующие действия для использования BackupAgentHelper в Intune MAM:
Чтобы использовать резервное копирование с несколькими удостоверениями с
BackupAgentHelper, следуйте руководству Android по расширению BackupAgentHelper.Пусть класс расширит эквивалент MAM для BackupAgentHelper, FileBackupHelper и SharedPreferencesBackupHelper.
| Класс Android | Эквивалент MAM |
|---|---|
BackupAgentHelper |
MAMBackupAgentHelper |
FileBackupHelper |
MAMFileBackupHelper |
SharedPreferencesBackupHelper |
MAMSharedPreferencesBackupHelper |
Соблюдение этих рекомендаций позволяет успешно выполнять резервное копирование и восстановление нескольких удостоверений.
Резервный агент
С помощью BackupAgent вы можете более четко указать, для каких данных создаются резервные копии. Поскольку за реализацию отвечает разработчик, требуются дополнительные действия для обеспечения надлежащей защиты данных со стороны Intune. Поскольку основная часть работы возлагается на вас как разработчика, интеграция с Intune является немного более сложной.
Интеграция MAM:
Внимательно ознакомьтесь с руководством Android по резервному копированию ключей и значений , в частности по расширению BackupAgent , чтобы убедиться, что реализация BackupAgent соответствует рекомендациям Android.
Пусть ваш класс расширит MAMBackupAgent.
Резервное копирование с несколькими удостоверениями:
Перед началом резервного копирования проверка, что ИТ-администратор разрешил создать резервную копию файлов или буферов данных, для которых вы планируете создавать резервные копии в сценариях с несколькими удостоверениями. Используйте
isBackupAllowedв MAMFileProtectionManager и MAMDataProtectionManager , чтобы определить это поведение. Если резервное копирование файла или буфера данных запрещено включать, не следует включать его в резервное копирование.Если в какой-то момент резервного копирования нужно создать резервную копию удостоверений файлов, проверенных на шаге 1, необходимо вызвать
backupMAMFileIdentity(BackupDataOutput data, File … files)файлы, из которых планируется извлечь данные. Этот метод автоматически создает новые резервные объекты и записывает ихBackupDataOutputдля вас. Эти объекты автоматически используются при восстановлении.
Восстановление нескольких удостоверений: Руководство по резервному копированию данных определяет общий алгоритм восстановления данных приложения и содержит пример кода в разделе Расширение BackupAgent . Чтобы выполнить успешное восстановление с несколькими удостоверениями, необходимо следовать общей структуре, представленной в этом примере кода, уделяя особое внимание следующим моментам:
Необходимо использовать
while(data.readNextHeader())цикл * для перехода по резервным объектам.Вы должны позвонить
data.skipEntityData(), еслиdata.getKey()не соответствует написаннойonBackupвами клавише . Без этого шага восстановление может оказаться неудачным.Избегайте возврата при использовании резервных сущностей в
while(data.readNextHeader())конструкции *, так как любые сущности, которые мы автоматически записываем, в этом случае теряются.
- Где
data— имя локальной переменной MAMBackupDataInput , который приложение получает при восстановлении?
Пользовательские ограничения записи экрана
Если ваше приложение содержит функцию пользовательского захвата экрана, которая обходит ограничение уровня FLAG_SECURE AndroidWindow, необходимо выполнить проверку политики захвата экрана перед предоставлением полного доступа к этой функции.
Например, если приложение использует пользовательский модуль отрисовки для отображения текущего представления в PNG-файле, необходимо сначала выполнить проверкуAppPolicy.getIsScreenCaptureAllowed().
Примечание.
Если приложение не содержит пользовательские функции захвата экрана или функции, сделанные не Майкрософт, никаких действий для ограничения клипов экрана не требуется.
Политика захвата экрана автоматически применяется на этом уровне для всех приложений, Window интегрированных с MAM.
Любые попытки операционной системы или другого приложения захватить звук Window в приложении блокируются в соответствии с требованиями.
Например, если пользователь пытается выполнить захват экрана вашего приложения с помощью встроенных функций записи снимков экрана или снимков экрана в Android, этот захват автоматически ограничивается без участия вашего приложения.
Поддержка ЦС защиты приложений
ЦС защиты приложений (условный доступ), также известный как ЦС на основе приложений, ограничивает доступ к ресурсам. Политики защиты приложений Intune должны управлять приложением, прежде чем оно получит доступ к этим ресурсам. Microsoft Entra ID применяет эту политику, требуя, чтобы приложение зарегистрировалось в политиках защиты приложений Intune и управлялось ими, прежде чем предоставить маркер для доступа к ресурсу, защищенному с помощью функции условного доступа.
Примечание.
Для поддержки ЦС защиты приложений требуется библиотека проверки подлинности Майкрософт (MSAL) версии 1.0.0 или более поздней.
Обработка несоответствия MSAL
Когда приложение получает маркер для учетной записи, библиотека MSAL может возвращать или выбрасывать маркер, MsalIntuneAppProtectionPolicyRequiredException чтобы указать на несоответствие управлению политикой защиты приложений.
Вы можете извлечь дополнительные параметры из исключения для использования при исправлении соответствия требованиям (см. MAMComplianceManager).
После успешного исправления приложение может снова попытаться получить маркер через MSAL.
MAMComplianceManager
Интерфейс MAMComplianceManager используется, когда от MSAL получена требуемая политикой ошибка.
Он содержит метод [remediteCompliance], который необходимо вызвать, чтобы попытаться привести приложение в состояние, соответствующее требованиям.
Вы можете получить ссылку на MAMComplianceManager следующее:
MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);
// make use of mgr
Возвращаемый MAMComplianceManager экземпляр гарантированно не будет null.
package com.microsoft.intune.mam.policy;
public interface MAMComplianceManager {
void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}
Метод remediateCompliance() пытается поставить приложение под управление, чтобы выполнить условия, при которых Microsoft Entra ID предоставит запрошенный маркер.
Первые четыре параметра можно извлечь из исключения, получаемого методом MSAL AuthenticationCallback.onError() .
Последний параметр — это логическое значение, которое управляет отображением взаимодействия с пользователем во время попытки соответствия требованиям.
remediateCompliance Отображает простое диалоговое окно хода выполнения блокировки, поэтому приложениям не нужно показывать настраиваемые возможности во время этой операции.
Это диалоговое окно отображается только во время выполнения исправления соответствия. Он не отображает окончательный результат.
Приложение может зарегистрировать получателя уведомления, COMPLIANCE_STATUS чтобы обработать успех или неудачу попытки исправления соответствия.
Дополнительные сведения см. в разделе "Уведомления о состоянии соответствия ".
remediateCompliance() может инициировать регистрацию в MAM в рамках обеспечения соответствия требованиям.
Приложение может получить уведомление о регистрации, если оно зарегистрировало получателя уведомлений для уведомлений о регистрации.
Метод зарегистрированного MAMServiceAuthenticationCallback приложения вызывается acquireToken() для получения маркера для регистрации.
acquireToken() вызывается до того, как приложение получит собственный маркер. Возможно, еще не выполнены бухгалтерские задачи или задачи по созданию учетных записей, выполняемые приложением после успешного приобретения маркера.
В этом случае обратный вызов должен иметь возможность получения маркера.
Если вам не удается вернуть маркер из acquireToken(), попытка исправления соответствия завершается сбоем.
Если позднее вы вызовете updateToken систему с допустимым маркером для запрошенного ресурса, исправление соответствия требованиям будет немедленно возобновлено с использованием указанного маркера.
Примечание.
Автоматическое получение токенов по-прежнему возможно acquireToken() , потому что пользователь уже получил инструкции по установке брокера и регистрации устройства до того, как MsalIntuneAppProtectionPolicyRequiredException произойдет исключение.
В результате этого процесса брокер имеет действительный токен обновления в своем кэше, что позволяет брокеру получить запрошенный токен незаметно.
Ниже приведен пример, который получает требуемую политикой ошибку в методе AuthenticationCallback.onError() и вызывает MAMComplianceManager для обработки ошибки.
public void onError(@Nullable MsalException exc) {
if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {
final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
(MsalIntuneAppProtectionPolicyRequiredException) ex;
final String upn = policyRequiredException.getAccountUpn();
final String aadId = policyRequiredException.getAccountUserId();
final String tenantId = policyRequiredException.getTenantId();
final String authority = policyRequiredException.getAuthorityURL();
MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
}
}
Уведомления о состоянии соответствия
Если приложение регистрируется для получения уведомлений COMPLIANCE_STATUSтипа, система отправляет a MAMComplianceNotification , чтобы сообщить приложению об окончательном состоянии попытки исправления соответствия.
Подробные сведения о регистрации см. в разделе "Регистрация", чтобы получать уведомления от SDK .
public interface MAMComplianceNotification extends MAMUserNotification {
MAMCAComplianceStatus getComplianceStatus();
String getComplianceErrorTitle();
String getComplianceErrorMessage();
}
Метод getComplianceStatus() возвращает результат попытки исправления соответствия в виде значения из перечисления [MAMCAComplianceStatus].
| Код состояния | Объяснение |
|---|---|
UNKNOWN |
Состояние неизвестно. Это состояние может указывать на непредвиденную причину сбоя. Дополнительные сведения можно найти в журналах корпоративного портала. |
COMPLIANT |
Исправление соответствия требованиям выполнено успешно, и теперь приложение соответствует политике. Следует повторить попытку приобретения токена MSAL. |
NOT_COMPLIANT |
Попытка исправить соответствие не удалась. Приложение не соответствует требованиям, и получение токена MSAL не следует повторять, пока ошибка не будет исправлена. Сюда MAMComplianceNotification включены дополнительные сведения об ошибках. |
SERVICE_FAILURE |
При попытке получения данных о соответствии требованиям из службы Intune произошла ошибка. Дополнительные сведения можно найти в журналах корпоративного портала. |
NETWORK_FAILURE |
Произошла ошибка при подключении к службе Intune. При восстановлении сетевого подключения приложению следует повторить попытку получения маркера. |
CLIENT_ERROR |
Попытка исправить соответствие не удалось из-за проблемы, связанной с клиентом, такой как отсутствие или неправильный маркер пользователя. Включает MAMComplianceNotification дополнительные сведения об ошибках. |
PENDING |
Попытка исправить соответствие завершается сбоем, так как служба не отправляет ответ о состоянии до истечения установленного времени. Приложению следует попробовать получить маркер позже. |
COMPANY_PORTAL_REQUIRED |
Для успешного исправления соответствия требованиям на устройстве необходимо установить Корпоративный портал. Если оно уже установлено, его необходимо перезапустить. Диалоговое окно предлагает пользователю перезапустить приложение. |
Если состояние соответствия — MAMCAComplianceStatus.COMPLIANT, приложению следует повторно инициировать исходное получение маркера (для собственного ресурса).
Если попытка исправления соответствия требованиям завершилась сбоем, методы and getComplianceErrorMessage() возвращают локализованные строки, getComplianceErrorTitle() которые приложение может отображать конечному пользователю, если захочет.
Приложение не может устранить большинство ошибок. Как правило, создайте учетную запись или войдите в систему и позвольте пользователю повторить попытку позже.
Если сбой постоянный, журналы корпоративного портала могут помочь определить причину. Конечный пользователь может отправлять журналы. Дополнительные сведения см. в разделе Журналы отправки и электронной почты.
Вот пример регистрации приемника с помощью анонимного класса для реализации интерфейса MAMNotificationReceiver:
final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
public boolean onReceive(MAMNotification notification) {
if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
// take appropriate action based on complianceNotification.getComplianceStatus()
// unregister this receiver if no longer needed
notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
}
return true;
}
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);
Примечание.
Необходимо зарегистрировать получателя уведомлений перед звонком remediateCompliance() , чтобы избежать состояния гонки, которое может привести к пропуску уведомления.
Объявление поддержки ЦС защиты приложений
Когда ваше приложение будет готово к обработке исправления ЦС приложения, вы сможете сообщить Майкрософт, что приложение готово к использованию ЦС приложения. Чтобы сделать это в приложении MSAL, создайте общедоступный клиент с возможностями клиента protapp
{
"client_id" : "[YOUR_CLIENT_ID]",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "[YOUR_REDIRECT_URI]",
"multiple_clouds_supported":true,
"broker_redirect_uri_registered": true,
"account_mode": "MULTIPLE",
"client_capabilities": "protapp",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount"
}
}
]
}
После выполнения этих действий перейдите к проверке ЦС защиты приложений.
Примечания по реализации
Примечание.
Метод приложения MAMServiceAuthenticationCallback.acquireToken() должен передавать значение false , forceRefresh чтобы флаг был изменен на acquireTokenSilentAsync().
AcquireTokenSilentParameters acquireTokenSilentParameters =
builder.withScopes(Arrays.asList(scopes))
.forceRefresh(false)
.build();
acquireTokenSilentAsync(acquireTokenSilentParameters);
Примечание.
Если вы хотите показать пользовательский блокирующий UX во время попытки исправления, необходимо передать значение false для параметра showUX в remediateCompliance().
Вы должны убедиться, что вы продемонстрировали UX и зарегистрировали слушателя уведомлений перед звонком remediateCompliance().
Это позволяет избежать состояния гонки, в котором уведомление может быть пропущено в случае remediateCompliance() быстрого сбоя.
Например, onCreate() метод или onMAMCreate() подкласса Activity является идеальным местом для регистрации прослушивателя уведомлений и последующего вызова remediateCompliance().
Параметры для remediateCompliance() могут быть переданы в UX как дополнительные параметры намерения.
После получения уведомления о состоянии соответствия вы можете отобразить результат или завершить действие.
Примечание.
remediateCompliance() Регистрация учетной записи и попытка регистрации. После того, как основной токен получен, вызов registerAccountForMAM() не требуется, но в этом нет ничего плохого.
С другой стороны, если приложению не удается получить маркер и оно хочет удалить учетную запись пользователя, оно должно вызвать unregisterAccountForMAM() команду удаления учетной записи, чтобы предотвратить повторные попытки регистрации в фоновом режиме.
Зарегистрируйтесь, чтобы получать уведомления от SDK
В руководстве по пакету SDK для приложений Intune обсуждается несколько сценариев, в которых может потребоваться регистрация приложения для получения уведомлений от пакета SDK, например:
- Обработка
WRONG_USERприложений с несколькими удостоверениями (см. раздел Управляемые и неуправляемые удостоверения) - Обработка
MANAGEMENT_REMOVEDприложений с несколькими удостоверениями (см. раздел Защита буфера данных). - Обработка
WIPE_USER_DATAприложений с несколькими удостоверениями илиWIPE_USER_AUXILIARY_DATA(см. раздел Выборочная очистка). - Приложения, реализующие обработку
REFRESH_APP_CONFIGконфигурации приложения (см. раздел Получение конфигурации приложения из пакета SDK).
В этом разделе описываются все типы уведомлений, которые может отправлять пакет SDK, время и почему приложение может их прослушивать, а также способы реализации приемника уведомлений.
Типы уведомлений
Все уведомления SDK реализуют интерфейс MAMNotification , который имеет единственную функцию, getType()которая возвращает перечисление MAMNotificationType .
Большинство уведомлений — это экземпляры MAMUserNotification , предоставляющие сведения, относящиеся к одному удостоверению. OID удостоверения можно получить с getUserOid() помощью функции, а имя участника-пользователя можно получить с помощью getUserIdentity().
Далее — расширены MAMUserNotificationMAMEnrollmentNotification и MAMComplianceNotification , содержащие результаты попыток регистрации пользователя или устройства в службе MAM, а также результаты попыток обеспечить соответствие требованиям ЦС защиты приложений соответственно.
| Тип уведомления | Класс уведомлений | Причина уведомления | Применимость | Советы по обращению | Сведения о цепочке |
|---|---|---|---|---|---|
COMPLIANCE_STATUS |
MAMComplianceNotification |
Возвращает результат попытки исправления соответствия. | Приложения, реализующие ЦС защиты приложений, должны обрабатывать эту функцию. | – | Недетерминированный |
MAM_ENROLLMENT_RESULT |
MAMEnrollmentNotification |
Возвращает результат попытки регистрации. | Все приложения получают эту функцию. | – | Недетерминированный |
MANAGEMENT_REMOVED |
MAMUserNotification |
Приложение скоро станет неуправляемым. | Приложения, которые его используют MAMDataProtectionManager , должны обрабатывать это. |
См. MANAGEMENT_REMOVED. | Никогда в потоке пользовательского интерфейса |
REFRESH_APP_CONFIG |
MAMUserNotification |
Значения конфигурации приложения могли измениться. | Приложения, реализующие конфигурацию приложения и кэширующие данные конфигурации приложения, должны обрабатывать эту функцию. | Приложения должны аннулировать и обновлять все кэшированные данные конфигурации приложения. | Недетерминированный |
REFRESH_POLICY |
MAMUserNotification |
Политика защита приложений могла измениться. | Приложения, кэширующие политику защиты приложений, должны обрабатывать эту функцию. | Приложения должны аннулировать и обновлять кэшированные данные политики защиты приложений. | Недетерминированный |
WIPE_USER_DATA |
MAMUserNotification |
Ожидается очистка (*). | Приложения, которые используют MAMDataProtectionManager , должны обрабатывать это илиWIPE_USER_AUXILIARY_DATA. |
См. Выборочная затирание. | Никогда в потоке пользовательского интерфейса |
WIPE_USER_AUXILIARY_DATA |
MAMUserNotification |
Ожидается очистка (*). | Его получают только приложения с несколькими удостоверениями. Приложения, которые используют MAMDataProtectionManager , должны обрабатывать это илиWIPE_USER_DATA. |
См. Выборочная затирание. | Никогда в потоке пользовательского интерфейса |
WIPE_COMPLETED |
MAMUserNotification |
Очистка завершена. | Необязательно для всех приложений. | Доставлено после WIPE_USER_DATA или WIPE_USER_AUXILIARY_DATA.Если приложение сообщит о сбое от обработчика очистки, это уведомление не будет отправлено. |
Никогда в потоке пользовательского интерфейса |
(*) Очистка может возникать по многим причинам, например:
- Ваше приложение называется unregisterAccountForMAM.
- ИТ-администратор инициировал удаленную очистку.
- Политики условного доступа, требуемые администратором, не удовлетворены.
Предупреждение
Приложение никогда не должно регистрироваться одновременно WIPE_USER_DATA для уведомлений and WIPE_USER_AUXILIARY_DATA .
MANAGEMENT_REMOVED
Это MANAGEMENT_REMOVED уведомление информирует приложение о том, что учетная запись, ранее управляемая политикой, станет неуправляемой.
После того как с учетной записью перестанет быть управляемым, приложение больше не сможет читать зашифрованные файлы этой учетной записи, читать зашифрованные MAMDataProtectionManagerданные учетной записи, взаимодействовать с зашифрованным буфером обмена или иным образом участвовать в экосистеме управляемого приложения.
Для этого не требуется удалять пользовательские данные или выходить из учетной записи (если потребуется очистка, будет отправлено WIPE_USER_DATA уведомление).
Многим приложениям может не потребоваться обрабатывать это уведомление, но приложениям, которые его используют MAMDataProtectionManager , придется обрабатывать его.
Дополнительные сведения см. в статье "Защита буфера данных ".
Когда пакет SDK вызывает приемник приложения MANAGEMENT_REMOVED , происходит следующее.
Пакет SDK уже расшифровал ранее зашифрованные файлы (но не защищенные буферы данных), принадлежащие приложению. Files в общедоступных расположениях SD-карта, не принадлежащих приложению напрямую (например, папки "Документы" или "Загрузки"), не расшифровываются.
Любые новые файлы или защищенные буферы данных, создаваемые методом получателя (или любой другой код, выполняемый после запуска приемника), не шифруются.
У приложения сохраняется доступ к ключам шифрования, поэтому такие операции, как расшифровка буферов данных, выполняются успешно.
После возвращения приемника приложение больше не будет иметь доступа к ключам шифрования.
Реализация MAMNotificationReceiver
Чтобы зарегистрироваться для получения уведомлений от SDK, ваше приложение должно создать MAMNotificationReceiver и зарегистрировать его в MAMNotificationReceiverRegistry.
Чтобы зарегистрировать получателя, позвоните registerReceiver ему, указав нужный тип уведомления в своем Application.onCreate способе:
@Override
public void onCreate() {
super.onCreate();
MAMComponents.get(MAMNotificationReceiverRegistry.class)
.registerReceiver(
new ToastNotificationReceiver(),
MAMNotificationType.WIPE_USER_DATA);
}
Реализация MAMNotificationReceiver вашего приложения должна включать этот onReceive(MAMNotification notification) метод.
Этот метод вызывается отдельно для каждого полученного уведомления и должен возвращать .boolean
Как правило, этот метод всегда должен возвращать true, если только в приложении не произошел сбой при реагировании на уведомление.
Как и в случае с другими типами приемников Android, ваше приложение может гибко обрабатывать уведомления:
- Он может создавать различные реализации MAMNotificationReceiver для различных типов уведомлений. В этом случае обязательно зарегистрируйте каждую реализацию и каждый тип уведомления отдельно.
- Он может использовать одну реализацию MAMNotificationReceiver , содержащую логику для ответа на несколько различных типов уведомлений. В этом случае он должен быть зарегистрирован для каждого типа уведомлений, на которые он может отвечать.
- Он может создавать несколько реализаций MAMNotificationReceiver , каждая из которых реагирует на один и тот же тип уведомления. В этом случае оба уведомления должны быть зарегистрированы для одного и того же типа уведомления.
Совет
Его безопасно блокировать MAMNotificationReceiver.onReceive , так как его обратный вызов не выполняется в потоке пользовательского интерфейса.
Пользовательские темы
Пользовательская тема может быть предоставлена пакету SDK приложения Intune. Эта пользовательская тема применяется ко всем экранам и диалоговым окнам пакета SDK. Если тема не указана, используется тема SDK по умолчанию.
Предоставление настраиваемой темы
Чтобы обеспечить тему, добавьте следующую строку кода в метод:Application.onMAMCreate
MAMThemeManager.setAppTheme(R.style.AppTheme);
В этом примере замените R.style.AppTheme его на тему стиля, который должен применить пакет SDK.
Управление доверенными корневыми сертификатами
Если приложению требуются сертификаты SSL/TLS, выданные локальным или частным центром сертификации для предоставления безопасного доступа к внутренним веб-сайтам и приложениям, в пакет SDK для приложений Intune добавлена поддержка управления доверием сертификатов с помощью классов API MAMTrustedRootCertsManager и MAMCertTrustWebViewClient.
Примечание.
MAMCertTrustWebViewClient поддерживает Android 10 или более позднюю версию.
Управление доверенными корневыми сертификатами обеспечивает следующие возможности:
- SSLContext
- SSLSocketFactory
- TrustManager
- Веб-представление
Требования
- Для управления доверенными корневыми сертификатами требуется лицензия Microsoft Tunnel для управления мобильными приложениями. Чтобы узнать больше, посетите: Microsoft Tunnel с управлением мобильными приложениями.
- Настройте политики Intune Конфигурация приложений для доставки доверенных корневых сертификатов в линейку бизнес-приложений и Microsoft Edge на Android. См. раздел: Использование Microsoft Tunnel VPN с устройствами Android, которые не зарегистрированы в Microsoft Intune.
Примечание.
Управление доверенными корневыми сертификатами можно использовать независимо от VPN-шлюза Microsoft Tunnel, но для использования требуется лицензия на туннель Microsoft MAM.
Использование доверенных корневых сертификатов из Intune для установления якорей доверия
Управление доверенными корневыми сертификатами позволяет приложению использовать доверенные корневые сертификаты от Intune в сочетании с сертификатами с устройства.
Классы API MAMTrustedRootCertsManager и MAMCertTrustWebViewClient используют доверенные корневые сертификаты Intune, предоставляемые через политику конфигурации приложений, в качестве резервного варианта, если хранилища доверенных корневых сертификатов устройства не содержат необходимых доверенных корневых сертификатов для установки безопасного подключения к локальным ресурсам. Таким образом, приложение может использовать как сертификаты устройства, так и сертификаты Intune для проверки безопасных подключений и обмена данными с надежными источниками.
Чтобы улучшить параметры сетевой безопасности, приложение может использовать XML-файл конфигурации сетевой безопасности. Управление доверенными корневыми сертификатами учитывает эту дополнительную безопасность, проверяя, есть ли в XML-файле конфигурации сетевой безопасности приложения какие-либо из следующих функций:
- Настраиваемые якоря доверия с дополнительными центрами сертификации, такими как самозаверяющие сертификаты.
- Для конкретных доменов правила для ограничения доверенных центров сертификации.
- Наборы закреплений для сертификатов для определенных доменов.
Примечание.
Дополнительные сведения о настройке сетевой безопасности Android см. в статье Конфигурация сетевой безопасности.
Если любое из этих условий относится к домену, проверяемому на доверие, то управление доверенными корневыми сертификатами пропускает настраиваемые проверки доверия для этого домена и позволяет выполнять проверку только менеджерам доверия по умолчанию платформы.
Класс MAMTrustedRootCertsManager
Этот класс предоставляет следующие API:
-
createSSLContextForOID(String oid, String protocol): создает объект, использующий доверенныеSSLContextкорневые сертификаты для указанного идентификатора и указанного протокола SSL/TLS. ВозвращенныйSSLContextобъект из этого класса уже правильно инициализирован объектамиX509TrustManager, использующими объединенные доверенные корневые сертификаты устройства и службы MAM. -
createSSLSocketFactoryForOID(String oid, String protocol): создает объект, использующий доверенныеSSLSocketFactoryкорневые сертификаты для указанного идентификатора и указанного протокола SSL/TLS. ВозвращаемыйSSLSocketFactoryобъект ссылается на тот жеSSLContextобъект в этом классе. -
createX509TrustManagersForOID(String oid): создает массивX509TrustManagerобъектов, использующих объединенные доверенные корневые сертификаты устройства и службы MAM для указанного удостоверения.
Примечание.
Ожидается, что этот oid параметр будет идентификатором пользователя (OID) Microsoft Entra для конкретного пользователя, запускающего приложение. Если идентификатор пользователя заранее неизвестен, можно передать значение null и MAM попытается обнаружить правильное удостоверение в потоке или процессе, в котором вызываются эти API. Удостоверение должно быть правильно задано в процессе или потоке, чтобы диспетчер MAM мог обнаружить его. Дополнительные сведения об установке активной идентификации в процессе или потоке см. в разделе Этап 5. Множественная идентификация.
Примечание.
protocol Если параметр не указан, платформа использует самый высокий поддерживаемый протокол SSL/TLS.
Вот несколько примеров использования этого класса.
Пример с использованием HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");
// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");
// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);
// Perform any other configuration or operations on the connection as needed
...
Пример использования OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);
// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);
// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();
// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();
// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();
// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();
// Perform any other operations on the response as needed
...
Класс MAMCertTrustWebViewClient
Этот класс предоставляет пользовательскую реализацию класса android.webkit.WebViewClientAndroid. Этот класс предоставляет способ обработки ошибки android.net.http.SslError.SSL_UNTRUSTED SSL в WebViewфайле .
При обработке ошибки класс использует доверенные корневые сертификаты, настраиваемые Intune и предоставляемые службой MAM. Этот подход проверяет надежность узла из целевого URL-адреса, который породил ошибку SSL в WebView. Если пользовательская реализация не обрабатывает ошибку SSL, система вызывает поведение по умолчанию, унаследованное от суперкласса.
При использовании этого класса создайте его экземпляр, а затем вызовите WebView.setWebViewClient(WebViewClient) его, чтобы зарегистрировать в экземпляре WebView .
Ниже приведен пример использования этого класса.
Пример с использованием WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();
// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);
// Perform any other operations on WebView
...
Соответствие требованиям к конфиденциальности китайского магазина App Store
Некоторые китайские магазины приложений требуют, чтобы приложения отображали диалоговое окно согласия с политикой конфиденциальности для пользователей перед выполнением операций, которые взаимодействуют с другими приложениями на устройстве. Это включает в себя регистрацию широковещательных приемников, которые прослушивают события установки или удаления пакетов. Пакет SDK MAM делает это, чтобы прослушивать наличие корпоративного портала, в котором находится основная часть логики MAM.
Если приложение распространяется через магазины приложений в Китае, где есть это требование, используйте следующую интеграцию, чтобы отложить операции автономного запуска до получения согласия с политикой конфиденциальности.
1. Добавление флага манифеста
Добавьте в приложение AndroidManifest.xmlследующие метаданные:
<application>
<meta-data
android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
android:value="true"/>
</application>
Примечание.
Этот флаг следует добавлять только к APK-файлам, распространяемым через китайские магазины приложений, которые требуют согласия на конфиденциальность перед взаимодействием с другими приложениями. Для APK-файлов, распространяемых через другие магазины, этот флаг включать не следует.
2. Готовность сигнала после диалогового окна конфиденциальности
После того как пользователь примет ваше диалоговое окно согласия с политикой конфиденциальности, вызовите пакет SDK, чтобы сообщить о возможности автономного запуска:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
.setOfflineStartupReady()
Или на Java:
// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
.setOfflineStartupReady();
Поведение
Состояние готовности сохраняется после запуска приложения. После setOfflineStartupReady() вызова последующие запуски будут регистрировать приемник немедленно во время инициализации приложения.
Примечания
- Метод
setOfflineStartupReady()идемпотентный, вызывать его несколько раз безопасно. - Если Корпоративный портал уже установлен (в сетевом режиме), вызовы
setOfflineStartupReady()не работают, так как приемник не нужен. -
Важно! Следует звонить
setOfflineStartupReady()только после того, как ваше диалоговое окно конфиденциальности будет принято.
Критерии выхода
Дополнительные сведения см. в статье "Быстрое тестирование с изменением политики для удобства тестирования".
Проверка сохранения и открытия из ограничений
Пропустите этот раздел, если вы не реализовали политику ограничения передачи данных между приложениями и расположениями устройств или облачных хранилищ.
Заново ознакомьтесь с каждым сценарием, в котором приложение может сохранять данные в облачных службах или локальные данные, а также открывать данные из облачных служб или локальные данные.
Для простоты эти тесты предполагают, что ваше приложение поддерживает только сохранение и открытие данных из OneDrive из одного расположения в приложении. Однако необходимо проверить каждое сочетание: каждое поддерживаемое расположение для сохранения с каждым местом, где приложение позволяет сохранять данные, и каждое поддерживаемое открытое расположение с каждым местом, где приложение разрешает открывать данные.
Для этих тестов установите приложение и Корпоративный портал Intune Intune; перед началом теста войдите с помощью управляемой учетной записи. Кроме того:
- Настройте политику управляемой учетной записи следующим образом:
- Для параметра "Отправлять данные организации в другие приложения" установлено значение "Приложения, управляемые политикой".
- Для параметра "Получать данные из других приложений" установлено значение "Приложения, управляемые политикой".
| Сценарий | Предварительные условия | Действия |
|---|---|---|
| Сохранить в, полностью разрешено | Политика "Сохранять копии данных организации" с установленным значением "Разрешить" | - Перейдите в ту часть приложения, где можно сохранять данные в OneDrive. - Попробуйте сохранить документ в OneDrive, используя ту же управляемую учетную запись, которая вошла в ваше приложение. - Убедитесь, что сохранение разрешено. |
| Сохранить в, исключено | - Политика «Сохранять копии данных организации» установлена на Block - Политика "Разрешить пользователю сохранять копии в выбранных службах" с установленным значением только для OneDrive |
- Перейдите в ту часть приложения, где можно сохранять данные в OneDrive. - Попробуйте сохранить документ в OneDrive, используя ту же управляемую учетную запись, которая вошла в ваше приложение. - Убедитесь, что сохранение разрешено. - Если приложение разрешает это, попробуйте сохранить файл в другом облачном хранилище и убедитесь, что оно заблокировано. |
| Сохранить, заблокировано | Политика "Сохранять копии данных организации" с установленным значением "Блокировка" | - Перейдите в ту часть приложения, где можно сохранять данные в OneDrive. - Попробуйте сохранить документ в OneDrive, используя ту же управляемую учетную запись, которая вошла в ваше приложение. - Убедитесь, что сохранение заблокировано. - Если приложение разрешает это, попробуйте сохранить файл в другом облачном хранилище и убедитесь, что оно заблокировано. |
| Открыть с, полностью разрешено | Политика "Открывать данные в документах организации" с установленным значением "Разрешить" | - Перейдите в ту часть приложения, где приложение может открывать данные из OneDrive. - Попытайтесь открыть документ из OneDrive, используя ту же управляемую учетную запись, которая вошла в хранилище приложения. - Убедитесь, что открытие разрешено. |
| Открыто от, освобождено | - Политика «Открывать данные в документах организации» установлена на Block - Политика "Разрешить пользователям открывать данные из выбранных служб" с установленным значением только для OneDrive |
- Перейдите в ту часть приложения, где приложение может открывать данные из OneDrive. - Попытайтесь открыть документ из OneDrive, используя ту же управляемую учетную запись, которая вошла в хранилище приложения. - Убедитесь, что открытие разрешено. - Если приложение разрешает это, попробуйте открыть другой файл из другого места хранения в облаке и убедитесь, что он заблокирован. |
| Открыть от, заблокировано | Политика "Открывать данные в документах организации" с установленным значением "Блокировка" | - Перейдите в ту часть приложения, где приложение может открывать данные из OneDrive. - Попытайтесь открыть документ из OneDrive, используя ту же управляемую учетную запись, которая вошла в хранилище приложения. - Убедитесь, что открытие заблокировано. - Если приложение разрешает это, попробуйте открыть другой файл из другого места хранения в облаке и убедитесь, что он заблокирован. |
Проверка ограничений уведомлений
Если вы не реализовали политику ограничения содержимого в уведомлениях, пропустите этот раздел.
Что касается политики защиты приложений, приложение может запускать три разных типа уведомлений:
- Уведомления, не содержащие данных учетной записи.
- Уведомления, содержащие данные, относящиеся к управляемой учетной записи.
- Уведомления, содержащие данные, которые принадлежат неуправляемой учетной записи.
Если приложение является одноудостоверенным, релевантными являются только первые два, так как никакие меры защиты не применяются, если единственная учетная запись не управляется.
Вы можете проверить ограничения уведомлений, активировав все три типа уведомлений с разными значениями политики.
Для этих тестов установите приложение и Корпоративный портал Intune Intune; перед началом теста войдите с помощью управляемой учетной записи. Если ваше приложение поддерживает несколько удостоверений, также входите в него с помощью неуправляемой учетной записи.
| Сценарий | Предварительные условия | Действия |
|---|---|---|
| Блокировка всего содержимого | Политика "Уведомления с данными организации" с установленным значением "Блокировать" | - Запустите приложение на запуск уведомления без данных учетной записи. - Убедитесь, что в уведомлении не отображается контент. - Запустите приложение на запуск уведомления с данными управляемой учетной записи. - Убедитесь, что в уведомлении не отображается контент. - Запустите ваше приложение, чтобы запустить уведомление с данными неуправляемой учетной записи. - Убедитесь, что в уведомлении не отображается контент. |
| Частичная блокировка содержимого | Политика "Уведомления о данных организации" с установленным значением "Блокировка данных организации" | - Запустите приложение на запуск уведомления без данных учетной записи. - Убедитесь, что в уведомлении отображается полное содержимое. - Запустите приложение на запуск уведомления с данными управляемой учетной записи. - Подтвердите, что уведомление отредактировало содержимое управляемой учетной записи. - Запустите ваше приложение, чтобы запустить уведомление с данными неуправляемой учетной записи. - Убедитесь, что в уведомлении отображается полное содержимое. |
| Содержимое не заблокировано | Политика "Уведомления о данных организации" с установленным значением "Разрешить" | - Запустите приложение на запуск уведомления без данных учетной записи. - Убедитесь, что в уведомлении отображается полное содержимое. - Запустите приложение на запуск уведомления с данными управляемой учетной записи. - Убедитесь, что в уведомлении отображается полное содержимое. - Запустите ваше приложение, чтобы запустить уведомление с данными неуправляемой учетной записи. - Убедитесь, что в уведомлении отображается полное содержимое. |
Проверка резервного копирования и восстановления данных
Если вы не реализовали политику защиты данных резервных копий, пропустите этот раздел.
Повторно ознакомьтесь с содержимым (файлами и парами ключ-значение), которое приложение настроило для резервного копирования. Убедитесь, что восстановлению подлежит только ожидаемое содержимое. Лишнее содержимое при восстановлении может привести к утечке данных.
Для этих тестов установите приложение и Корпоративный портал Intune Intune; Перед началом теста войдите с помощью управляемой учетной записи. Если ваше приложение поддерживает несколько удостоверений, также входите в него с помощью неуправляемой учетной записи.
Следуйте официальным инструкциям Android по проверке резервного копирования. Эти инструкции различаются для авторезервного копирования и резервного копирования "ключ/значение", поэтому внимательно им соблюдайте.
Проверка настраиваемого снимка экрана на соответствие политике
Пропустите этот раздел, если вы не реализовали ограничения пользовательской записи экрана.
Если в вашем приложении есть функция, которая обходит -level FLAG_SECUREAndroidWindow, убедитесь, что эта функция заблокирована политикой защиты приложений, ограничениями на захват экрана.
Для этих тестов установите приложение и Корпоративный портал Intune Intune; перед началом теста войдите с помощью управляемой учетной записи.
| Сценарий | Предварительные условия | Действия |
|---|---|---|
| Снимок экрана заблокирован | Политика "Снимок экрана и Google Ассистент" установлена на "Блокировать" | - Перейдите в часть приложения, в которой используется пользовательский FLAG_SECURE код.- Попробуйте использовать эту функцию. - Убедитесь, что функция заблокирована. |
| Снимок экрана разрешен | Политика "Снимок экрана и Google Ассистент" с установленным значением "Разрешить" | - Перейдите в часть приложения, в которой используется пользовательский FLAG_SECURE код.- Попробуйте использовать эту функцию. – Убедитесь, что функция разрешена. |
Проверка ЦС защиты приложений
Пропустите этот раздел, если вы не реализовали ЦС поддержки защиты приложений.
Помимо стандартных этапов проверки — создания и назначения политики защиты приложений приложению и тестовой учетной записи, необходимо также создать и назначить тестовой учетной записи политику условного доступа защиты приложений. Дополнительные сведения см. в разделе "Настройка политик условного доступа на основе приложений с помощью Intune".
Шаги теста:
- Перед началом этого теста удалите Microsoft Authenticator и Корпоративный портал Intune Intune.
- Установите приложение.
- Войдите в приложение с тестовой учетной записью, для которой настроены политика защиты приложений и политика ЦС на основе приложений.
- Убедитесь, что приложение предлагает вам установить Корпоративный портал.
- Выполните вход еще раз.
- Подтвердите, что приложение предлагает вам зарегистрировать устройство. Следуйте указаниям на экране. Если ваше приложение не запрашивает регистрацию, убедитесь, что на тестовом устройстве сначала были удалены другие приложения с поддержкой SDK, Корпоративный портал и Authenticator. Если это не помогло, еще раз просмотрите инструкции по реализации.
- Убедитесь, что после регистрации вы можете получить доступ ко всем данным приложения.
Проверка получателей уведомлений
Пропустите этот раздел, если вы не реализовали Зарегистрируйтесь, чтобы получать уведомления от SDK.
Этапы проверки зависят от типов уведомлений, для которых зарегистрировано приложение. Для всех типов уведомлений добавьте ведение журнала, чтобы обеспечить правильный вызов приемника.
MAM_ENROLLMENT_RESULT можно запустить при входе в приложение с учетной записью, на которую нацелена политика защиты приложений.
Вы можете запустить REFRESH_APP_CONFIG иREFRESH_POLICY, обновив соответствующую политику конфигурации приложений и политику защиты приложений, которые предназначены для тестовой учетной записи, и дождавшись обновления политики пакета SDK.
Совет
Чтобы ускорить этот процесс, см. статью "Быстрое тестирование с изменением политики ".
Вы можете вызвать MANAGEMENT_REMOVED, , WIPE_USER_AUXILIARY_DATAи уведомления, WIPE_USER_DATAвыполнив WIPE_COMPLETEDвыборочную очистку из Microsoft Intune.
Проверка пользовательских тем
Если вы не реализовали настраиваемые темы, пропустите этот раздел.
Поддержку настраиваемой темы можно проверить, изучив цвета в диалоговых окнах пакета SDK. Самое простое диалоговое окно для проверки — экран ПИН-кода MAM.
Предварительные условия:
- Настройте политику управляемой учетной записи следующим образом:
- Для параметра "ПИН-код для доступа" установлено значение "Обязательный".
- Установите приложение и корпоративный портал Intune Intune.
Шаги теста:
- Запустите приложение и войдите с помощью тестовой учетной записи.
- Убедитесь, что экран PIN-кода MAM отображается и является тематическим на основе пользовательской темы, предоставленной для пакета SDK.
Дальнейшие действия
Если вы следовали этому руководству по порядку и выполнили все критерии выхода, описанные выше в этой статье, ваше приложение теперь полностью интегрировано с пакетом SDK для приложений Intune и может применять политики защиты приложений. Если вы пропустили один из предыдущих разделов участия приложения, этап 5: множественная идентификация и этап 6: конфигурация приложений, и вы не уверены, должно ли ваше приложение поддерживать эти функции, вернитесь к разделу "Ключевые решения по интеграции пакета SDK".
Защита приложений теперь является основным сценарием для вашего приложения. Продолжайте обращаться к этому руководству и приложению по мере дальнейшей разработки приложения.