Android Q (十五) 企业中的 Android 的新变化

此页面简要介绍了 Android Q 推出的新企业 API、功能和行为变更。

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

Android Q 针对只需工作资料的归公司所有的设备推出了新的配置和证明功能。

针对归公司所有的设备配置工作资料

您现在可以使用 NFC、二维码或零触摸注册方法在 Android Q 及更高版本的设备上配置工作资料。在配置归公司所有的设备时,新的 intent extra 可以让设备政策控制器 (DPC) 应用启动工作资料或完全托管设置。创建工作资料或建立全面管理后,DPC 必须启动政策合规性屏幕以强制执行任何初始政策。

重要提示:仅支持完全托管配置的现有 DPC 实现不受此功能的影响 - 它们将继续在 Android Q 及更高版本的设备上运行。

在 DPC 的清单文件中,使用以下属性为 Activity 声明一个新的 intent 过滤器:

  • 操作:android.app.action.GET_PROVISIONING_MODE
  • 类别:CATEGORY_DEFAULT

在配置期间,设备将启动与该 intent 过滤器关联的 Activity。此 Activity 的目的是指定管理模式(工作资料或完全托管)。

在确定适合设备的管理模式之前检索配置 extra 可能很有用。Activity 可以调用 getIntent() 来检索以下内容:

  • EXTRA_PROVISIONING_IMEI
  • EXTRA_PROVISIONING_SERIAL_NUMBER
  • EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE

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

  • EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE:添加到现有软件包或创建新软件包。当您的 DPC 启动其政策合规性屏幕时,此软件包将作为 intent extra 发送。
  • EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE:如果在工作资料配置期间添加工作帐号,则仅指定要迁移的帐号。

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

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

通过 setResult(RESULT_OK, Intent) 将配置详细信息发回设置,并使用 finish() 关闭当前打开的所有屏幕,从而完成工作资料或完全托管配置。

注意:为防止配置失败,请不要在返回设置后启动任何 Activity 或后台服务。

配置完成后,DPC 可以使用新的 intent 启动其合规性屏幕并强制执行初始政策设置。在工作资料设备上,合规性屏幕显示在工作资料中。您的 DPC 必须使用这个新的 intent,而不是监听 ACTION_PROFILE_PROVISIONING_COMPLETE 广播。

在 DPC 的清单文件中,使用以下属性为 Activity 声明一个新的 intent 过滤器:

  • 操作:android.app.action.ADMIN_POLICY_COMPLIANCE
  • 类别:CATEGORY_DEFAULT

与该 intent 过滤器相关联的 Activity 可以调用 getIntent() 以检索 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE。执行政策合规性审核后,ADMIN_POLICY_COMPLIANCE 必须返回 setResult(RESULT_OK, Intent) 并使用 finish() 关闭当前打开的所有屏幕。

完全托管设备会将用户返回到主屏幕。使用二维码配置的工作资料设备将提示用户添加自己的个人帐号,然后将他们返回到主屏幕。系统不会在通过零触摸或 NFC 配置的工作资料设备上提示用户添加其个人帐号。

工作资料设备 ID 证明

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

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

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

工作资料改进

有新的 API 可用于支持跨资料公开日历和在设备范围内阻止安装未知来源的应用。

访问工作资料日历

在个人资料中运行的应用可以显示工作资料日历上的活动。要查询工作资料日历数据,请使用以下内容提供器 URI 调用 Calendar Provider API:

  • Calendars.ENTERPRISE_CONTENT_URI
  • Events.ENTERPRISE_CONTENT_URI
  • Instances.ENTERPRISE_CONTENT_URI
  • Instances.ENTERPRISE_CONTENT_BY_DAY_URI
  • Instances.ENTERPRISE_CONTENT_SEARCH_URI
  • Instances.ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI

当工作资料日历不可用时,查询会返回空游标。当 IT 管理员阻止访问工作资料日历或工作资料已关闭时,无法使用工作资料日历。使用设备的用户也可以在设置中关闭跨资料访问日历功能。

在个人资料中运行的应用可以显示工作活动,并通过将希望修改工作活动的用户转到工作资料中的同一活动来重定向这些用户。当您的应用同时安装在个人资料和工作资料中时,请调用 startViewCalendarEventInManagedProfile()。想要支持跨资料访问日历活动的应用必须处理 ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT 操作。准备您的界面以显示包含以下 intent extra 中的数据的现有活动:

  • EXTRA_EVENT_ID
  • EXTRA_EVENT_BEGIN_TIME
  • EXTRA_EVENT_END_TIME
  • EXTRA_EVENT_ALL_DAY

管理工作资料日历访问权限

