适用于 Android 的 Intune 应用 SDK - 应用程序配置

适用于 Android 的 Microsoft Intune App SDK 允许将 Intune 应用保护策略 (也称为 MAM 策略) 合并到本机 Java/Kotlin Android 应用中。 Intune 托管的应用程序是与 Intune 应用 SDK 集成的应用程序。 当 Intune 主动管理应用时,Intune 管理员可以轻松地将应用保护策略部署到 Intune 管理的应用。

注意

本指南分为几个不同的阶段。 首先查看 第 1 阶段:规划集成

阶段 6:应用程序配置

阶段目标

  • 了解 Android 上的应用程序配置选项。
  • 确定应用程序应添加哪些配置(如果有)。
  • 集成 Intune App SDK 应用程序配置 API。
  • 为自定义应用程序配置实现冲突解决逻辑。

Android 上的应用程序配置

应用程序配置(也称为托管配置或应用程序限制)是特定于应用程序的开发人员定义的设置,可添加到应用中,从而在托管设置中使用时增强管理员对应用体验的控制。 例如,如果你的应用是浏览器,则可以选择添加配置,让管理员预设书签、阻止某些网页或禁用隐身模式。 应用程序配置是一个完全可选但功能强大的工具,用于增强应用的管理体验。

有关更多详细信息,请参阅 Microsoft Intune 的应用配置策略

Android 的 Built-In 应用配置

Android 在平台中内置了应用配置,称为 托管配置。 这些配置不依赖于 Intune 应用 SDK,并且可以在未集成 Intune 应用 SDK 的应用上启用。 仅当应用程序在使用 Google 的 Android 企业版模式之一进行管理的设备上使用时,才应用这些配置。 有关如何在 Microsoft Intune 中设置这些 Android 企业模式的详细信息,请参阅注册 Android 设备。 管理员可以在 Microsoft Intune 中为托管的 Android 企业版设备配置这些应用程序配置策略

应用可以通过 Android 或 RestrictionsManager Intune 应用 SDK 检索这些管理员配置的值。 有关详细信息,请参阅 从 SDK 检索应用配置

托管 Google Play 应用的委派范围

应用开发人员可以使用 委派的作用域 来集成其托管 Google Play 应用的增强权限。 委派作用域为托管的 Google Play 应用提供以下功能:

  • 允许其他应用安装和管理证书
  • 允许应用访问 Android 安全日志
  • 允许应用访问 Android 网络活动日志

使用 Google 的 API 将这些功能集成到托管的 Google Play 应用后,可以使用设备配置文件在 Intune 中配置这些设置。 有关详细信息,请参阅 Android 企业设备设置 -> 公司拥有 > 的应用程序

有关应用实现的详细信息,请参阅 Android 开发人员文档 - 委派范围

Intune App SDK 应用配置

Intune 应用 SDK 支持另一种传递应用配置的机制,该机制独立于 Android Enterprise 托管配置。 这些配置是 Microsoft Intune 独有的,仅适用于已集成 Intune 应用 SDK 的应用。 但是,这些配置不限于具有 Android Enterprise 管理的设备。 管理员可以为 Microsoft Intune 中的托管应用配置这些应用程序配置策略

注意

还可以使用 图形 API 配置应用配置。 有关详细信息,请参阅 MAM 目标配置的图形 API 文档

应用必须通过 Intune 应用 SDK 检索这些管理员配置的值。 有关详细信息,请参阅 从 SDK 检索应用配置

应该向应用添加哪些配置?

本指南无法为您回答这个问题。 只有您和您的团队知道哪些功能使您的应用在管理期间更有价值。

以下问题可能有助于引导讨论并揭示你可能想要添加到应用的配置:

  • 你的应用目前提供哪些功能?
    • 在管理期间禁用这些功能是否有价值?
    • 在管理期间更改这些功能是否有价值?
  • 目前,你的应用在管理下是如何使用的?
    • 是否有任何选项可供管理员代表其用户预先配置?
    • 管理员或最终用户是否执行任何操作(仅限于托管方案)?
    • 您的托管用户请求的功能可能不适合您的整个用户群体?

对于决定添加到应用的每个配置,都需要定义三个项目:

  • - 此字符串将此设置与其他设置唯一标识。 它应是可读的,因为它将由管理员配置。
  • 类型 - 此设置是什么数据类型? 是字符串、布尔值、整数、数组等吗?
  • 冲突解决策略 - 如果管理员为同一键配置多个值,应用将如何响应? 在上述浏览器示例中,书签列表可以组合所有值,而禁用隐身的设置可能会选择在任何冲突值为“true”时禁用。

我的应用是否应支持托管设备或托管应用的配置?

适用于托管设备的配置和适用于托管应用的配置并不 相互排斥。 在决定支持哪种类型的 (或两种配置) 时,应考虑用户的需求。

