Tính năng mới dành cho doanh nghiệp trên Android 10

Trang này cung cấp thông tin tổng quan về các API, tính năng và thay đổi về hành vi mới dành cho doanh nghiệp được ra mắt trên Android 10.

Hồ sơ công việc cho thiết bị do công ty sở hữu

Android 10 giới thiệu các tính năng mới về việc cung cấp và chứng thực cho thiết bị thuộc sở hữu của công ty mà chỉ yêu cầu hồ sơ công việc.

Cải thiện các công cụ cung cấp cho hồ sơ công việc

Bạn có thể cung cấp hồ sơ công việc trên các thiết bị Android 10 trở lên đã đăng ký bằng mã QR hoặc Zero touch. Trong quá trình cung cấp thiết bị do công ty sở hữu, một phần bổ sung ý định mới cho phép các ứng dụng bộ điều khiển chính sách thiết bị (DPC) bắt đầu thiết lập hồ sơ công việc hoặc chế độ được quản lý hoàn toàn. Sau khi hồ sơ công việc được tạo hoặc chế độ quản lý hoàn toàn được thiết lập, DPC phải khởi chạy màn hình tuân thủ chính sách để thực thi mọi chính sách ban đầu.

Trong tệp kê khai của DPC, hãy khai báo một bộ lọc ý định mới cho GET_PROVISIONING_MODE trong một hoạt động và thêm quyền BIND_DEVICE_ADMIN để ngăn các ứng dụng tuỳ ý khởi động hoạt động. Ví dụ:

<activity
    android:name=".GetProvisioningModeActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action
            android:name="android.app.action.GET_PROVISIONING_MODE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Trong quá trình cung cấp, hệ thống sẽ khởi chạy hoạt động được liên kết với bộ lọc ý định. Mục đích của hoạt động này là chỉ định một chế độ quản lý (hồ sơ công việc hoặc được quản lý hoàn toàn).

Bạn nên truy xuất các tiện ích bổ sung về việc cung cấp trước khi xác định chế độ quản lý phù hợp cho thiết bị. Hoạt động có thể gọi getIntent() để truy xuất những thông tin sau:

DPC cũng có thể tạo một ý định kết quả mới và thêm các phần bổ sung sau vào đó:

Để đặt chế độ quản lý trên thiết bị, hãy gọi putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), trong đó desiredProvisioningMode là:

  • Hồ sơ công việc: PROVISIONING_MODE_MANAGED_PROFILE
  • Được quản lý hoàn toàn: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

Hoàn tất quá trình thiết lập hồ sơ công việc hoặc thiết bị được quản lý hoàn toàn bằng cách gửi thông tin thiết lập trở lại quá trình thiết lập thông qua setResult(RESULT_OK, Intent) và đóng tất cả các màn hình đang hoạt động bằng finish().

Sau khi quá trình cung cấp hoàn tất, DPC sẽ có một Intent mới để chạy màn hình tuân thủ và thực thi các chế độ cài đặt chính sách ban đầu. Trên các thiết bị có hồ sơ công việc, màn hình tuân thủ sẽ xuất hiện trong hồ sơ công việc. DPC của bạn phải đảm bảo rằng người dùng nhìn thấy các màn hình tuân thủ, ngay cả khi người dùng thoát khỏi quy trình thiết lập.

Trong tệp kê khai của DPC, hãy khai báo một bộ lọc ý định mới cho ADMIN_POLICY_COMPLIANCE trong một hoạt động và thêm quyền BIND_DEVICE_ADMIN để ngăn các ứng dụng tuỳ ý khởi động hoạt động. Ví dụ:

<activity
    android:name=".PolicyComplianceActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

DPC của bạn phải sử dụng Intent mới này thay vì theo dõi thông báo truyền tin ACTION_PROFILE_PROVISIONING_COMPLETE.

Hoạt động được liên kết với bộ lọc ý định có thể gọi getIntent() để truy xuất EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE. Sau khi thực hiện việc tuân thủ chính sách, ADMIN_POLICY_COMPLIANCE phải trả về setResult(RESULT_OK, Intent) và đóng tất cả các màn hình đang hoạt động bằng finish().

Thiết bị do công ty quản lý hoàn toàn sẽ đưa người dùng trở lại màn hình chính. Các thiết bị có hồ sơ công việc sẽ nhắc người dùng thêm tài khoản cá nhân trước khi đưa họ trở lại màn hình chính.

Chứng thực mã thiết bị của hồ sơ công việc