IT 管理员可以阻止工作资料与个人资料共享日历信息。要允许访问工作资料日历,工作资料的管理员组件必须调用 setCrossProfileCalendarPackages()。针对允许的集合一个也不传递、传递一个或多个应用软件包,或传递 null 以允许所有应用读取工作资料日历。要获取之前设置的所有应用软件包,工作资料的管理员组件可以调用 getCrossProfileCalendarPackages()。

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

从 Google Play(或其他受信任的应用商店)以外的来源下载的应用称为未知来源的应用。在 Android Q 中,工作资料管理员现在可以添加新的用户限制 DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY,以阻止任何用户或资料在设备上的任何位置安装未知来源的应用。但是,添加此限制后,使用该设备的用户仍然可以使用 adb 安装应用。

为阻止用户错误地安装未知来源的应用,我们建议您添加此项用户限制,因为它不需要安装 Google Play 服务。如果您想支持旧版 Android,可以为 Google Play 设置托管配置值。

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

当工作资料的管理员调用 DevicePolicyManager.setPermittedInputMethods() 时,用户只能使用其工作资料内(而不是整个设备)允许的输入方法,从而让他们完全控制其设备个人端上的输入方法。

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

Android Q 针对完全托管设备推出了新功能和 API,包括手动系统更新、扩展二维码和 NFC 配置以添加 EAP WLAN 网络的凭据,以及对 DNS-over-TLS 的支持。

手动安装系统更新

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

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

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

设备重启后,您的 DPC 需要使用版本 API(例如 Build.FINGERPRINT)确认安装是否成功。如果更新失败,请向 IT 管理员报告失败情况。

EAP WLAN 配置

在 Android Q 中,用于配置设备的二维码和 NFC 数据现在可以包含 EAP 配置和凭据(包括证书)。当用户扫描二维码或点按 NFC 标签时,设备会使用 EAP 自动进行身份验证并连接到本地 WLAN 网络,然后启动配置流程,无需任何额外的手动输入。

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

  • EXTRA_PROVISIONING_WIFI_EAP_METHOD
  • EXTRA_PROVISIONING_WIFI_IDENTITY
  • EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY
  • EXTRA_PROVISIONING_WIFI_DOMAIN
  • EXTRA_PROVISIONING_WIFI_PHASE2_AUTH
  • EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE
  • EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE

私人 DNS 支持

单位可以使用 DNS-over-TLS(在 Android 设备上称为“私人 DNS”)避免泄漏 DNS 查询,包括内部主机名的查询。完全托管设备的管理员组件可以控制设备的“私人 DNS”设置。要设置“私人 DNS”模式,请调用 DevicePolicyManager.setGlobalPrivateDns() 并将 mode 设为以下某个值:

  • PRIVATE_DNS_MODE_OPPORTUNISTIC,以便在系统发现支持的名称服务器时让设备使用“私人 DNS”
  • PRIVATE_DNS_MODE_PROVIDER_HOSTNAME,并在 hostname 参数中提供支持 RFC7858 的名称服务器的主机名

当您的 DPC 使用主机名调用 setGlobalPrivateDns() 时,如果系统无法访问现有网络上的名称服务器主机,将返回 PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING。

您可以通过添加 DISALLOW_CONFIG_PRIVATE_DNS 用户限制阻止用户更改私人 DNS 设置。

VPN 锁定模式豁免

VPN 锁定模式可让 DPC 屏蔽任何不使用 VPN 的网络流量。完全托管设备和工作资料的管理员现在可以豁免应用进入锁定模式。豁免的应用默认使用 VPN,但如果 VPN 不可用,则会自动连接到其他网络。被明确拒绝访问 VPN 的豁免应用将仅使用其他网络。

要豁免应用进入锁定模式,请调用新的 DevicePolicyManager 方法 setAlwaysOnVpnPackage(),该方法现在接受已豁免应用软件包的列表。调用此方法时,必须在设备上安装 DPC 添加的所有应用软件包。如果卸载然后重新安装应用,则必须再次豁免该应用。要获取以前免于进入锁定模式的应用,请调用 getAlwaysOnVpnLockdownWhitelist()。

为了帮助完全托管设备和工作资料的管理员获得锁定模式状态,Android Q 添加了 isAlwaysOnVpnLockdownEnabled() 方法。

新的委托范围

Android Q 扩展了 DPC 可委托给其他更专用应用的函数列表。Android 将执行任务所需的 API 方法分成各个范围。要委托范围,请调用 setDelegatedScopes() 并传递以下一个或多个范围:

  • DELEGATION_NETWORK_LOGGING,用于委托网络活动日志
  • DELEGATION_CERT_SELECTION,用于委托证书选择
  • DELEGATION_PACKAGE_INSTALLATION,用于委托软件包安装