配置方面 托管设备的配置 托管应用的配置
设备适用性 仅适用于处于 Android 企业版设备管理下的设备上。 适用于所有设备,只要应用集成 Intune 应用 SDK 并安装了公司门户。
平台 仅限 Android,仅限于使用 Google 服务的设备 iOS 应用 SDK 支持相同的配置。 作为开发人员,你可以共享这些密钥以获得一致的跨平台体验。
适用性 任何 EMM Microsoft Intune 独有
架构可发现性 应用上传到 Play 后,架构将公开可用 开发人员控制下的架构可发现性

这两种类型的应用配置都依赖于键值对。 Microsoft Intune 不会检查这些配置的内容,只是将管理员配置的值传递给应用。

Intune App SDK 应用配置 API 包含来自两个渠道管理员配置的值。 如果你的应用支持这两种类型的应用配置,请使用下面所述的 API。

从 SDK 检索应用配置

应用程序可以使用 MAMAppConfigManagerMAMAppConfig 类从这两个通道接收配置。

MAMAppConfigManager configManager = MAMComponents.get(MAMAppConfigManager.class);
String oid = <OID of user account>;
MAMAppConfig appConfig = configManager.getAppConfigForOID(oid);
String fooValue = appConfig.getStringForKey("foo", MAMAppConfig.StringQueryType.Any);

如果没有 MAM 注册的帐户,但你的应用仍希望检索不针对特定帐户) (Android 企业版配置值,则可以为 OID 传递 null 一个或空字符串。

注意

如果你的应用使用 Intune App SDK 检索 Android Enterprise 托管配置,并且未安装公司门户,则这些配置将通过具有空标识传递MAMUserNotification

应用还可以以键值对集列表的形式请求原始数据,而不是按特定键进行查询。

List<Map<String, String>> getFullData()

应用还可以注册通知 REFRESH_APP_CONFIG 通知应用有新的应用配置数据可用。 如果应用缓存应用配置数据,则 必须 注册此通知,并使处理程序中的任何缓存数据失效。 有关更多详细信息,请参阅 注册来自 SDK 的通知

解决冲突

如果多个应用配置策略面向同一应用和帐户,则同一密钥可能存在多个冲突值。

注意

在 MAM 应用配置中设置的值将覆盖在 Android 企业配置中设置的相同键的值。

如果管理员为同一键配置冲突值,则 Intune 没有任何方法自动解决此冲突,并且会向应用提供所有值。 如果管理员使用相同密钥将不同的应用配置集定位到包含同一帐号的多个组,则可能会发生此类冲突。

应用可以从 MAMAppConfig 对象请求给定键的所有值,以便可以解决与自己的业务逻辑冲突:

List<Boolean> getAllBooleansForKey(String key)
List<Long> getAllIntegersForKey(final String key)
List<Double> getAllDoublesForKey(final String key)
List<String> getAllStringsForKey(final String key)

或者,您可以请求使用内置冲突解决策略之一选择值:

Boolean getBooleanForKey(String key, BooleanQueryType queryType)
Long getIntegerForKey(String key, NumberQueryType queryType)
Double getDoubleForKey(String key, NumberQueryType queryType)
String getStringForKey(String key, StringQueryType queryType)

可用的内置冲突解决策略包括:

  • BooleanQueryType.Any, BooleanQueryType.And, BooleanQueryType.Or
  • NumberQueryType.Any, NumberQueryType.Min, NumberQueryType.Max
  • StringQueryType.Any, , StringQueryType.MinStringQueryType.Max其中 min 和 max 来自按字母顺序排序的列表。

退出条件

Intune 负责将应用配置策略值传递到应用;之后,应用负责使用这些值更改应用内的行为或 UI。 彻底的端到端测试应涵盖这两个组件。

若要验证 Intune 是否正确传递应用配置策略:

  1. 配置一个针对你的应用并部署到测试帐户的应用配置策略。
  2. 使用测试帐户登录应用。
  3. 浏览应用以练习调用 MAMAppConfigManager's getAppConfigForOIDgetFullData的每个代码路径。
    • 记录调用 getAppConfigForOID 结果是验证传递哪些设置的简单方法。 但是,由于管理员可以为应用配置设置输入任何数据,因此请注意不要记录任何私人用户数据。
  4. 请参阅 验证应用的应用配置策略

由于应用配置特定于应用,只有你知道如何验证应用应如何为每个应用配置设置更改行为或 UI。

测试时,请考虑以下事项:

  • 通过使用应用支持的每个值创建不同的测试应用配置策略,确保涵盖所有方案。
  • 通过为每个设置创建具有不同值的多个测试应用配置策略来验证应用的冲突解决逻辑。
  • 如果你的应用已注册 REFRESH_APP_CONFIG 通知,请在应用处于有效使用状态时更新应用配置策略,等待策略更新,然后确认已正确执行此 codepath。
  • 如果你的应用支持这两种类型的应用配置,请测试这两种方案以确保你的实现向 .getAppConfigForOID

后续步骤

完成上述所有 退出条件 后,应用现已成功与应用配置策略集成。

后续部分“ 阶段 7:应用参与功能”可能需要也可能不需要,具体取决于应用所需的应用保护策略支持。 如果不确定这些功能中的任何一项适用于你的应用,请重新访问 SDK 集成的关键决策