DPC được đặt làm quản trị viên của một hồ sơ công việc được cung cấp bằng tính năng thiết lập tự động có thể nhận được mã thiết bị được chứng thực bằng phần cứng bảo mật, chẳng hạn như số IMEI hoặc số sê-ri của nhà sản xuất. Thiết bị phải có phần cứng bảo mật (chẳng hạn như môi trường thực thi đáng tin cậy (TEE) hoặc Secure Element (SE)) và hỗ trợ chứng thực mã nhận dạng thiết bị cũng như thiết lập tự động.

Thành phần quản trị của hồ sơ công việc có thể gọi DevicePolicyManager.generateKeyPair(), truyền một hoặc nhiều ID_TYPE_SERIAL, ID_TYPE_IMEI hoặc ID_TYPE_MEID cho đối số idAttestationFlags.

Để tìm hiểu thêm về cách trích xuất và xác thực mã nhận dạng thiết bị, hãy xem phần Xác minh cặp khoá dựa trên phần cứng bằng chứng thực khoá.

Các điểm cải tiến về hồ sơ công việc

Các API mới có sẵn để hỗ trợ chế độ hiển thị lịch trên nhiều hồ sơ và chặn cài đặt ứng dụng không rõ nguồn gốc trên toàn bộ thiết bị.

Hồ sơ công việc, nguồn không xác định trên toàn thiết bị

Ứng dụng được tải xuống từ các nguồn không phải Google Play (hoặc các cửa hàng ứng dụng đáng tin cậy khác) được gọi là ứng dụng không rõ nguồn gốc. Trong Android 10, quản trị viên của hồ sơ công việc có thể ngăn mọi người dùng hoặc hồ sơ cài đặt ứng dụng không rõ nguồn gốc ở bất kỳ đâu trên thiết bị bằng cách thêm quy tắc hạn chế người dùng mới DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. Tuy nhiên, sau khi thêm chế độ hạn chế này, người dùng thiết bị vẫn có thể cài đặt ứng dụng bằng adb.

Để ngăn người dùng vô tình cài đặt ứng dụng từ các nguồn không xác định, bạn nên thêm chế độ hạn chế người dùng này vì chế độ này không yêu cầu cài đặt các dịch vụ của Google Play. Nếu muốn hỗ trợ các phiên bản Android cũ, bạn có thể đặt giá trị cấu hình được quản lý cho Google Play.

Giới hạn các thiết bị đầu vào được phép đối với hồ sơ công việc

Khi quản trị viên của hồ sơ công việc gọi DevicePolicyManager.setPermittedInputMethods(), người dùng chỉ bị hạn chế sử dụng các phương thức nhập được cho phép trong hồ sơ công việc thay vì toàn bộ thiết bị, nhờ đó, người dùng có toàn quyền kiểm soát các phương thức nhập trên phần cá nhân của thiết bị.

Xoá sạch hồ sơ công việc mà không có thông báo

Thêm cờ WIPE_SILENTLY vào DevicePolicyManager.wipeData(). Nếu bạn đặt cờ này, người dùng sẽ không nhận được thông báo sau khi hồ sơ công việc của họ bị xoá bằng wipeData().

Các tính năng mới dành cho thiết bị được quản lý hoàn toàn

Android 10 giới thiệu các tính năng và API mới cho thiết bị được quản lý hoàn toàn, bao gồm cả bản cập nhật hệ thống theo cách thủ công, mở rộng việc cung cấp bằng mã QR và NFC để bao gồm thông tin đăng nhập cho mạng Wi-Fi EAP và hỗ trợ DNS qua TLS.

Cài đặt bản cập nhật hệ thống theo cách thủ công

Trong Android 10, quản trị viên của các thiết bị được quản lý hoàn toàn có thể cài đặt bản cập nhật hệ thống thông qua tệp cập nhật hệ thống. Các bản cập nhật hệ thống theo cách thủ công cho phép quản trị viên CNTT làm những việc sau:

  • Thử nghiệm bản cập nhật trên một số ít thiết bị trước khi cài đặt rộng rãi.
  • Tránh tải xuống trùng lặp trên các mạng bị giới hạn băng thông.
  • Cài đặt theo giai đoạn hoặc chỉ cập nhật thiết bị khi không sử dụng.

Trước tiên, quản trị viên CNTT sẽ đặt chính sách cập nhật hệ thống bị hoãn để trì hoãn quá trình cài đặt tự động (nếu cần). Tiếp theo, DPC của thiết bị sẽ gọi installSystemUpdate() bằng đường dẫn đến tệp bản cập nhật hệ thống của nhà sản xuất thiết bị. Truyền một đối tượng InstallSystemUpdateCallback mà hệ thống có thể dùng để báo cáo các lỗi xảy ra trước khi thiết bị khởi động lại. Nếu xảy ra lỗi, hệ thống sẽ gọi onInstallUpdateError() bằng mã lỗi.

