Có hai loại chính về danh tính người dùng cho quá trình đăng ký Android Enterprise: Tài khoản Managed Google Play và Tài khoản Google được quản lý. Tài khoản Managed Google Play tập trung vào thiết bị, nghĩa là không liên kết với danh tính Google của một người dùng cụ thể. Ngược lại, Tài khoản Google được quản lý được liên kết với danh tính Google của người dùng trong công ty, giúp cải thiện trải nghiệm người dùng bằng cách duy trì trạng thái đăng nhập trên thiết bị của họ.
Tài khoản Managed Google Play từng là tài khoản tiêu chuẩn. Tuy nhiên, hiện tại, Google khuyến khích tất cả các hoạt động phát triển mới sử dụng quy trình đăng ký cải tiến, quy trình này mặc định tạo Tài khoản Google được quản lý.
Mặc dù hướng dẫn về cách triển khai cũ hơn được cung cấp ở cuối tài liệu này để làm rõ bối cảnh, nhưng tất cả các hoạt động phát triển mới đều phải tuân theo quy trình đăng ký mới được trình bày chi tiết tại đây.
Tổng quan
Quy trình đăng ký thiết bị cải tiến giúp đơn giản hoá quá trình thiết lập thiết bị bằng cách tận dụng một số thành phần mới và thay đổi cách triển khai Bộ điều khiển chính sách thiết bị (DPC) tuỳ chỉnh. Phương pháp mới này yêu cầu các giải pháp DPC tuỳ chỉnh tích hợp với SDK Android Management API (AMAPI) và Android Device Policy để thực hiện các chức năng chuẩn bị thiết bị và đăng ký người dùng.
SDK AMAPI cung cấp các API cần thiết để tương tác với Android Device Policy trên chính thiết bị. Về phía máy chủ, các giải pháp Quản lý di động dành cho doanh nghiệp (EMM) sẽ sử dụng Play EMM API để tạo mã đăng ký cần thiết nhằm bắt đầu quy trình đăng ký thiết bị.
Ứng dụng Android Device Policy hiện đóng vai trò trung tâm trong việc xử lý các hoạt động ở phía thiết bị. SDK AMAPI được dùng để quản lý quá trình cài đặt và các bản cập nhật cần thiết trên thiết bị. Android Device Policy cũng tiếp quản quy trình xác thực người dùng, xử lý trực tiếp quá trình xác thực người dùng và cung cấp danh tính của người dùng cho EMM. Nếu Google không thể xác thực người dùng vì bất kỳ lý do nào, thì một tài khoản Managed Google Play mới sẽ được tạo và thêm vào thiết bị làm phương án dự phòng.
Một phần quan trọng của quy trình đăng ký mới này là quản lý quyền truy cập của thiết bị vào các dịch vụ của Google. Theo mặc định, các thiết bị bắt đầu ở trạng thái bị hạn chế và EMM đóng vai trò quan trọng trong việc bật quyền truy cập sau khi thiết bị tuân thủ.
Tích hợp API
Trước khi bắt đầu, hãy xác minh rằng bạn đang sử dụng phiên bản mới nhất của ứng dụng Play EMM API và SDK AMAPI.
Hướng dẫn triển khai quy trình đăng ký
Hướng dẫn này cung cấp các bước cần thiết để triển khai quy trình đăng ký. Hướng dẫn này trình bày cách chuẩn bị môi trường, xử lý các phương thức đăng ký khác nhau và quản lý vòng đời của thiết bị.
Chuẩn bị môi trường
Trước khi bắt đầu thiết lập tài khoản, bạn cần chuẩn bị môi trường thiết bị. Việc chuẩn bị này bao gồm cập nhật Cửa hàng Play lên phiên bản mới nhất và cài đặt Android Device Policy (com.google.android.apps.work.clouddpc) một cách âm thầm trên thiết bị. Việc cài đặt Android Device Policy là rất quan trọng vì ứng dụng này chứa các thành phần quan trọng của quy trình Thiết lập tài khoản. EMM không cần thực hiện quá trình chuẩn bị môi trường theo cách thủ công. Thay vào đó, họ
nên sử dụng
EnvironmentClient,
như được ghi lại tại và tuân thủ các ví dụ về mã được cung cấp.
Mã mẫu
Trước khi có thể sử dụng AccountSetup API để thêm tài khoản công việc trên thiết bị, DPC phải xác minh trước rằng môi trường thiết bị đã sẵn sàng.
Sử dụng
EnvironmentClientFactoryđể tạo thực thểEnvironmentClientvà gọiprepareEnvironmenthoặcprepareEnvironmentAsyncval notificationReceiverServiceName = ComponentName(context, NotificationReceiver::class.java) // An EMM should implement android.app.admin.DeviceAdminReceiver and use that // class to instantiate a ComponentName val admin = ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java) EnvironmentClientFactory.create(context) .prepareEnvironment( PrepareEnvironmentRequest.builder() .setRoles( listOf( Role.builder().setRoleType( Role.RoleType.DEVICE_POLICY_CONTROLLER ).build() ) ) .setAdmin(admin) .build(), notificationReceiverServiceName, ) [Proceed with AccountSetup]
Thao tác này có thể mất vài giây hoặc vài phút, vì các ứng dụng có thể được cài đặt hoặc cập nhật để xác minh môi trường hoạt động phù hợp. Google khuyên bạn nên bắt đầu quy trình này càng sớm càng tốt ở chế độ nền và hiển thị giao diện người dùng thích hợp trong khi người dùng chờ. Khi thao tác hoàn tất, thiết bị đã sẵn sàng để DPC sử dụng AccountSetup API.
Quy trình đăng ký
EMM phải ngừng sử dụng users.generateAuthenticationToken() và users.insert() cho tất cả các thiết bị. Thay vào đó, EMM phải gọi API
trên thiết bị
để thực hiện quá trình xác thực người dùng cuối. API mới sẽ trả về userId và email cho trình kiểm soát chính sách thiết bị (DPC). Nếu Google không thể xác thực người dùng, thì một Tài khoản Managed Google Play sẽ được tạo và thêm vào thiết bị. Trong trường hợp này, Google sẽ trả về userId của tài khoản đó.
Google hiện giới thiệu việc sử dụng mã đăng ký. Bạn phải truyền mã này đến API xác thực. EMM xác định thời điểm và cách tạo mã thông báo. Mã này có thể là một phần của tải trọng đăng ký hiện có (ví dụ: mã QR hoặc cấu hình Zero-touch).
Tuy nhiên, Google khuyên bạn nên tạo mã thông báo theo yêu cầu và thay thế API hiện có cho Tài khoản Managed Google Play bằng API mới để giảm thiểu thay đổi.
Quy trình đăng ký DPC tuỳ chỉnh cải tiến bao gồm các bước sau:
Trạng thái thiết bị ban đầu quan trọng: Khi đăng ký một thiết bị bằng DPC tuỳ chỉnh, Tài khoản Google được thêm vào thiết bị sẽ bắt đầu ở trạng thái đã tắt. Điều này có nghĩa là quyền truy cập vào các dịch vụ của Google, bao gồm cả Google Play, ban đầu bị hạn chế.
Trạng thái "đã tắt" mặc định này và yêu cầu tiếp theo để EMM đánh dấu thiết bị là tuân thủ (ví dụ: bằng cách gọi Devices.SetState) được áp dụng cụ thể trong các điều kiện sau:
- Tổ chức đã xác minh quyền sở hữu miền của họ với Google.
- Quản trị viên CNTT đã bật tính năng quản lý thiết bị di động Android của bên thứ ba một cách rõ ràng cho Đơn vị tổ chức (OU) cụ thể của người dùng trong Bảng điều khiển dành cho quản trị viên của Google.
- Tạo mã đăng ký: EMM tạo mã đăng ký bằng Play EMM API.
- Chuẩn bị môi trường: DPC tuỳ chỉnh sử dụng quy trình Chuẩn bị môi trường để xác minh rằng thiết bị đã sẵn sàng cho quá trình đăng ký.
- Bắt đầu đăng ký: DPC tuỳ chỉnh gọi
startAccountSetupAPI trong SDK AMAPI, truyền mã đăng ký. Lưu ý: Trình kiểm soát chính sách thiết bị (DPC) phải là chủ sở hữu thiết bị hoặc chủ sở hữu hồ sơ trước khi gọi API này. - Khởi chạy hoạt động xác thực của Google: Nếu cần, DPC tuỳ chỉnh
gọi API
launchAuthenticationActivitytrong SDK AMAPI, truyềnAccountSetupAttempt. Thao tác này sẽ bắt đầu một hoạt động xác thực của Google, trả người dùng về DPC tuỳ chỉnh sau khi xác thực thành công. Người dùng cũng có thể bỏ qua quy trình này. Trong trường hợp này, một tài khoản Managed Google Play sẽ được thêm vào thiết bị. Bạn có thể định cấu hình tuỳ chọn này bằng cách sử dụnggoogleAuthenticationOptions. - Hoàn tất quá trình đăng ký: SDK AMAPI thông báo cho DPC tuỳ chỉnh về kết quả đăng ký.
Bật các dịch vụ của Google: Sau khi DPC tuỳ chỉnh đã cung cấp đầy đủ thiết bị và xác nhận rằng thiết bị tuân thủ tất cả chính sách của doanh nghiệp, máy chủ EMM phải gọi
Devices.setState()với tham sốaccountStateđược đặt thành"enabled".- Tại sao điều này lại quan trọng: Lệnh gọi API này đánh dấu thiết bị là tuân thủ.
- Hậu quả của việc không gọi: Nếu không có lệnh gọi
Devices.setState(setStateRequest)này, tài khoản sẽ vẫn ở trạng thái "đã tắt". Người dùng sẽ không thể truy cập vào Google Play (để cài đặt hoặc cập nhật ứng dụng) và các dịch vụ khác của Google yêu cầu xác thực tài khoản.
Quản lý trạng thái thiết bị và quyền truy cập dịch vụ
Sau lần đăng ký ban đầu, EMM chịu trách nhiệm duy trì quyền truy cập của thiết bị vào các dịch vụ của Google dựa trên trạng thái tuân thủ của thiết bị.
Xử lý tình trạng gián đoạn dịch vụ: BAD_DEVICE_MANAGEMENT
Nếu quyền truy cập của thiết bị vào các dịch vụ của Google bị chặn, thì Dịch vụ Google Play (GMSCore) sẽ phát một Ý định có hành động: com.google.android.gms.auth.BAD_DEVICE_MANAGEMENT. Điều này có thể xảy ra vì một vài lý do:
- EMM chưa bao giờ gọi Devices.setState("enabled") sau lần đăng ký thiết bị ban đầu.
- Thiết bị không còn tuân thủ chính sách EMM và EMM chưa bật lại thiết bị.
- EMM đã đặt trạng thái thiết bị thành "đã tắt" một cách rõ ràng bằng cách gọi Devices.setState() với accountState được đặt thành "đã tắt". Điều này có thể là do lo ngại về vấn đề bảo mật, các hành động quản trị hoặc các lý do khác.
Ý định này bao gồm một mã trạng thái, chẳng hạn như "ThirdPartyDeviceManagementRequired".
DPC tuỳ chỉnh PHẢI triển khai một BroadcastReceiver trình nghe để theo dõi Ý định BAD_DEVICE_MANAGEMENT này.
Khi nhận được thông báo này, trình kiểm soát chính sách thiết bị (DPC) sẽ:
- Đánh giá lại mức độ tuân thủ: Kiểm tra xem thiết bị hiện có đáp ứng tất cả chính sách do EMM đặt ra hay không.
- Hành động:
- Nếu tuân thủ: DPC phải thông báo cho máy chủ EMM. Sau đó, máy chủ EMM phải gọi
Devices.setState()vớiaccountStateđược đặt thành"enabled"cho mã thiết bị và mã người dùng cụ thể để cố gắng khôi phục quyền truy cập dịch vụ. - Nếu không tuân thủ: Sau khi các vấn đề được giải quyết và thiết bị tuân thủ, EMM sẽ gọi
Devices.setState().
- Nếu tuân thủ: DPC phải thông báo cho máy chủ EMM. Sau đó, máy chủ EMM phải gọi
Cơ chế này đảm bảo rằng có một cách để phát hiện và khôi phục các trường hợp thiết bị mất quyền truy cập vào các dịch vụ của Google.
Những điểm cần cân nhắc khi tiếp quản doanh nghiệp
Có thể xảy ra các thay đổi về loại tài khoản của tổ chức (ví dụ: từ ManagedGoogleDomainType.TYPE_TEAM thành ManagedGoogleDomainType.TYPE_DOMAIN). Mặc dù quy trình này thường không làm hỏng liên kết EMM, nhưng đôi khi có thể làm gián đoạn quyền truy cập vào dịch vụ của Google trên các thiết bị.
EMM cần lưu ý rằng nếu người dùng báo cáo các vấn đề về quyền truy cập dịch vụ sau một sự kiện tiếp quản đã biết, ngay cả khi thiết bị có vẻ tuân thủ chính sách EMM, thì có thể cần gọi Devices.setState() để đồng bộ hoá lại trạng thái của thiết bị với các phần phụ trợ của Google theo cấu trúc khách hàng mới. Thông thường, bạn không cần chủ động gọi cho tất cả các thiết bị sau khi tiếp quản, nhưng đây là một công cụ quan trọng để giải quyết các vấn đề về quyền truy cập.
Thiết lập tài khoản – mã mẫu
Để bắt đầu một lần thiết lập tài khoản, ứng dụng gọi điện có thể sử dụng
AccountSetupClientvà gọi phương thứcstartAccountSetup()hoặcstartAccountSetupFuture(). Để biết ví dụ về cách triển khai, hãy xem mẫu mã sau:// Create AccountSetupClient val client = AccountSetupClientFactory.create( this, activityResultRegistry ) lifecycle.addObserver(client.lifecycleObserver) // Create adminComponent val notificationReceiver = ComponentName(this, AccountSetupNotificationReceiver::class.java) // Helper method to get enrollment token created with Play EMM API val enrollmentToken = getEnrollmentToken() val request = StartAccountSetupRequest.builder() .setEnrollmentToken(enteredText) .setNotificationReceiverServiceComponentName(notificationReceiver) .setAdminComponentName( ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java)) .build() try { val accountSetupAttempt = client.startAccountSetup(request) // handle attempt } catch (e: Exception) { // handle exception }Triển khai
AccountSetupListenergiao diện và cung cấp một cách triển khai để xử lý các bản cập nhật trạng thái đã nhận.Mở rộng
NotificationReceiverServicevà cung cấp thực thểAccountSetupListenerđược tạo ở bước 2 bằng cách ghi đègetAccountSetupListener().// Handles account setup changes class AccountSetupNotificationReceiver : NotificationReceiverService(), AccountSetupListener { override fun getAccountSetupListener(): AccountSetupListener = this override fun onAccountSetupChanged(accountSetupAttempt: AccountSetupAttempt) { when (accountSetupAttempt.state.kind) { StateCase.ADDED_ACCOUNT -> { val enterpriseAccount = state.addedAccount() val userId = enterpriseAccount.userId val deviceId = enterpriseAccount.deviceId // Handle account added state. // IMPORTANT: The device/account is now added but *DISABLED* // for Google services. Your EMM backend MUST be notified to // perform policy compliance checks and then call Devices.setState() // to activate Google Play and other services. } StateCase.AUTHENTICATION_ACTIVITY_LAUNCH_REQUIRED -> { val request = LaunchAuthenticationActivityRequest.builder() .setAccountSetupAttempt(accountSetupAttempt) .build(); // Send the attempt to the foreground activity to call: accountSetupClient.launchAuthenticationActivity(request) } StateCase.ACCOUNT_SETUP_ERROR -> { // Handle error state. val failureReason = state.accountSetupError().failureReason } else -> { // Handle unknown account setup attempt state. } } } }Thêm lớp mở rộng
NotificationReceiverServicevàoAndroidManifest.xmlvà xác minh rằng lớp này được xuất.<application> <service android:name = ".accountsetup.AccountSetupNotificationReceiver" android:exported = "true" /> </application>Nếu ứng dụng của bạn nhắm đến SDK 30 trở lên, thì bạn cần có một phần tử truy vấn trong
AndroidManifest.xmlđể chỉ định rằng ứng dụng sẽ tương tác với ADP.<queries> <package android:name="com.google.android.apps.work.clouddpc" /> </queries>
Hướng dẫn kiểm thử
Phần này cung cấp một tập hợp các nguyên tắc và phương pháp hay nhất để kiểm thử quá trình triển khai.
Kiểm thử PrepareEnvironment
Lấy trạng thái hiện tại của Thiết bị: EMM chạy
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameđể lấy phiên bản Android Device Policy có trên thiết bị. Nếu Android Device Policy chưa được cài đặt, thì bạn sẽ nhận được một đầu ra trống.
Tích hợp PrepareEnvironment: DPC tuỳ chỉnh gọi
prepareEnvironmentAPI trong SDK AMAPI, truyền yêu cầu chính xác.Chờ kết quả PrepareEnvironment: DPC tuỳ chỉnh chờ
prepareEnvironmenthoàn tất.Xác nhận thành công PrepareEnvironment: Khi hoàn tất, EMM sẽ chạy lại
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameLần này, phiên bản Android Device Policy phải cao hơn ở bước 1.
Kiểm thử quy trình xác thực Tài khoản Google
- Tạo doanh nghiệp kiểm thử: EMM tạo một miền kiểm thử doanh nghiệp Google
được liên kết với một EMM kiểm thử, bằng
enterprises.generateSignupUrl. - Bật tính năng xác thực của Google: EMM bật tính năng xác thực của Google cho doanh nghiệp kiểm thử theo các hướng dẫn này trong Bảng điều khiển dành cho quản trị viên của Google.
- Tạo mã đăng ký: EMM tạo mã đăng ký bằng Play EMM API có loại userDevice.
- Bắt đầu đăng ký: DPC tuỳ chỉnh gọi
startAccountSetupAPI trong SDK AMAPI, truyền mã đăng ký. - Khởi chạy hoạt động bắt buộc: SDK AMAPI thông báo cho DPC tuỳ chỉnh rằng một hoạt động phải được khởi chạy để xác thực người dùng.
- Xác thực người dùng: DPC tuỳ chỉnh gọi
launchAuthenticationActivityđể bắt đầu hoạt động. Người dùng xác thực bằng Tài khoản Google được quản lý (một phần của doanh nghiệp được tạo ở bước 1). - Hoàn tất quá trình đăng ký: SDK AMAPI thông báo cho DPC tuỳ chỉnh về kết quả đăng ký.
Kiểm thử việc bỏ qua quy trình xác thực của Google
Chúng ta sẽ sử dụng quy trình thiết lập đã mô tả trước đó.
Lần này, ở bước 7, người dùng nhấn vào Bỏ qua thay vì xác thực bằng Tài khoản Google của họ. Quá trình đăng ký hoàn tất thành công, với một tài khoản dịch vụ trên thiết bị (tức là
AuthenticationType
là Anonymous).
Kiểm thử thiết bị không có người dùng
Quy trình đăng ký DPC tuỳ chỉnh cải tiến sử dụng các bước sau khi tắt tính năng xác thực của Google:
- Tạo một doanh nghiệp kiểm thử: Đây có thể là doanh nghiệp giống như doanh nghiệp đã tạo trước đó.
- Tạo mã đăng ký: EMM tạo một mã đăng ký bằng Play EMM API có loại userlessDevice.
- Bắt đầu đăng ký: DPC tuỳ chỉnh gọi
startAccountSetupAPI trong SDK AMAPI, truyền mã đăng ký. - Hoàn tất quá trình đăng ký: SDK AMAPI thông báo cho DPC tuỳ chỉnh về kết quả đăng ký.