已由自定义设备政策控制器 (DPC) 管理的设备可以迁移至 Android 设备 政策 (ADP) 以及利用 Android Management API。
前提条件
- 此设备已由您的 EMM 通过自定义 DPC 管理。
- 您的自定义 DPC 已与 AMAPI SDK 集成。
- 设备已通过 Google Play EMM API 注册。
- 该设备属于Google Play 企业版账号集。
- 设备搭载 Android 9 或更高版本。
- 如果公司自有设备上有工作资料,设备必须运行 Android 11 或更高版本。
与自定义 DPC 中的 AMAPI SDK 集成
迁移过程需要自定义 DPC 应用以集成 AMAPI SDK。如需详细了解此库以及如何添加 AMAPI SDK 集成指南中将应用添加到您的应用。
设备迁移步骤
- 设置专供设备在迁移后使用的政策 到 AMAPI。为了提供最佳用户体验,此政策应等同于与此政策保持一致 已由 DPC 在设备上强制执行。
- 通过调用为设备创建迁移令牌
enterprises.migrationTokens.create
。 - 将此迁移令牌的
value
发送给 您的自定义设备政策控制器 (DPC)。 - 使用下面的命令确保设备上已安装 Android Device Policy Play EMM API。
- 使用
DpcMigrationClientFactory
创建DpcMigrationClient
- 在
DpcMigrationClient
上,调用migrateDeviceManagementToAndroidManagementApi
方法。 至此,迁移过程就完成了。 deviceState
会更改为ACTIVE
,并且您会收到STATUS_REPORT
消息通过 Pub/Sub 渠道发送。
迁移完成后,发起调用的应用将失去其设备所有者或配置文件 所有者权限,因为这些权限将转移到 Android Device Policy。
注意:设备必须连接到互联网才能开始迁移。 该过程经过精心设计,能够应对使用期间的网络连接断开 确保需要网络连接的关键操作 在实际转让设备所有者或资料所有者权限之前完成的 从 DPC 到 Android Device Policy 的通信
迁移令牌
EMM 服务器会请求迁移令牌,表明 迁移由自定义 DPC 管理的特定设备。 在迁移成功完成或迁移之前,可以使用迁移令牌 直至过期。
自定义 DPC 集成
首先,您需要创建一个 DpcMigrationRequest
,并将
令牌以及已配置连接到该网络的 Wi-Fi 网络列表(如有必要)
构建器:
// Create a DpcMigrationRequest
DpcMigrationRequest request =
DpcMigrationRequest.builder()
.setMigrationToken(token)
.build();
然后,您可以使用获取 DpcMigrationClient
并启动
迁移过程
migrateDeviceManagementToAndroidManagementApi
:
// Create a DpcMigrationClient
DpcMigrationClient dpcMigrationClient = DpcMigrationClientFactory.create(context);
try {
// Use helper function to retrieve Admin component name
var adminComponentName = getAdminComponent(context);
ListenableFuture<DpcMigrationAttempt> futureAttempt =
dpcMigrationClient.migrateDeviceManagementToAndroidManagementApi(
new ComponentName(context, DpcMigrationNotificationReceiver.class),
adminComponentName,
request);
// handle futureAttempt
} catch (RuntimeException e) {
// send failure feedback: "Error: " + e
}
跟踪迁移的进度
系统会通过一个
DpcMigrationAttempt
。
您可以直接使用
migrateDeviceManagementToAndroidManagementApi
或使用
getMigrationAttempt
和 listMigrationAttempts
方法用于获取
并列出迁移尝试。
// Passing an empty name, we retrieve the last attempt
var request = GetDpcMigrationAttemptRequest.builder().build();
var attempt = client.getMigrationAttempt(request);
您可以选择性地设置 DpcMigrationListener
,具体方法是:
您的NotificationReceiverService
,即可收听
DpcMigrationAttempt
的状态更新。
// DpcMigrationNotificationReceiver for callback handling
public class DpcMigrationNotificationReceiver extends NotificationReceiverService
implements DpcMigrationListener {
@Override
protected DpcMigrationListener getDpcMigrationListener() {
// getDpcMigrationListener"
return this;
}
@Override
public void onMigrationStateChanged(DpcMigrationAttempt migrationAttempt) {
// send success feedback
}
}
处理 Wi-Fi 网络
如果存在由自定义 DPC 管理的 Wi-Fi 网络,请参阅 AMAPI ONC 政策。 应与这些网络的配置相匹配,以便 AMAPI 开始管理它们 DPC 迁移与 Wi-Fi 管理的交互各不相同 具体取决于管理模式
全托管式设备和公司自有设备上的工作资料
在迁移过程中,Android Device Policy 会假定任何 WLAN 网络 在政策中配置的 SSID 和安全类型与 设备上配置的 Wi-Fi 网络与配置的匹配 WLAN 网络。因此,由自定义 DPC 配置的 Wi-Fi 网络不受影响 直至 ONC 政策发生更改, 。不过,如果在迁移后卸载了自定义 DPC,则 系统会自动移除自定义 DPC 配置的 Wi-Fi 网络。 Android Device Policy 会继续强制执行政策,而且如果其中任一网络强制执行政策 政策中配置的网络将添加为政策中配置的网络
个人设备上的工作资料
由于技术原因,自定义 DPC 配置的 Wi-Fi 网络需要
由适用于 Android Device Policy 的自定义 DPC 移除,以开始管理这些内容
WLAN 网络。AMAPI SDK 负责处理此问题,并移除此类 Wi-Fi 网络
在将所有权从自定义 DPC 转移到 Android Device Policy 之前
但它需要自定义 DPC 传递有关这些网络的信息,
DpcMigrationRequest
。迁移后,网络
在政策中配置会正常添加,因此建议
自定义 DPC 添加的网络也应在政策中配置。
请注意以下几点:
- 如果活动网络是由自定义 DPC 配置的 Wi-Fi 网络,则设备 在迁移过程中可能暂时处于离线状态。
- 只能传入由自定义 DPC 配置的 Wi-Fi 网络
DpcMigrationRequest
,否则 AMAPI SDK 无法移除网络(例如用户添加的 Wi-Fi 网络)。 - Wi-Fi 网络应传入
DpcMigrationRequest
(仅当自定义 DPC 是 个人资料所有者,否则迁移将失败。 - 由于技术原因,Android 12 是一个例外,因为
系统会忽略传入的
DpcMigrationRequest
,并且所有 Wi-Fi 网络 由自定义 DPC 配置的网络会被自动移除。此外, 自定义 DPC 具有ACCESS_WIFI_STATE
的一项要求 权限(在 Android 12 中); 否则迁移失败
注意事项
以下是与此功能相关的一些注意事项。
企业专用 ID
对于 Android 12 及更高版本上的工作资料,企业专用 ID。
可通过DevicePolicyManager.getEnrollmentSpecificId
访问
在迁移时不会发生变化。但是,如果工作资料
受 Android Device Policy 管理的设备再次被创建(例如,
删除前一部设备或将设备恢复出厂设置后),
届时企业专用 ID 将会发生变化。
完全托管设备中的工作资料
具有工作资料的全代管式设备不支持此功能 运行 Android 9 或 10 的配置文件。请勿尝试迁移这些设备 并且无论是否出现错误,此类设备均不受支持, 用于 DPC 迁移。