Sau khi thiết bị khởi động lại, DPC của bạn cần xác nhận quá trình cài đặt thành công bằng cách sử dụng một API phiên bản, chẳng hạn như Build.FINGERPRINT. Nếu quá trình cập nhật không thành công, hãy báo cáo lỗi này cho quản trị viên CNTT.

Cung cấp Wi-Fi EAP

Trong Android 10, mã QR và dữ liệu NFC dùng để cấp phép thiết bị có thể chứa cấu hình và thông tin xác thực EAP (bao gồm cả chứng chỉ). Khi một người quét mã QR hoặc nhấn vào thẻ NFC, thiết bị sẽ tự động xác thực với mạng Wi-Fi cục bộ bằng EAP và bắt đầu quy trình cung cấp mà không cần thêm bất kỳ thông tin đầu vào thủ công nào.

Để xác thực Wi-Fi bằng EAP, hãy thêm một EXTRA_PROVISIONING_WIFI_SECURITY_TYPE bổ sung có giá trị "EAP". Để chỉ định phương thức xác thực EAP, bạn có thể thêm các tiện ích bổ sung sau đây vào ý định của mình:

Hỗ trợ DNS riêng

Các tổ chức có thể sử dụng DNS qua TLS (gọi là DNS riêng trên thiết bị Android) để tránh rò rỉ các truy vấn DNS, bao gồm cả các truy vấn về tên máy chủ nội bộ. Các thành phần quản trị của thiết bị do công ty quản lý hoàn toàn có thể kiểm soát chế độ cài đặt DNS riêng tư của thiết bị. Để đặt chế độ DNS riêng, hãy gọi:

Khi DPC gọi một trong hai phương thức này, hệ thống sẽ trả về PRIVATE_DNS_SET_NO_ERROR nếu lệnh gọi thành công. Nếu không, hàm này sẽ trả về một lỗi.

Để truy xuất chế độ DNS riêng và máy chủ được đặt trên thiết bị, hãy gọi getGlobalPrivateDnsMode()getGlobalPrivateDnsHost(). Bạn có thể ngăn người dùng thay đổi chế độ cài đặt DNS riêng bằng cách thêm chế độ hạn chế người dùng DISALLOW_CONFIG_PRIVATE_DNS.

Trường hợp ngoại lệ đối với chế độ khoá VPN

Chế độ khoá VPN cho phép DPC chặn mọi lưu lượng truy cập mạng không sử dụng VPN. Quản trị viên của các thiết bị được quản lý hoàn toàn và hồ sơ công việc có thể miễn trừ các ứng dụng khỏi chế độ khoá. Theo mặc định, các ứng dụng được miễn trừ sẽ sử dụng VPN, nhưng tự động kết nối với các mạng khác nếu VPN không hoạt động. Những ứng dụng được miễn trừ và cũng bị từ chối rõ ràng quyền truy cập vào VPN sẽ chỉ sử dụng các mạng khác.

Để miễn trừ một ứng dụng khỏi chế độ khoá, hãy gọi phương thức DevicePolicyManager mới setAlwaysOnVpnPackage() chấp nhận danh sách các gói ứng dụng được miễn trừ. Mọi gói ứng dụng mà DPC thêm đều phải được cài đặt trên thiết bị khi phương thức này được gọi. Nếu bị gỡ cài đặt rồi cài đặt lại, thì ứng dụng phải được miễn trừ một lần nữa. Để lấy các ứng dụng được miễn trừ khỏi chế độ khoá trước đây, hãy gọi getAlwaysOnVpnLockdownWhitelist().

Để giúp quản trị viên của các thiết bị được quản lý hoàn toàn và hồ sơ công việc nhận được trạng thái chế độ khoá, Android 10 bổ sung phương thức isAlwaysOnVpnLockdownEnabled().

Phạm vi uỷ quyền mới

Android 10 mở rộng danh sách các chức năng mà DPC có thể uỷ quyền cho các ứng dụng khác chuyên biệt hơn. Android nhóm các phương thức API cần thiết cho một tác vụ vào các phạm vi. Để uỷ quyền một phạm vi, hãy gọi setDelegatedScopes() và truyền một hoặc nhiều phạm vi sau:

