Microsoft Intune App SDK for Android 允许将 Intune 应用保护策略 (也称为 MAM 策略) 合并到本机 Java/Kotlin Android 应用中。 Intune 托管的应用程序是与 Intune 应用 SDK 集成的应用程序。 当 Intune 主动管理应用时,Intune 管理员可以轻松地将应用保护策略部署到 Intune 托管的应用。
注意
本指南分为几个不同的阶段。 首先查看 第 1 阶段:规划集成。
阶段 6:应用程序配置
阶段Goals
- 了解 Android 上的应用程序配置选项。
- 确定应用程序应添加哪些配置(如果有)。
- 集成 Intune App SDK 应用程序配置 API。
- 为自定义应用程序配置实现冲突解决逻辑。
Android 上的应用程序配置
应用程序配置(也称为托管配置或应用程序限制)是特定于应用程序且由开发人员定义的设置,你可以添加到应用,以便管理员在托管设置中使用时对应用体验进行增强控制。 例如,如果你的应用是浏览器,你可以选择添加允许管理员预先设置书签、阻止某些网页或禁用隐身模式的配置。 应用程序配置是一种完全可选但功能强大的工具,可增强应用的管理体验。
有关更多详细信息,请参阅 Microsoft Intune 的应用配置策略 。
Android Built-In 应用配置
Android 在平台中内置了应用配置,称为 托管配置。 这些配置不依赖于 Intune 应用 SDK,可以在未集成 Intune 应用 SDK 的应用上启用。 只有在使用 Google Android Enterprise 模式之一管理的设备上使用应用程序时,这些配置才适用。 有关如何在 Microsoft Intune 中设置这些 Android Enterprise 模式的详细信息,请参阅 注册 Android 设备 。 管理员可以在 Microsoft Intune 中 为托管的 Android Enterprise 设备配置这些应用程序配置策略 。
应用可以通过 Android RestrictionsManager 或 Intune 应用 SDK 检索这些管理员配置的值。
有关详细信息 ,请参阅从 SDK 检索应用配置 。
托管 Google Play 应用的委托范围
应用开发人员可以使用 委托的范围 来集成其托管 Google Play 应用的增强权限。 委派范围为托管 Google Play 应用提供以下功能:
- 允许其他应用安装和管理证书
- 允许应用访问 Android 安全日志
- 允许应用访问 Android 网络活动日志
使用 Google API 将这些功能集成到托管 Google Play 应用中后,可以使用设备配置文件在 Intune 中配置这些设置。 有关详细信息,请参阅 Android Enterprise 设备设置 -> 公司拥有 > 的应用程序。
有关应用实现的详细信息,请参阅 Android 开发人员文档 - 委派范围。
Intune App SDK 应用配置
Intune 应用 SDK 支持另一种机制,用于提供应用配置,独立于 Android Enterprise 托管配置。 这些配置仅适用于 Microsoft Intune,仅适用于已集成 Intune 应用 SDK 的应用。 但是,这些配置并不局限于具有 Android Enterprise 管理的设备。 管理员可以在 Microsoft Intune 中 为托管应用配置这些应用程序配置策略 。
注意
也可以使用 图形 API配置应用配置。 有关信息,请参阅 MAM 定向配置图形 API文档。
应用必须通过 Intune App SDK 检索这些管理员配置的值。 有关详细信息 ,请参阅从 SDK 检索应用配置 。
应向应用添加哪些配置?
本指南无法回答此问题。 只有你和你的团队知道哪些功能使你的应用在管理下更有价值。
以下问题可能有助于指导讨论,并揭示你可能想要添加到应用的配置:
- 你的应用目前提供哪些功能?
- 在管理期间禁用这些功能是否有价值?
- 在管理期间更改这些功能是否有价值?
- 你的应用目前是如何在管理下使用的?
- 管理员是否可以代表其用户预先配置任何选项?
- 管理员或最终用户是否采取任何作,但仅限于托管方案?
- 托管用户是否请求了可能不适合整个用户群体的功能?
对于决定添加到应用的每个配置,都需要定义三项:
- 键 - 此字符串从其他设置中唯一标识此设置。 它应该是人工可读的,因为它将由管理员配置。
- 类型 - 此设置是什么数据类型? 它是字符串、布尔值、整数、数组等吗?
- 冲突解决策略 - 如果管理员为同一密钥配置多个值,应用将如何响应? 在上述浏览器示例中,书签列表可以合并所有值,而禁用 incognito 的设置可能会选择禁用任何冲突值为“true”。
我的应用应支持托管设备或托管应用的配置?
应用于托管设备的配置和应用于托管应用的配置 不是互斥的。 在确定要支持的配置 (类型或两者) 时,应考虑用户的需求。
| 配置方面 | 托管设备的配置 | 托管应用的配置 |
|---|---|---|
| 设备适用性 | 仅适用于 Android Enterprise 设备管理下的设备。 | 适用于所有设备,前提是应用集成了 Intune 应用 SDK 并安装了公司门户。 |
| 平台 | 仅限 Android,仅限具有 Google 服务的设备 | iOS 应用 SDK 支持相同的配置。 开发人员可以共享这些密钥,以便获得一致的跨平台体验。 |
| 适用性 | 任何 EMM | Microsoft Intune 独占 |
| 架构可发现性 | 将应用上传到 Play 后,架构公开可用 | 开发人员控制下的架构可发现性 |
这两种类型的应用配置都依赖于键值对。 Microsoft Intune 不会检查这些配置的内容,只是将管理员配置的值传递给应用。
Intune App SDK 应用配置 API 包括 来自两个 通道的管理员配置的值。 如果应用支持这两种类型的应用配置,请使用 API,如下所述。
从 SDK 检索应用配置
应用程序可以使用 MAMAppConfigManager 和 MAMAppConfig 类从两个通道接收配置。
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 Enterprise 配置值, (这些值不会针对特定帐户) ,你可以为 OID 传递 或 null 空字符串。
注意
如果你的应用使用 Intune App SDK 检索 Android Enterprise 托管配置,并且未安装公司门户,则这些配置将通过具有空标识的 MAMUserNotification 传递。
你的应用还可以请求原始数据作为键值对集的列表,而不是按特定键进行查询。
List<Map<String, String>> getFullData()
你的应用还可以注册 REFRESH_APP_CONFIG 通知,通知应用新的应用配置数据可用。
如果应用缓存应用配置数据,它 必须 注册此通知,并使处理程序中的任何缓存数据失效。
有关更多详细信息 ,请参阅从 SDK 注册通知 。
解决冲突
如果多个应用配置策略针对同一应用和帐户,则同一密钥可能有多个冲突值可用。
注意
在 MAM 应用配置中设置的值将覆盖在 Android Enterprise 配置中设置的相同键的值。
如果管理员为同一密钥配置冲突值,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.Min、StringQueryType.Max,其中 min 和 max 来自按字母顺序排序的列表。
退出条件
Intune 负责将应用配置策略值传递给应用;之后,你的应用负责使用这些值来更改应用内的行为或 UI。 彻底的端到端测试应涵盖这两个组件。
若要验证 Intune 是否正确交付应用配置策略,请执行以下作:
- 配置面向你的应用并部署到测试帐户的应用配置策略。
- 如果应用支持托管设备的应用配置,请参阅 托管 Android Enterprise 设备的应用程序配置策略。
- 如果应用支持托管应用的应用配置,请参阅 托管应用的应用程序配置策略。
- 如果应用支持这两种类型的应用配置,请创建这两种类型的策略用于测试。
- 使用测试帐户登录到应用。
- 对于托管设备,请参阅 Android 企业应用配置策略 和 注册 Android 设备。
- 对于托管应用:
- 安装应用和Intune 公司门户。
- 使用测试帐户登录到应用。
- 浏览应用以练习调用
MAMAppConfigManager或getAppConfigForOIDgetFullData的每个代码路径。- 记录对 的调用
getAppConfigForOID结果是验证传递了哪些设置的简单方法。 但是,由于管理员可以为应用配置设置输入任何数据,因此请注意不要记录任何专用用户数据。
- 记录对 的调用
- 请参阅 验证应用配置策略。
由于应用配置特定于应用,因此只有你知道如何验证应用应如何更改每个应用配置设置的行为或 UI。
测试时,请考虑以下事项:
- 使用应用支持的每个值创建不同的测试应用配置策略,确保涵盖所有方案。
- 通过为每个设置创建具有不同值的多个测试应用配置策略来验证应用的冲突解决逻辑。
- 如果应用已注册
REFRESH_APP_CONFIG通知,请在应用处于活动状态时更新应用配置策略,等待策略更新,并确认正确执行此代码路径。 - 如果应用支持这两种类型的应用配置,请测试这两种方案,以确保实现为
getAppConfigForOID提供正确的标识。
后续步骤
完成上述所有 退出条件 后,应用现在已成功与应用配置策略集成。
后续部分 阶段 7:应用参与功能可能是必需的,也可能不需要,具体取决于应用所需的应用保护策略支持。 如果不确定其中任何功能是否适用于你的应用,请重新访问 SDK 集成的关键决策。