已由自訂 DPC 管理的裝置可以遷移至 Android Device Policy (ADP),並充分運用 Android 管理 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。 - 請使用 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 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);
您可以選擇使用 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 管理的互動方式會因管理模式而異。
完全受管理的裝置和公司裝置上的 Work 設定檔
遷移期間,Android 裝置政策會假設任何在政策中設定的 Wi-Fi 網路,其 SSID 和安全性類型與裝置上已設定的 Wi-Fi 網路相同,與相符的已設定 Wi-Fi 網路相同。因此,在 ONC 政策與網路對應的情況下,透過自訂 DPC 設定的 Wi-Fi 網路在遷移後不會受到影響。不過,如果在遷移後解除安裝自訂 DPC,系統會自動移除由自訂 DPC 設定的 Wi-Fi 網路。Android Device Policy 會繼續強制執行政策,如果政策中已設定任何這些網路,系統會照常新增政策中設定的網路。
個人裝置上的工作資料夾
基於技術原因,Android Device Policy 的自訂 DPC 必須移除由自訂 DPC 設定的 Wi-Fi 網路,才能開始管理這些 Wi-Fi 網路。AMAPI SDK 會處理這項作業,並在將擁有權從自訂 DPC 轉移至 Android 裝置政策之前,移除這類 Wi-Fi 網路,但這需要自訂 DPC 在 DpcMigrationRequest
中傳遞這些網路的相關資訊。遷移完成後,系統會正常新增在政策中設定的網路,因此建議您也應在政策中設定自訂 DPC 新增的網路。
請注意以下幾點:
- 如果有效網路是透過自訂 DPC 設定的 Wi-Fi 網路,裝置可能會在遷移期間短暫離線。
DpcMigrationRequest
中只能傳遞自訂 DPC 設定的 Wi-Fi 網路,否則如果 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 遷移。