Android 10 giới thiệu lớp mới DelegatedAdminReceiver cho các ứng dụng uỷ quyền. Hệ thống sử dụng bộ nhận tín hiệu truyền tin này để gửi các lệnh gọi lại tương tự như trình kiểm soát chính sách thiết bị (DPC) đến các ứng dụng uỷ quyền. Những ứng dụng đã được uỷ quyền ghi nhật ký hoạt động mạng và lựa chọn chứng chỉ phải triển khai lớp này. Để thêm thành phần này vào một ứng dụng uỷ quyền, hãy làm theo các bước sau:

  1. Thêm một lớp con của DelegatedAdminReceiver vào ứng dụng uỷ quyền.
  2. Khai báo <receiver> trong tệp kê khai ứng dụng, thêm một thao tác intent-filter cho mỗi lệnh gọi lại. Ví dụ: ACTION_NETWORK_LOGS_AVAILABLE hoặc ACTION_CHOOSE_PRIVATE_KEY_ALIAS.
  3. Bảo vệ bộ nhận tín hiệu truyền tin bằng quyền BIND_DEVICE_ADMIN.

Đoạn mã sau đây cho thấy tệp kê khai ứng dụng của một ứng dụng uỷ quyền duy nhất xử lý cả hoạt động ghi nhật ký mạng và lựa chọn chứng chỉ:

<receiver android:name=".app.DelegatedAdminReceiver"
        android:permission="android.permission.BIND_DELEGATED_ADMIN">
    <intent-filter>
        <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
        <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
    </intent-filter>
    </receiver>

Ghi nhật ký hoạt động mạng

Để giúp các tổ chức phát hiện và theo dõi phần mềm độc hại, DPC có thể ghi nhật ký các kết nối TCP và tra cứu DNS bằng hệ thống. Trong Android 10, quản trị viên của các thiết bị được quản lý hoàn toàn có thể uỷ quyền ghi nhật ký mạng cho một ứng dụng chuyên dụng.

Để truy xuất nhật ký mạng sau khi hệ thống cung cấp một lô, trước tiên, các ứng dụng uỷ quyền phải phân lớp con DelegatedAdminReceiver (được mô tả trước đó). Trong lớp con, hãy triển khai lệnh gọi lại onNetworkLogsAvailable() bằng cách làm theo hướng dẫn trong phần Truy xuất nhật ký.

Các ứng dụng uỷ quyền có thể gọi các phương thức DevicePolicyManager sau đây (truyền null cho đối số admin):

Để tránh mất nhật ký, DPC không nên bật tính năng ghi nhật ký mạng nếu dự định uỷ quyền cho một ứng dụng khác. Ứng dụng được uỷ quyền sẽ bật và thu thập nhật ký mạng. Sau khi DPC uỷ quyền ghi nhật ký mạng, DPC sẽ không nhận được bất kỳ lệnh gọi lại onNetworkLogsAvailable() nào khác.

Để tìm hiểu cách báo cáo nhật ký hoạt động mạng từ một ứng dụng uỷ quyền, hãy đọc hướng dẫn dành cho nhà phát triển Ghi nhật ký hoạt động mạng.

Lựa chọn chứng chỉ

Trong Android 10, quản trị viên của các thiết bị được quản lý hoàn toàn, hồ sơ công việc và người dùng phụ có thể uỷ quyền lựa chọn chứng chỉ cho một ứng dụng chuyên biệt.

Để chọn một bí danh chứng chỉ, trước tiên, các ứng dụng uỷ quyền phải phân lớp con DelegatedAdminReceiver (được mô tả trước đó). Trong lớp con, hãy triển khai lệnh gọi lại onChoosePrivateKeyAlias() và trả về một biệt hiệu cho chứng chỉ ưu tiên hoặc để nhắc người dùng chọn một chứng chỉ, hãy trả về null.

Ngừng sử dụng các chính sách quản trị thiết bị

Android 10 ngăn các ứng dụng và DPC áp dụng các chính sách cũ của quản trị viên thiết bị. Khách hàng và đối tác nên chuyển sang thiết bị được quản lý hoàn toàn hoặc hồ sơ công việc. Các chính sách sau đây sẽ gửi một SecurityException khi được quản trị viên thiết bị nhắm đến Android 10 gọi:

Một số ứng dụng sử dụng quản trị viên thiết bị để quản trị thiết bị tiêu dùng. Ví dụ: khoá và xoá dữ liệu trên thiết bị bị mất. Để bật tính năng này, bạn vẫn có thể sử dụng các chính sách sau:

Để biết thêm thông tin về những thay đổi này, hãy đọc bài viết Ngừng sử dụng quản trị viên thiết bị.

Các tính năng mới cho ứng dụng

