Android 10 中的企业功能新变化

本页面概述了新的企业级 API、功能和 Android 10 中引入的行为变更。

归公司所有的设备的工作资料

Android 10 针对 仅需要工作资料的公司自有设备。

改进的工作资料配置工具

您可以在注册 Android 10 及更高版本的设备上配置工作资料 二维码零触摸。 在配置公司自有设备期间,可通过新的 intent extra 启用 用于启动工作资料全托管式设备政策控制器应用 (DPC) 设置。创建工作资料或建立全面管理后,DPC 必须启动政策合规屏幕以强制执行所有初始政策。

在 DPC 的清单文件中,声明一个新的 intent 过滤器 GET_PROVISIONING_MODE ,并在 activity 中添加 BIND_DEVICE_ADMIN 以防止任意应用启动此 activity。例如:

<activity
    android:name=".GetProvisioningModeActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action
            android:name="android.app.action.GET_PROVISIONING_MODE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

在配置期间,系统会启动与 intent 过滤器。此活动的目的是指定管理模式 (工作资料或全托管式)。

在确定 设置适当的管理模式activity 可以调用 getIntent()(用于检索) 以下:

DPC 还可以创建新的结果 intent 并向其添加以下 extra:

要设置设备上的管理模式,请调用 putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), 其中 desiredProvisioningMode 为:

  • 工作资料:PROVISIONING_MODE_MANAGED_PROFILE
  • 完全托管:PROVISIONING_MODE_FULLY_MANAGED_DEVICE

通过发送配置来完成工作资料或全代管式配置 通过 setResult(RESULT_OK, Intent) 将详细信息发回设置 然后使用以下代码关闭所有活动屏幕 finish()

配置完成后,新的 intent 可供 DPC 启动 合规性屏幕,并强制执行初始政策设置。在工作资料中 设备,那么工作资料中会显示合规性屏幕。设备政策控制器 (DPC) 必须 确保即使用户退出了账号,也会向用户显示合规性屏幕 设置流程

在 DPC 的清单文件中,声明一个新的 intent 过滤器 ADMIN_POLICY_COMPLIANCE ,并在 activity 中添加 BIND_DEVICE_ADMIN 以防止任意应用启动此 activity。例如:

<activity
    android:name=".PolicyComplianceActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

您的 DPC 必须使用以下新的 intent,而不是监听 ACTION_PROFILE_PROVISIONING_COMPLETE 广播。

与 intent 过滤器关联的 activity 可以调用 getIntent()(用于检索) 该 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE。 遵守政策后,ADMIN_POLICY_COMPLIANCE 必须返回 setResult(RESULT_OK, Intent),并使用 finish()

完全托管设备会将用户返回到主屏幕。工作资料设备 提示用户添加个人账号,然后再将其返回住宅 屏幕。

工作资料设备 ID 证明

