已由自定义 DPC 管理的设备可以迁移到 Android Device Policy 并利用 Android Management API。
注意:此过程对最终用户是透明的。此过程是单向的(一旦完成便无法撤消),并且不能用于将设备从一个 EMM 迁移到另一个 EMM。
前提条件
- 该设备已由 EMM 使用自定义 DPC 进行管理。
- 您的自定义 DPC 已与 AMAPI SDK 集成。
- 设备已注册 Google Play EMM API。
- 该设备属于 Google Play 企业版帐号企业。
- 设备搭载 Android 9 或更高版本。
- 如果是公司自有设备上的工作资料,设备必须搭载 Android 11 或更高版本。
在自定义 DPC 中与 AMAPI SDK 集成
迁移过程需要自定义 DPC 应用集成 AMAPI SDK。如需详细了解此库以及如何将其添加到您的应用,请参阅 AMAPI SDK 集成指南。
注意:此过程需要使用 AMAPI SDK 库 1.1.4 版或更高版本。
迁移设备的步骤
- 设置要在设备迁移到 AMAPI 后供设备使用的政策。为了提供最佳用户体验,这应该等同于您的 DPC 已在设备上强制执行的政策。
- 通过调用
enterprises.migrationTokens.create
为设备创建迁移令牌。 - 将此迁移令牌的
value
发送给您的自定义 DPC。 - 使用 Play EMM API 确保设备上安装 Android Device Policy。
- 使用
DpcMigrationClientFactory
创建DpcMigrationClient
- 在
DpcMigrationClient
上,调用migrateDeviceManagementToAndroidManagementApi
方法。迁移过程到此完成。 deviceState
更改为ACTIVE
,并且您将通过 Pub/Sub 渠道收到STATUS_REPORT
消息。
迁移完成后,发起调用的应用会失去设备所有者或资料所有者权限,因为这些权限会转移到 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 functiong 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);
您可以选择使用 NotificationReceiverService
设置 DpcMigrationListener
,以监听 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 会假定政策中配置的任何 Wi-Fi 网络在设备上配置的 Wi-Fi 网络具有相同 SSID 和安全类型,与匹配的已配置 Wi-Fi 网络完全相同。因此,自定义 DPC 配置的 Wi-Fi 网络在迁移后不会受到影响,直到与网络对应的 ONC 政策发生变化。不过,如果在迁移后卸载自定义 DPC,则自定义 DPC 配置的 Wi-Fi 网络会自动移除。Android Device Policy 会继续强制执行政策,如果政策中配置了这些网络中的任何网络,则政策中配置的网络会照常添加。
个人设备上的工作资料
由于技术原因,Android Device Policy 的自定义 DPC 移除由自定义 DPC 配置的 Wi-Fi 网络才能开始管理这些 Wi-Fi 网络。AMAPI SDK 会负责处理此问题,在将所有权从自定义 DPC 转移至 Android Device Policy 之前移除此类 Wi-Fi 网络,但自定义 DPC 需要在 DpcMigrationRequest
中传递有关这些网络的信息。迁移后,在政策中配置的网络将正常添加,因此建议也在政策中配置自定义 DPC 添加的网络。
需要注意以下几点:
- 如果活动网络是自定义 DPC 配置的 Wi-Fi 网络,则设备在迁移过程中可能会短暂离线。
- 只有自定义 DPC 配置的 Wi-Fi 网络才应在
DpcMigrationRequest
中传递,否则,如果 AMAPI SDK 无法移除网络(例如,用户添加的 Wi-Fi 网络),迁移会失败。 - 仅当自定义 DPC 是个人拥有设备上的资料所有者时,才应在
DpcMigrationRequest
中传递 Wi-Fi 网络,否则迁移会失败。 - 由于技术原因,Android 12 是一个特殊情况,其中
DpcMigrationRequest
中传递的网络会被忽略,并且自定义 DPC 配置的所有 Wi-Fi 网络都会被自动移除。此外,自定义 DPC 必须在 Android 12 上对个人拥有的设备上的工作资料拥有ACCESS_WIFI_STATE
权限,否则迁移会失败。
注意事项
以下是与此功能相关的一些注意事项。
企业专用 ID
对于搭载 Android 12 及更高版本的工作资料,可通过 DevicePolicyManager.getEnrollmentSpecificId
访问的企业专用 ID 在迁移时不会发生变化。不过,如果在设备上再次创建由 Android Device Policy 管理的工作资料(例如,删除之前的工作资料或将设备恢复出厂设置后),则企业专用 ID 将会随之更改。
完全托管设备中的工作资料
工作资料搭载 Android 9 或 10 的全代管式设备不支持此功能。不得尝试迁移这些设备,并且无论是否引发错误,DPC 迁移都不支持此类设备。