Các ứng dụng nhắm đến Android 10 có thể truy vấn độ phức tạp của phương thức khoá màn hình được thiết lập trên một thiết bị trước khi hiển thị dữ liệu bí mật hoặc chạy các tính năng quan trọng. Các ứng dụng gọi API KeyChain sẽ được hưởng lợi từ những điểm cải thiện về hành vi, đồng thời các tính năng mới cũng có sẵn cho ứng dụng VPN.

Kiểm tra chất lượng phương thức khoá màn hình

Kể từ Android 10, các ứng dụng có những tính năng quan trọng yêu cầu khoá màn hình có thể truy vấn độ phức tạp của khoá màn hình của thiết bị hoặc hồ sơ công việc. Những ứng dụng cần có phương thức khoá màn hình mạnh hơn có thể chuyển người dùng đến phần cài đặt khoá màn hình của hệ thống, cho phép họ cập nhật chế độ cài đặt bảo mật.

Cách kiểm tra chất lượng phương thức khoá màn hình:

Để chạy chế độ cài đặt khoá màn hình hệ thống, hãy dùng ACTION_SET_NEW_PASSWORD với EXTRA_PASSWORD_COMPLEXITY bổ sung – các lựa chọn không đáp ứng độ phức tạp được chỉ định trong phần bổ sung của ý định sẽ chuyển sang màu xám. Người dùng có thể chọn trong số các phương thức khoá màn hình hiện có hoặc thoát khỏi màn hình.

Phương pháp hay nhất: Hiển thị một thông báo trong ứng dụng trước khi chạy trang khoá màn hình hệ thống. Khi ứng dụng của bạn tiếp tục, hãy gọi lại DevicePolicyManager.getPasswordComplexity(). Nếu vẫn cần có một phương thức khoá màn hình mạnh hơn, hãy hạn chế quyền truy cập thay vì liên tục nhắc người dùng cập nhật chế độ cài đặt bảo mật.

Hỗ trợ proxy HTTP trong các ứng dụng VPN

Trong Android 10, các ứng dụng VPN có thể thiết lập một proxy HTTP cho kết nối VPN của mình. Để thêm một proxy HTTP, ứng dụng VPN phải định cấu hình một phiên bản ProxyInfo với một máy chủ lưu trữ và cổng, trước khi gọi VpnService.Builder.setHttpProxy(). Hệ thống và nhiều thư viện mạng sử dụng chế độ cài đặt proxy này nhưng hệ thống không buộc các ứng dụng phải chuyển yêu cầu HTTP qua proxy.

Để xem mã mẫu minh hoạ cách thiết lập một proxy HTTP, hãy xem ứng dụng mẫu ToyVPN.

Các chế độ dịch vụ VPN

Các ứng dụng VPN có thể phát hiện xem dịch vụ có đang chạy hay không do Vpn luôn bật và liệu chế độ khoá có đang hoạt động hay không. Các phương thức mới được thêm vào Android 10 có thể giúp bạn điều chỉnh giao diện người dùng. Ví dụ: bạn có thể tắt nút ngắt kết nối khi VPN luôn bật kiểm soát vòng đời của dịch vụ.

Các ứng dụng VPN có thể gọi các phương thức VpnService sau đây sau khi kết nối với dịch vụ và thiết lập giao diện cục bộ:

  • isAlwaysOn() để biết hệ thống có khởi động dịch vụ do VPN luôn bật hay không
  • isLockdownEnabled() để biết hệ thống có đang chặn các kết nối không sử dụng VPN hay không

Trạng thái luôn bật vẫn giữ nguyên trong khi dịch vụ của bạn đang chạy, nhưng trạng thái chế độ khoá có thể thay đổi.

Các điểm cải tiến về chuỗi khoá

Android 10 giới thiệu một số điểm cải tiến liên quan đến API KeyChain.

Khi một ứng dụng gọi KeyChain.choosePrivateKeyAlias(), các thiết bị Android 10 trở lên sẽ lọc danh sách chứng chỉ mà người dùng có thể chọn dựa trên nhà phát hành và thuật toán khoá được chỉ định trong lệnh gọi.

Ví dụ: khi máy chủ TLS gửi thông báo Certificate Request (Yêu cầu chứng chỉ) trong quá trình bắt tay TLS và trình duyệt gọi KeyChain.choosePrivateKeyAlias(), lời nhắc lựa chọn chứng chỉ sẽ chỉ bao gồm các lựa chọn khớp với tham số nhà phát hành. Nếu không có lựa chọn nào phù hợp hoặc không có chứng chỉ nào được cài đặt trên thiết bị, thì lời nhắc chọn sẽ không xuất hiện với người dùng.

Ngoài ra, KeyChain không còn yêu cầu thiết bị phải có phương thức khoá màn hình trước khi có thể nhập các khoá hoặc chứng chỉ CA.