您可以通过多种方式配置设备。您客户的业务需求决定了您将使用哪些预配方法。
设备配置基础知识
您的客户想要支持的设备配置部署场景(例如自带设备或公司自有设备)决定了您将使用的操作模式(例如设备所有者模式或资料所有者模式)。同样,您需要支持的操作模式和 Android 版本决定了您将实现哪些配置方法。
部署场景
在公司自有的部署场景中,企业拥有并完全控制其员工使用的设备。通常,组织需要严格监控和管理整个设备时,会部署公司自有设备。
通过支持“自带设备”部署场景的公司,其员工可以将个人拥有的设备用于工作,并使用这些设备访问公司拥有特权的信息和应用。
操作模式
设备所有者操作模式支持公司自有部署。在 Android 中,管理应用称为设备政策控制器 (DPC)。DPC 会在 Android 设备上强制执行政策,当它充当设备所有者时,它会管理整个设备。作为设备所有者,DPC 可以执行设备级操作,例如配置设备级连接、配置全局设置和恢复出厂设置。
资料所有者的操作模式支持自带设备部署。通过 DPC,企业可以向设备上的主要用户帐号添加工作资料,从而将个人设备用于工作。工作资料与主要用户相关联,但作为单独的资料。作为资料所有者,DPC 仅管理设备上的工作资料,对工作资料之外的控制有限。
设备所有者配置方法
您必须在新设备的初始设置期间或恢复出厂设置后配置设备所有者操作模式。任何时候都无法在设备上配置设备所有者模式。
根据用例,用于配置设备所有者模式的配置方法主要有 2 种类型。
- 在设备驱动型流程中,IT 管理员可以使用 NFC 配置大量设备。此流程可用于 Google Play 企业版帐号或 Google Workspace 场景。
- 在用户驱动的流程中,具体选项取决于组织是否使用 Google Workspace。
- 在 Google Workspace 场景中,用户在初始设备设置期间添加其 Google 帐号,DPC 必须引导用户完成设置设备所有者的步骤。用户驱动的流程可以帮助最终用户设置新设备,在设备不支持 NFC 时也可以作为备选流程。
- 如果组织不使用 Google Workspace,您应使用 Google Play 企业版帐号方法。
注意:如果您在 Play 中限制将应用分发到特定国家/地区,系统会在设备所有者配置期间忽略这些限制。即使设备不在目标国家/地区,系统也会下载 DPC。
资料所有者配置方法
配置资料所有者操作模式的建议方法取决于组织是否使用 Google Workspace。
- 对于 Google Workspace,建议采用用户驱动型流程,让用户添加自己的 Google 帐号,DPC 会引导用户完成设置个人资料所有者的步骤。
- 如果组织不使用 Google Workspace,则建议使用 Google Play 企业版帐号方法。
系统也支持传统方法(指示用户手动安装 DPC)。它依赖于用户从 Google Play 下载并安装您的 DPC,然后 DPC 会引导用户完成设置资料所有者的其余流程。
各个 Android 版本之间的密钥配置差异
部署场景 | 操作方式 | 配置方法 | 5.0、5.1 | 6.0 及更高版本 | 7.0 及更高版本 |
---|---|---|---|---|---|
归公司所有 | 设备所有者 | 二维码 | ✓ | ||
Google Play 企业版帐号 | ✓ | ✓ | |||
Google 账号 | ✓ | ✓ | |||
NFC | ✓ | ✓ | ✓ | ||
BYOD 自带数据 | 资料所有者 | Google Play 企业版帐号 | ✓ | ✓ | ✓ |
Google 账号 | 5.11 | ✓ | ✓ | ||
手动 DPC 安装 | ✓ | ✓ | ✓ |
一般实现注意事项
无论您实现哪种操作模式,编写 DPC 时都需要考虑以下事项。
Google Play 服务兼容性
Google Play 服务 APK 指南指示开发者在执行 API 事务之前对 Google Play 服务进行版本检查。由于尝试更新 Google Play 服务会导致设备设置流程严重中断,因此您的 DPC 不得在设备配置完成之前尝试更新 Google Play 服务。
有关 DPC 与 Google Play 服务的兼容性的要点如下:
- DPC 应使用特定设备附带的 Google Play 服务运行。
- DPC 不应依赖于 Google Play 服务未来版本中在设备配置时可用的新功能。
设备配置完成后,DPC 可以提示用户更新 Google Play 服务,以便 DPC 可以使用最新功能。不过,如果某项功能因某种原因不可用,DPC 必须正常回退到设备随附的版本。
检索设备详细信息
由于传播延迟,为新注册的设备调用 devices.get 最多可能需要 2 分钟才会返回设备的详细信息。
如果您的工作流需要详细信息才能确保最终用户可以使用设备或工作资料,我们建议您在 DPC 中使用进度屏幕并等待调用成功。
资料所有者模式的实现注意事项
在编写 DPC 以实现资料所有者操作模式时需要考虑以下事项。
移除或停用个人 DPC
在预配资料所有者操作模式时,DPC 开始在个人资料中运行,并启动创建工作资料的流程。创建工作资料后,DPC 也会在工作资料中运行。工作资料中的 DPC 会完成配置流程。此时,个人资料中的 DPC 应自行停用,或设备用户应将其移除。
用户移除个人 DPC
- 个人 DPC 会监听
ACTION_MANAGED_PROFILE_PROVISIONED
。(对于 Android 5.1 设备,个人 DPC 应改为监听ACTION_MANAGED_PROFILE_ADDED
)。 - 个人 DPC 发起卸载请求
ACTION_UNINSTALL_PACKAGE
。这会提示用户卸载个人 DPC。为了提供最佳用户体验,卸载过程应在预配流程中进行。
个人设备政策控制器 (DPC) 会自行停用
- 个人 DPC 会监听
ACTION_MANAGED_PROFILE_PROVISIONED
。(对于 Android 5.1 设备,个人 DPC 应改为监听ACTION_MANAGED_PROFILE_ADDED
)。 - 如果适用,个人 DPC 应在停用自身之前释放设备管理员权限。
- 个人 DPC 使用
COMPONENT_ENABLED_STATE_DISABLED
参数发起setApplicationEnabledSetting
停用请求。 - 用户可以在 Google Play 中重新启用个人设备政策控制器 (DPC)。
设备所有者模式的实现注意事项
在编写 DPC 以实现设备所有者操作模式时需要考虑以下事项。
设备必须是全新或恢复出厂设置的
您必须在新设备的初始设置期间或恢复出厂设置后配置设备所有者操作模式。任何时候都无法在设备上配置设备所有者模式。
设备所有者模式可让 DPC 完全控制设备。如果允许在初始设置之后配置设备所有者模式:
- 恶意软件可能会创建设备所有者并接管设备。
- 如果设备上已经有一些用户数据或应用,则可能会导致隐私问题。
仅在公司自有设备上设置设备所有者模式
您应仅在您确定为归客户公司所有的设备上配置设备所有者模式。如需验证这一点,您可以检测唯一的设备标识符(例如序列号),或使用通过您的 EMM 政策获得设备注册授权的一组专用帐号。
如果您无法验证设备的公司所有权,则必须创建一种故障安全机制,以免错误地预配设备所有者模式。例如,在配置设备所有者模式之前,您可以提示设备用户确认或执行一些明确的操作。
启用系统应用
当 DPC 配置工作资料时,系统会假定任何没有启动器图标的系统应用对设备而言至关重要,并自动允许在工作资料中运行。带有启动器图标的系统应用被视为可选应用,您可以决定是否启用它们。
通过 Google Play 启用系统应用
通过 Google Play 启用系统应用非常简单,用户可在有可用更新时及时获取。
启用使用 Android 框架 API 的系统应用
如果您希望用户在开始使用设备后立即看到系统应用,请在设备配置过程中启用系统应用。DPC 按软件包名称或通过使用 DevicePolicyManager.enableSystemApp()
的 intent 来启用系统应用。
您可以通过多种方法确定要启用并在 EMM 控制台中将其提供给 IT 管理员的系统应用。
创建系统应用目录
在此方法中,每个设备都会确定设备上有哪些应用,并将此数据发送回 EMM 控制台。EMM 控制台在创建设备政策时会动态显示这些数据,以便 IT 管理员能够按应用管理应用。
如果设备上尚未配置工作资料,请使用
queryIntentActivities()
拉取设备上带有启动器图标的所有应用的列表:private List<ResolveInfo> getAppsWithLauncher() { Intent i = new Intent(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); return getPackageManager().queryIntentActivities(i, 0); }
如果设备上已预配工作资料,请使用
PackageManager.GET_DISABLED_COMPONENTS
和PackageManager.GET_UNINSTALLED_PACKAGES
拉取工作资料中所有应用的列表。通过检查
FLAG_SYSTEM
(指示应用是否已安装在设备的系统映像中),查找应用列表中的系统应用。
优点:
- 为 IT 管理员提供所有设备上应用的完整信息。
- 精细地控制启用哪些应用。
缺点:
- 由于每个设备具有不同的应用目录,因此很难将单个政策配置的模型应用于多种设备类型。
- 以有意义的方式向 IT 管理员呈现 OEM 专属应用的数量并非易事。
按功能对系统应用进行分类
当 IT 管理员想要为一组设备启用系统应用时,他们会根据功能选择通用应用,例如“系统浏览器”。然后,DPC 允许所有系统应用访问该 intent。
优点:
- 为 IT 管理员提供基于功能的简单功能。
- 确保在各种设备上提供一致的功能(至少对于常见用例而言)。
缺点:
- 将系统应用限制为在所有设备类型上支持的应用。
- IT 管理员可能希望推送应用的一个 OEM 版本(例如 Samsung® 浏览器),但不推送另一个(例如 LG® 浏览器)。
- IT 管理员可能不希望推送多个应用,但当有多个 intent 处理程序时,他们无法阻止推送。
仅支持获批的系统应用
您与 OEM 合作确定具体的 OEM 软件包,并在 EMM 控制台中仅针对这些软件包提供支持。这样,您就可以为 OEM 应用的托管配置编目,否则您不会知道这些内容,因为 OEM 应用并非托管在 Google Play 上。
优点:
- Vastly 可简化集成工作流,并消除前两个选项中存在问题的极端情况。
- 您可以为 OEM 应用的托管配置编目,并在 IT 管理员的 EMM 控制台中展示这些配置。
- 与 OEM 建立密切关系,以便支持旗舰设备。
缺点:
- 因此,可扩展性会降低,消费者的选择也会随之减少。
DPC 测试场景
Test DPC 是 Google 提供的开源应用,用于测试 DPC 应用中的企业功能。Test DPC 可在 github 或 Google Play 中找到。 您可以使用 Test DPC 执行以下操作:
- 模拟 Android 中的功能
- 设置和强制执行政策
- 设置应用和 intent 限制
- 设置工作资料
- 设置全代管式 Android 设备
虽然 Test DPC 主要用作测试 Android 企业解决方案的工具,但也可以将其用作 Android 功能的示例代码源代码。
自定义配置
在设备配置期间,系统界面会在状态栏中显示默认颜色,并在屏幕顶部显示默认徽标。设置自定义颜色和徽标,在 DPC 和系统界面之间提供一致的视觉过渡,或允许管理员使用您的 EMM 控制台执行此操作。例如,管理员可能会上传公司徽标或自定义显示通知的屏幕的外观。
您的 DPC 使用 DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR
和 DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI
extra 强制选择颜色和徽标。
如需设置自定义颜色,请使用 EXTRA_PROVISIONING_MAIN_COLOR
设置一个整数,用于指明在设备配置期间显示的主要颜色。使用 ACTION_PROVISION_MANAGED_PROFILE
或 ACTION_PROVISION_MANAGED_DEVICE
将 extra(常量)放在 intent 中。
如需了解整数的表示方式,请参阅颜色。如需查看示例,请参阅 TestDPC 应用中的 MAIN_COLOR
。
如需设置自定义徽标,请使用 EXTRA_PROVISIONING_LOGO_URI
设置在设备配置期间在屏幕顶部显示的图片。使用 ACTION_PROVISION_MANAGED_PROFILE
或 ACTION_PROVISION_MANAGED_DEVICE
将 extra(常量)放在 intent 中。确保图片的像素密度适合设备。
如需查看示例,请参阅 TestDPC 应用中的 LOGO_URI
。
二维码方法
二维码配置方法通过扫描设置向导中的二维码来设置和配置设备所有者模式。二维码包含键值对的载荷,其中包含 DPC 配置设备所需的所有信息。
您的 EMM 控制台应该为 IT 管理员提供一种为他们要配置的设备创建二维码的方法。IT 管理员将二维码发送给最终用户,最终用户通过扫描二维码来配置其设备。
二维码配置的使用场景
某些设备(如平板电脑)不支持 NFC。二维码配置是一种简便的方法来配置不支持 NFC 的分布式设备群。IT 管理员可以向用户发送二维码,以实现由用户驱动的配置。
二维码配置不需要 Google 身份,例如 Google 网域或 Google 帐号。使用 Android 但未使用 Google Workspace 的组织没有 Google 身份。
与 NFC 一样,二维码配置支持在不需要或不需要 Google 身份(或任何身份)的自助服务终端和一次性部署中。例如,商店中的自助服务终端设备不归任何人所有,不应具有最终用户身份。
创建二维码
用于二维码配置的有效二维码是一个采用 UTF-8 编码的 JavaScript® 对象表示法 (JSON) 字符串。您可以将以下属性包含在有效的二维码中:
一律需要
如果设备尚未安装 DPC,则必须安装 DPC
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
建议在设备尚未连接到 Wi-Fi 时采用
可选
EXTRA_PROVISIONING_LOCALE
EXTRA_PROVISIONING_TIME_ZONE
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER
EXTRA_PROVISIONING_LOCAL_TIME
EXTRA_PROVISIONING_WIFI_HIDDEN
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
EXTRA_PROVISIONING_WIFI_PROXY_HOST
EXTRA_PROVISIONING_WIFI_PROXY_PORT
EXTRA_PROVISIONING_WIFI_PROXY_BYPASS
EXTRA_PROVISIONING_WIFI_PAC_URL
EXTRA_PROVISIONING_SKIP_ENCRYPTION
以下示例可构建有效的二维码:
{
"android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME":
"com.emm.android/com.emm.android.DeviceAdminReceiver",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM":
"gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=",
"android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION":
"https://path.to/dpc.apk",
"android.app.extra.PROVISIONING_SKIP_ENCRYPTION": false,
"android.app.extra.PROVISIONING_WIFI_SSID": "GuestNetwork",
"android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
"dpc_company_name": "Acme Inc.",
"emm_server_url": "https://server.emm.biz:8787",
"another_custom_dpc_key": "dpc_custom_value"
}
}
二维码配置过程
- 设置向导会提示用户点按欢迎屏幕 6 次。点按操作必须在屏幕的同一位置完成。
- 设置向导会提示用户连接到互联网,以便设置向导可以下载二维码读取器。
- Google Play 服务会下载包含二维码识别引擎的模块。
- 用户扫描其 IT 管理员提供的二维码。
- 设置向导会下载您的 DPC 应用,并使用
ACTION_PROVISION_MANAGED_DEVICE
启动设备所有者配置流程。
Google Play 企业版帐号方法
DPC 可以使用 Google Play 企业版帐号配置方法来设置设备所有者模式或资料所有者模式。此配置方法针对不使用 Google Workspace 的组织。
Google Play 企业版帐号配置方法使用 DPC 支持库。此客户端库可确保 Google Play 企业版帐号能够顺畅运行。它还保持与 Google Play 企业版帐号配置过程的未来更新兼容。
配置设备的前提条件
- 使用 EMM 身份创建并注册企业 ID 并设置 ESA,如创建和注册企业中所述。
- 您的 EMM 控制台可以识别用户的企业身份。
- 用户可以使用 EMM 控制台接受的凭据(通常是公司电子邮件凭据)登录 DPC 应用。
设置商家资料所有者模式
在自带设备场景中作为个人设备使用的设备,您可以配置资料所有者操作模式。
- 用户从 Google Play 手动下载您的 DPC 并启动它。
- DPC 使用
ACTION_PROVISION_MANAGED_PROFILE
预配工作资料。 - 完成最后的设置步骤。
设置设备所有者模式
您必须在新设备的初始设置期间或恢复出厂设置后配置设备所有者操作模式。任何时候都无法在设备上配置设备所有者模式。
在设备设置过程中,当系统提示用户添加帐号时,系统会提示用户输入特殊的 DPC 专用令牌。令牌的格式为 afw#DPC_IDENTIFIER
。对于名为 ACME 的 EMM,afw#acme
会安装 ACME EMM 的默认 DPC。每个 EMM 都必须向 Google 请求特定的 DPC 标识符,然后才能在配置过程中使用它。
- 用户开启新设备或恢复出厂设置的设备,然后设置向导启动。
- 当系统提示您添加帐号时,系统会以
afw#DPC_IDENTIFIER
格式输入一个特殊令牌,用于标识您的 EMM 的 DPC。 - 设置向导会使用令牌中的 DPC 标识符向设备添加临时 Google 帐号。此临时帐号仅用于从 Google Play 下载适用于您的 EMM 的 DPC,并且会在最终设置步骤中移除。
- DPC 使用
ACTION_PROVISION_MANAGED_DEVICE
配置设备。 - 完成最后的设置步骤。
所有操作模式的最终设置步骤
仅在完成设置资料所有者模式或设备所有者模式的初始步骤之后,才执行这些步骤。
DPC 通过初始化 DPC 支持库来确保设备可以支持 Google Play 企业版帐号:
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin); androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
如果您要在设备上设置设备所有者模式,此步骤会移除为下载 DPC 而添加的临时 Google 帐号。
用户使用其 EMM 凭据登录 DPC。这些凭据通常是公司电子邮件凭据。
DPC 从 EMM 控制台请求通过身份验证的公司用户的 Google Play 企业版帐号凭据。
如果 EMM 控制台没有为用户设置 Google Play
userId
,则会通过调用Users.insert()
创建新用户。如果要配置设备所有者模式,请指定设备帐号(对于专用设备部署)或用户帐号(对于公司自有部署)。通过调用
Devices.update
设置设备的政策。您应先设置政策,然后再将 Google Play 企业版帐号添加到设备,否则在将帐号添加到设备后的短时间内不会应用此政策。EMM 控制台通过调用
Users.generateAuthenticationToken()
请求userId
的帐号凭据。此身份验证令牌只在短时间内有效,不能重复使用。DPC 应使用令牌以编程方式添加帐号(对最终用户没有任何用处)。Google Play EMM API 会将身份验证令牌返回给 EMM 控制台。
EMM 控制台将身份验证令牌转发给 DPC。
DPC 使用以下代码将 Google Play 企业版帐号添加到设备
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
Google 账号方法
DPC 可以使用 Google 帐号配置方法来设置设备所有者模式或资料所有者模式。使用 Google 帐号配置方法,当用户在初始设备设置期间添加其 Google 帐号后,DPC 会引导用户完成配置步骤。
当用户输入其 Google 帐号凭据时:
- Google 身份验证服务器会对用户帐号进行身份验证。
- 然后,身份验证服务器会与企业服务器通信,以确定帐号的网域是注册为 Google Workspace 网域还是 EMM 管理的网域。
- 如果是,系统会自动从 Google Play 下载与网域关联的 DPC 并进行安装。
设置商家资料所有者模式
您可以在设备初始设置期间或当用户添加帐号时,通过设置 > 添加帐号配置资料所有者操作模式。
- 帐号身份验证由用户通过设置向导或设置 > 添加帐号启动。
- GMSCore 使用
ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE
启动工作资料配置。 - DPC 会自动下载到设备并使用
ACTION_GET_PROVISIONING_MODE
处理程序启动,以验证 DPC 是否支持工作资料配置。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
— 工作资料的额外信息,例如电子邮件地址。DPC 也将在此软件包中收到 is_setup_wizard。此软件包将包含ACTION_GET_PROVISIONING_MODE
和ACTION_ADMIN_POLICY_COMPLIANCE
处理程序中。EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
— 要迁移到新工作资料的经过身份验证的帐号的名称。
- 平台执行工作资料配置。
- 预配工作资料后,DPC 会收到广播
ACTION_PROFILE_PROVISIONING_COMPLETE
。DPC 的ACTION_ADMIN_POLICY_COMPLIANCE
处理程序在工作资料中启动。创建工作资料后,DPC 也会在工作资料中运行。DPC 会推送该受管理 Google 帐号的政策,确保设备未处于破解状态,并验证政策是否已强制执行(例如要求输入密码)。 - 个人资料中的 DPC 会自行停用或用户将其移除。
![](https://developers.google.cn/static/android/work/images/post-suw.png?authuser=8&hl=lv)
设置设备所有者模式或 COPE
您必须在新设备的初始设置期间或恢复出厂设置后配置设备所有者操作模式。在任何其他时间,都无法向设备添加设备所有者模式。
- 账号身份验证由用户通过设置向导启动。
- GMSCore 使用
ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE
启动设备所有者配置。3. DPC 会自动下载到设备,并使用GET_PROVISIONING_MODE
处理程序以选择所需的配置模式启动。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
— 工作资料的额外信息,例如语言区域、Wi-Fi、电子邮件地址。DPC 也将在此软件包中收到 is_setup_wizard。此软件包将包含ACTION_GET_PROVISIONING_MODE
和ACTION_ADMIN_POLICY_COMPLIANCE
处理程序中。
- 平台将设备配置为所需的配置模式。
- 设备配置后,DPC 会收到这些广播,并且 DPC 的
ACTION_ADMIN_POLICY_COMPLIANCE
处理程序会启动: - DPC 使用
Global.DEVICE_PROVISIONED
值验证设备是新设备还是恢复出厂设置(未配置):- 0 — 未配置。
- 1 — 已配置。
- DPC 通过推送该受管设备的政策、确保设备未处于破解状态,并验证政策是否已强制执行(例如要求输入密码)来完成配置流程。
![](https://developers.google.cn/static/android/work/images/in-suw.png?authuser=8&hl=lv)
“Google 帐号”方法的实现注意事项
DPC 应通过在所使用的启动 intent 中查找特定 extra 来检测 Google 帐号身份验证流程(请参阅
LaunchIntentUtil
):android.accounts.Account
类型的帐号 — 表示该帐号是通过设置向导或—添加的,这需要已启动的 DPC 来管理设备或配置文件。- 布尔值类型的
is_setup_wizard
—- 如果为 true,则 DPC 是在设置向导完成之前在设置向导中启动的,否则从—或其他流程启动。
检查 DPC 是否作为 Google 帐号方法的一部分启动:
boolean isSynchronousAuthLaunch(Intent launchIntent) { return launchIntent.hasExtra("is_setup_wizard"); }
在完成设置之前,DPC 不应调用
finish()
。它还应该返回正数结果代码(例如RESULT_OK
),因为 DPC 是通过startActivityForResult()
启动并等待结果。如果 DPC 设置流程到达发送
ACTION_PROVISION_*
intent 的点,则 DPC 应等待配置过程中获得的结果代码,然后再调用finish()
。启动ACTION_PROVISION_*
intent 时使用startActivityForResult()
和onActivityResult()
回调。(如需查看示例,请参阅LaunchActivity
和SetupSyncAuthManagement
)。由于设置流程可能存在异步性质,DPC 不能依赖
RESULT_OK
结果代码来指示配置已成功。唯一有保证的方法是在配置成功时依赖于DeviceAdminReceiver
回调。RESULT_CANCELED
表示用户在设置流程的同步部分退出,DPC 应对此作出反应。在此示例中,DPC 会启动配置并等待来自 activity 的结果代码:
Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE); startActivityForResult(intent, REQUEST_MANAGED_PROFILE); ... @Override public void onActivityResult(int req, int res, Intent i) { if (req == REQUEST_MANAGED_PROFILE) { if (res == Activity.RESULT_OK) { setResult(Activity.RESULT_OK); finish(); } else { Toast.makeText(this, “Provisioning failed”, Toast.LENGTH_SHORT).show(); } } }
如果设备已配置,DPC 不应尝试设置设备所有者操作模式(请参阅
ProvisioningStateUtil.isDeviceProvisioned()
)。在此示例中,DPC 会检查设备是否已配置:public static boolean isDeviceProvisioned(Context context) { ContentResolver cr = context.getContentResolver(); return Settings.Global.getInt(cr, DEVICE_PROVISIONED, 0) != 0; }
可选。DPC 可以在启动配置时使用
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
extra 将状态信息传递回其DeviceAdminReceiver
(在资料所有者的情况下,其在工作资料中运行)。配置完成后,TestDPC 使用此 extra 进入 Google 帐号流程中的一组不同的 activity。如需了解详情,请参阅DeviceAdminReceiver
。public class DeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver { @Override public void onProfileProvisioningComplete(Context context, Intent intent) { // Retrieve the admin extras bundle, which we can use to determine the original context for // Test DPC's launch. PersistableBundle extras = intent.getParcelableExtra( EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE); ...
如需设置工作资料,DPC 必须将添加的帐号迁移到新的工作资料。为此,DPC 应传递在
ACTION_PROVISION_MANAGED_PROFILE
的启动 intent 中提供的帐号。DPC 应为用户提供明确的号召性用语(例如“完成”按钮),以便在设置结束时退出应用,这样用户就不会认为在流程中的死胡同。
DPC 应使用设置向导主题或布局库,以便获得流畅、顺畅的集成体验。
NFC 方法
DPC 可以使用 NFC 配置方法来设置设备所有者模式。在 NFC 配置方法(即 NFC 标签)中,创建一个 NFC 编程器应用,其中包含客户配置设备所有者操作模式所需的初始政策以及 Wi-Fi 配置、设置和配置详细信息。当您或您的客户在 Android 设备上安装 NFC 编程器应用时,该设备就会成为编程器设备。
如需配置设备,IT 管理员需要将新设备开箱,然后将其撞到编程器设备或 NFC 标签上。触碰功能会将配置转移到设备,以便设备连接到互联网并下载适当的政策和设置。然后,设备将由您的 DPC 管理。
配置设备后,Google Play 会在短时间内显示不受管理的消费者内容,而不是应显示的已批准应用和集合。这种延迟可能持续几分钟到一小时。
创建 NFC 编程器应用和编程器设备
对于搭载 Android 10 或更低版本的设备,可以使用 Android Beam 完成 NFC 配置:
- 下载 NFC 编程器示例应用。您可以直接使用该示例,无需添加额外的内容,也可以将其修改为默认值。
- 在所选设备上安装程序员应用。
- 启动 NFC 编程器应用,并为
com.example.android.apis
选择 Load Defaults。(此文本可能会因您设置的默认参数而异。)
配置客户设备
- 使用新设备或已恢复出厂设置的设备触碰编程器设备或 NFC 标签。
- 验证设备是否仍显示在启动时显示的初始欢迎屏幕上。该文本在程序员应用的
Ready to send:{...}
中指定。 - 等待 DPC:
- 加密设备。
- 如果是码分多址 (CDMA) 设备:在显示电话界面时激活手机(无需交互)。
- 设置 Wi-Fi 连接。
- 下载 com.example.android.apis 的 APK 文件。
- 安装 com.example.android.apis.
- 将 com.example.android.apis 中的示例设备管理员设为设备所有者。
- 在设备所有者被激活后,显示操作成功的“消息框”。
- 返回首页(自动跳过设置向导)后,检查 com.example.android.apis 是否已设置为设备所有者:
- 在设置 > 安全 > 设备管理员中,确保无法移除 Sample Device Admin。
- 在设置 > 用户 > 用户和个人资料 > 您(所有者)中,确保所有者是唯一可用的帐号(一台设备一次只能有一个活跃的设备所有者)。
其他资源
高级 NFC 介绍了各种主题,例如使用各种标签技术、写入 NFC 标签、前台调度。
手动 DPC 安装方法
如需使用手动 DPC 安装配置方法设置资料所有者模式,用户需从 Google Play 下载 DPC 并进行安装。然后,DPC 会引导用户完成为受管理的 Google 帐号设置个人资料所有者的其余流程。
DPC 可以在创建工作资料之前或之后添加受管理的 Google 帐号。例如,DPC 可以根据用户的 EMM 凭据创建工作资料,而不是先提示创建受管理的 Google 帐号。
设置商家资料所有者模式
请先添加受管理的 Google 账号
- 用户从 Google Play 下载您的 DPC 并安装。
- DPC 会在使用
AccountManager.addAccount()
创建工作资料之前添加受管理的 Google 帐号。 - DPC 开始在个人资料中运行,并启动创建工作资料的流程:
ACTION_PROVISION_MANAGED_PROFILE
— 配置工作资料。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
— 工作资料的额外信息,例如语言区域、Wi-Fi、电子邮件地址。EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE
— 要迁移到新工作资料的经过身份验证的帐号的名称。
- 工作资料中的 DPC 会完成配置流程。创建工作资料后,DPC 也会在工作资料中运行。工作资料中的 DPC 通过推送受管理 Google 帐号的政策、确保设备未处于破解状态,并验证政策是否已强制执行(例如要求输入密码)来完成配置流程。
- 预配工作资料后,DPC 会收到广播
ACTION_PROFILE_PROVISIONING_COMPLETE
。 - 个人资料中的 DPC 会自行停用或用户将其移除。
![](https://developers.google.cn/static/android/work/images/google_acct_first.png?authuser=8&hl=lv)
请先创建工作资料
- 用户从 Google Play 下载您的 DPC 并安装。
- DPC 开始在个人资料中运行,并启动创建工作资料的流程:
ACTION_PROVISION_MANAGED_PROFILE
— 配置工作资料。EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
— 工作资料的额外信息,例如语言区域、Wi-Fi、电子邮件地址。
- DPC 使用
AccountManager.addAccount()
添加受管理的 Google 帐号。 - DPC 接收广播
ACTION_PROFILE_PROVISIONING_COMPLETE
并读取EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE
。 - 工作资料中的 DPC 会完成预配流程。创建工作资料后,DPC 也会在工作资料中运行。工作资料中的 DPC 通过推送该受管理 Google 帐号的政策、确保设备未处于破解状态,并验证政策是否已强制执行(例如要求输入密码)来完成配置流程。
- DPC 使用
DevicePolicyManager.setProfileEnabled()
启用工作资料。 - 个人资料中的 DPC 会自行停用或用户将其移除。
![](https://developers.google.cn/static/android/work/images/work_profile_first.png?authuser=8&hl=lv)
-
Android 5.1 中的 Google 帐号方法仅支持个人资料所有者操作模式,而且用户只能通过设置 > 添加帐号对其进行配置。 ↩