DPC 设为使用零触摸注册配置的工作资料的管理员 可获取经过安全硬件认证的设备 ID,例如 IMEI 或制造商的 序列号。设备必须包含安全硬件(例如 执行环境 (TEE) 或安全元件 (SE),并且支持 device-ID 认证和零触摸注册。

工作资料的管理员组件可以调用 DevicePolicyManager.generateKeyPair(),为 idAttestationFlags 参数传递 ID_TYPE_SERIALID_TYPE_IMEIID_TYPE_MEID 中的一个或多个。

要详细了解如何提取和验证设备 ID,请参阅使用密钥认证功能验证由硬件支持的密钥对

工作资料改进

提供了新的 API 来支持跨资料日历可见性和 在整个设备上阻止安装来自未知来源的应用。

工作资料、设备范围的未知来源

从 Google Play 以外的来源下载的应用(或其他可信应用) 称为来源不明的应用。在 Android 10 中,工作管理员 个人资料可以阻止任何用户或个人资料安装未知的应用 通过添加新的用户限制,从设备上的任何位置获取来源 DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY。 不过,添加此限制后,该设备的使用者仍可以 使用 adb 安装应用。

为防止用户误安装来源不明的应用, 建议添加此用户限制,因为它不需要 Google Play 要安装的服务。如果您想支持较低版本的 Android 系统,可以执行以下操作: 设置 Google Play 的托管配置值

只能使用工作资料允许的输入设备

当工作资料的管理员调用 DevicePolicyManager.setPermittedInputMethods() 时,用户只能使用其工作中允许的输入法 个人资料而非整个设备,让用户可以完全控制输入 方法。

擦除工作资料,但不通知用户

添加了WIPE_SILENTLY 设为 DevicePolicyManager.wipeData()。 如果您设置了此标记,在工作资料被擦除后,用户不会收到通知 使用 wipeData()

针对完全托管设备的新功能

Android 10 针对全代管式设备引入了新功能和 API, 包括手动系统更新、将二维码和 NFC 配置扩展到 包含 EAP Wi-Fi 网络的凭据,并支持 DNS-over-TLS。

手动安装系统更新

在 Android 10 中,完全受管设备的管理员可以通过以下方式安装系统更新: 系统更新文件手动系统更新允许 IT 管理员执行以下操作:

  • 先在少量设备上测试更新,然后再广泛安装该更新。
  • 避免在带宽有限的网络上重复下载。
  • 错开安装,或仅在未使用设备时更新设备。

首先,IT 管理员设置了推迟的系统更新政策 延迟自动安装(如果需要)。接下来,设备的 DPC 会调用 installSystemUpdate() 替换为设备制造商系统更新文件的路径。传递 InstallSystemUpdateCallback 对象,系统可以用它来报告在设备使用之前发生的错误 重启。如果出现问题,系统会调用 onInstallUpdateError() 以及错误代码

设备重启后,您的 DPC 需要确认安装成功 使用版本 API,例如 Build.FINGERPRINT。如果更新 请向 IT 管理员报告该故障。

EAP WLAN 配置

在 Android 10 中,用于设备配置的二维码和 NFC 数据可能包含 EAP 配置和凭据(包括证书)。用户扫描二维码时 或点按 NFC 标签后,设备会自动进行身份验证并连接到本地 WLAN 使用 EAP 并启动配置过程,而无需执行任何其他 手动输入的内容。

要使用 EAP 对 Wi-Fi 进行身份验证,请将 EXTRA_PROVISIONING_WIFI_SECURITY_TYPE extra,值为 "EAP"。要指定 EAP 身份验证,您可以添加 向您的 intent 添加以下配置 extra:

私人 DNS 支持

组织可以使用 DNS-over-TLS (在 Android 设备上称为专用 DNS),以免 DNS 查询泄露; 包括内部主机名的主机名全托管式设备的管理员组件 可以控制设备的“私人 DNS”设置。如需设置“专用 DNS”模式,请执行以下操作: 致电:

当您的 DPC 调用上述任一方法时,如果存在以下情况,系统会返回 PRIVATE_DNS_SET_NO_ERROR 调用成功。否则,将返回错误。

如需检索“专用 DNS 模式”和在设备上设置的主机,请调用 getGlobalPrivateDnsMode()getGlobalPrivateDnsHost()。 您可以阻止用户更改专用 DNS 设置,方法是 DISALLOW_CONFIG_PRIVATE_DNS 用户限制。

VPN 锁定模式豁免

VPN 锁定模式可让 DPC 屏蔽任何网络 流量。 虚拟连接。拥有完整权限的管理员 受管设备和工作资料可以豁免应用进入锁定模式。 豁免的应用默认使用 VPN,但会自动连接到其他 (如果 VPN 不可用)。已豁免的应用还明确了 拒绝了 VPN 只能使用其他网络。

如需豁免应用进入锁定模式,请调用新的 DevicePolicyManager 方法 setAlwaysOnVpnPackage() 接受一系列豁免的应用软件包。DPC 添加的所有应用软件包 必须在调用该方法时安装到设备上。如果应用 必须再次豁免该应用。获取应用 之前豁免于锁定模式,则调用 getAlwaysOnVpnLockdownWhitelist()

帮助全代管式设备和工作资料的管理员启用锁定模式 状态,Android 10 会将 isAlwaysOnVpnLockdownEnabled() 方法。

新的委托范围

Android 10 扩展了 DPC 可委托给其他 专用应用。Android 将任务所需的 API 方法分为 scopes 中。如需委托范围,请调用 setDelegatedScopes() 并传递以下一个或多个范围:

Android 10 引入了这个新类, DelegatedAdminReceiver 受委托应用系统使用此广播接收器发送类似于 DPC 的内容 回调来委托应用被委托进行网络活动的应用 日志记录和证书选择应实现此类。添加此 组件添加到受委托应用,请按以下步骤操作:

  1. 添加 DelegatedAdminReceiver 的子类 发送到受委托应用
  2. <receiver> 应用清单,为每个回调添加一个 intent 过滤器操作。例如: ACTION_NETWORK_LOGS_AVAILABLEACTION_CHOOSE_PRIVATE_KEY_ALIAS
  3. 使用 BIND_DEVICE_ADMIN 保护广播接收器 权限。

以下代码段显示了单个受委托应用的 同时处理网络日志记录和证书选择:

<receiver android:name=".app.DelegatedAdminReceiver"
        android:permission="android.permission.BIND_DELEGATED_ADMIN">
    <intent-filter>
        <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
        <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
    </intent-filter>
    </receiver>

网络活动日志记录

为了帮助组织检测和跟踪恶意软件,DPC 可以记录 TCP 连接 和 DNS 查找次数。在 Android 10 中 全托管式管理员 设备可以将网络日志记录委托给专门的应用。

在系统完成后检索网络日志 使批量可用,受委托应用应首先创建子类 DelegatedAdminReceiver (如前所述)。在您的子类中,实现 onNetworkLogsAvailable() 按照检索日志中的指南操作回调。

委托应用可以调用以下内容 DevicePolicyManager 方法 (为 admin 参数传递 null):

为避免丢失日志,DPC 不应启用网络日志记录 如果计划委托给其他应用。受委托应用应启用并 收集网络日志。DPC 委托网络日志记录后,将不会收到 再onNetworkLogsAvailable() 回调。

要了解如何从受委托应用报告网络活动日志,请阅读 开发者指南的网络活动日志部分。

证书选择

在 Android 10 中,以下应用的管理员 全托管式设备、工作资料和次要用户可以委托 证书选择流程。

如需选择证书别名,受委托应用应首先创建子类 DelegatedAdminReceiver (如前所述)。在您的子类中,实现 onChoosePrivateKeyAlias() 回调,并返回首选名称的别名 证书;如需提示用户选择证书,则返回 null

弃用设备管理政策

Android 10 禁止应用和 DPC 采用旧版设备 管理员政策。我们建议客户 和合作伙伴改用全托管式设备或工作资料。以下 政策会抛出 SecurityException 在由设备管理员以 Android 10 为目标平台时调用:

一些应用利用设备管理员进行用户设备管理。对于 例如锁定和擦除丢失的设备要实现此功能,可使用以下 仍可继续使用:

如需详细了解这些变化,请参阅设备管理 弃用

应用的新功能

以 Android 10 为目标平台的应用可以查询在设备上设置的屏幕锁定复杂度 然后再显示机密数据或发布重要功能。正在通话的应用 KeyChain API 的优势 行为改进,同时针对 VPN 应用推出了新功能。

屏幕锁定安全系数检查

从 Android 10 开始,具有需要屏幕锁定的重要功能的应用 可以查询设备或工作资料的屏幕锁定复杂度。需要 安全系数较高的屏幕锁定功能可将用户定向到系统屏幕锁定设置, 以更新安全设置。

要检查屏幕锁定的安全系数,请执行以下操作:

如需启动系统屏幕锁定设置,请使用 ACTION_SET_NEW_PASSWORD ,其中包含额外的 EXTRA_PASSWORD_COMPLEXITY,即 所有满足 intent extra 中指定的复杂度要求的选项都将灰显。用户可以 选择可用的屏幕锁定选项或退出屏幕。

最佳实践:在启动系统之前在应用中显示消息 屏幕锁定页面。当应用恢复时,调用 DevicePolicyManager.getPasswordComplexity() 。如果仍然需要安全系数更高的屏幕锁定方式,请限制访问,而不是 反复提示用户更新安全设置。

VPN 应用中的 HTTP 代理支持

在 Android 10 中,VPN 应用可以设置 HTTP 代理 用于其 VPN 连接要添加 HTTP 代理,VPN 应用必须配置 具有主机和端口的 ProxyInfo 实例; 在调用 VpnService.Builder.setHttpProxy()。 系统和许多网络库使用此代理设置,但系统 不会强制应用代理 HTTP 请求。

如需有关如何设置 HTTP 代理的示例代码,请参阅 ToyVPN 示例应用。

VPN 服务模式

VPN 应用可以发现 VPN 服务是否正在运行(因为始终开启) VPN 以及是否被锁定 模式。新方法 可帮助您调整界面。例如,您 当始终开启的 VPN 控制生命周期时,可能会停用断开连接按钮 。

VPN 应用可以调用以下 VpnService连接到服务之后使用的方法 并建立本地接口:

在服务运行时,“始终开启”状态将保持不变, 锁定模式状态可能会发生变化。

Keychain 改进

Android 10 引入了 KeyChain API。

当应用调用 KeyChain.choosePrivateKeyAlias() 时,搭载 Android 10 及更高版本 设备会根据 调用中指定的颁发者和密钥算法。

例如,当 TLS 服务器发送证书请求时, 作为 TLS 握手的一部分,浏览器会调用 KeyChain.choosePrivateKeyAlias(),仅证书选择提示 包含与发卡机构参数匹配的选项。如果没有匹配的选项, 或设备上未安装任何证书, 因此,系统不会向用户显示选择提示。

此外,KeyChain 将不再 要求设备必须设置屏幕锁定,然后才能使用密钥或 CA 证书 。