Android Q 为受委托应用引入了一个新的 DelegatedAdminReceiver 类。系统使用此广播接收器将类似 DPC 的回调发送给受委托应用。已受委托网络活动日志和证书选择的应用应实现此类。要将此组件添加到受委托应用中,请按照以下步骤操作:

  1. 将 DelegatedAdminReceiver 的子类添加到受委托应用中。
  2. 在应用清单中声明 ,并为每个回调添加一个 intent 过滤器操作。例如,ACTION_NETWORK_LOGS_AVAILABLE 或 ACTION_CHOOSE_PRIVATE_KEY_ALIAS。
  3. 使用 BIND_DEVICE_ADMIN 权限保护广播接收器。

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

            android:permission="android.permission.BIND_DELEGATED_ADMIN">

       

           

           

       

       

   

 

网络活动日志

为了帮助单位检测和跟踪恶意软件,DPC 可以记录系统进行的 TCP 连接和 DNS 查询。在 Android Q 中,完全托管设备的管理员可以将网络日志委托给专用的应用。

要在系统提供一批日志后检索网络日志,受委托应用应首先添加 DelegatedAdminReceiver 的子类(如前所述)。在子类中,按照检索日志中的指南实现 onNetworkLogsAvailable() 回调。

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

  • setNetworkLoggingEnabled()
  • isNetworkLoggingEnabled()
  • retrieveNetworkLogs()

为避免丢失日志,DPC 不应在规划委托给其他应用时启用网络日志。受委托应用应启用和收集网络日志。在 DPC 委托网络日志后,它将不再接收任何 onNetworkLogsAvailable() 回调。

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

证书选择

在 Android Q 中,完全托管设备、工作资料和次要用户的管理员可以将证书选择委托给专用的应用。

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

软件包安装

有时,将本地缓存的自定义应用安装到设备上很有用。 完全托管设备的管理员现在可以将软件包安装(和卸载)委托给其他应用。

软件包安装受委托应用可以在未经用户互动的情况下安装应用软件包。无需对安装程序应用做出更改,但是在委托此范围后,安装程序应用便不再提示用户授予安装应用的权限。要了解如何通过 DPC 或受委托应用安装软件包,请参阅安装应用软件包。

弃用设备管理政策

Android Q 禁止 DPC 应用旧版设备管理政策。我们建议客户和合作伙伴切换到完全托管设备或工作资料。设备管理员针对 Android Q 调用以下政策时会抛出 SecurityException:

  • USES_POLICY_DISABLE_CAMERA
  • USES_POLICY_DISABLE_KEYGUARD_FEATURES
  • USES_POLICY_EXPIRE_PASSWORD
  • USES_POLICY_LIMIT_PASSWORD

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

  • USES_POLICY_WIPE_DATA
  • USES_POLICY_FORCE_LOCK
  • USES_POLICY_RESET_PASSWORD

要详细了解这些变更,请参阅设备管理员弃用。

针对企业和 VPN 应用的新功能

以 Android Q 为目标平台的应用可以查询在设备上设置的屏幕锁定复杂度,然后显示机密数据或启动关键功能。我们还针对 VPN 应用推出了新功能。

屏幕锁定安全系数检查

从 Android Q 开始,具备关键功能且需要屏幕锁定的应用可以查询设备或工作资料的屏幕锁定复杂度。要求屏幕锁定安全系数更高的应用可以将用户引导至系统屏幕锁定设置,从而让他们更新其安全设置。

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

  • 将新的 GET_AND_REQUEST_SCREEN_LOCK_COMPLEXITY 权限添加到应用的清单中。
  • 调用 DevicePolicyManager.getPasswordComplexity()。复杂度分为四类:0 - 无,1 - 低,2 - 中,3 - 高。

要启动系统屏幕锁定设置,请使用带有 extra EXTRA_PASSWORD_COMPLEXITY 的 ACTION_SET_NEW_PASSWORD,不符合 intent extra 中指定的复杂度的选项将灰显。用户可以选择可用的屏幕锁定选项或退出屏幕。

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

VPN 应用中的 HTTP 代理支持

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

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

VPN 服务模式

VPN 应用现在可以发现 VPN 服务是否正在运行(因为设置为始终开启的 VPN)以及锁定模式是否处于活动状态。Android Q 中添加的新方法可帮助您调整界面。例如,当始终开启的 VPN 控制服务的生命周期时,您可以停用“取消关联”按钮。

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

  • isAlwaysOn(),用于确认系统是否因设置为始终开启的 VPN 而启动了服务
  • isLockdownEnabled(),用于确认系统是否会屏蔽不使用 VPN 的连接

当服务运行时,始终开启状态将保持不变,但锁定模式状态可能会更改。

了解详情

要了解可能会影响您的应用的其他变更,请参阅 Android Q 行为变更页面(针对以 Q 为目标平台的应用和所有应用)。

你可能感兴趣的:(android,版本更新)