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 được ra mắt trên Android 10 dành cho doanh nghiệp.

Hồ sơ công việc cho thiết bị thuộc quyền sở hữu của công ty

Android 10 ra mắt các tính năng cấp phép và chứng thực mới dành cho các thiết bị do công ty sở hữu chỉ yêu cầu hồ sơ công việc.

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

Bạn có thể cấp phép hồ sơ công việc trên các thiết bị chạy Android 10 trở lên được đăng ký bằng mã QR hoặc thiết lập tự động. Trong quá trình cấp phép thiết bị thuộc quyền sở hữu của công ty, một ý định bổ sung mới sẽ cho phép các ứng dụng kiểm soát chính sách thiết bị (DPC) bắt đầu hồ sơ công việc hoặc quá trình thiết lập được quản lý hoàn toàn. Sau khi tạo hồ sơ công việc hoặc thiết lập quyền quản lý toàn bộ, 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 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ỳ ý bắt đầu 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 cấp phép, hệ thống sẽ 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 trước khi xác định chế độ quản lý phù hợp cho thiết bị. Hoạt động này có thể gọi getIntent() để truy xuất những nội dung sau:

DPC cũng có thể tạo một ý định kết quả mới và thêm các dữ liệu bổ sung sau vào ý định đó:

Để đặ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ý toàn diện: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

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

Sau khi cấp phép xong, DPC sẽ có thể dùng một Ý định 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ẽ hiển thị trong hồ sơ công việc. DPC của bạn phải đảm bảo rằng màn hình tuân thủ hiển thị cho người dùng, 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 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ỳ ý bắt đầu 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 Ý định mới này thay vì theo dõi thông báo 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 tuân thủ chính sách, ADMIN_POLICY_COMPLIANCE phải trả về setResult(RESULT_OK, Intent) và đóng tất cả màn hình đang hoạt động bằng finish().

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

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

Các DPC được đặt làm quản trị viên của hồ sơ công việc được cấp phép bằng quy trình thiết lập tự động có thể nhận mã thiết bị được chứng thực phần cứng bảo mật, chẳng hạn như 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)) đồng thời hỗ trợ chứng thực mã nhận dạng thiết bị và 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ã thiết bị, hãy xem bài viết Xác minh cặp khoá dựa trên phần cứng bằng chứng thực khoá.

Cải tiến hồ sơ công việc

Chúng tôi cung cấp các API mới để 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 thiết bị.

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

Các ứng dụng được tải xuống từ các nguồn không phải là 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. Trên Android 10, quản trị viên 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 từ các nguồn không xác định ở bất cứ đâu trên thiết bị bằng cách thêm giới hạn mới đối với người dùng DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. Tuy nhiên, sau khi thêm 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 cài đặt nhầm ứng dụng từ các nguồn không xác định, bạn nên thêm quy tắc hạn chế người dùng này vì chế độ này không yêu cầu cài đặt Dịch vụ 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 ở 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ế ở các phương thức nhập được phép trong hồ sơ công việc thay vì toàn bộ thiết bị. Điều này giúp người dùng có toàn quyền kiểm soát các phương thức nhập ở phía cá nhân trên thiết bị của họ.

Xoá im lặng hồ sơ công việc

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ý toàn bộ

Android 10 giới thiệu các tính năng và API mới cho các thiết bị được quản lý toàn diện, bao gồm cả bản cập nhật hệ thống theo cách thủ công, mở rộng phạm vi cấp phép mã QR và NFC để đưa thông tin xác thực cho mạng EAP Wi-Fi vào 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ý toàn bộ 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. 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:

  • Hãy 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 mạng bị giới hạn băng thông.
  • Cài đặt theo bối cảnh hoặc chỉ cập nhật thiết bị khi không dùng đến.

Trước tiên, quản trị viên CNTT sẽ đặt chính sách hoãn cập nhật hệ thống để trì hoãn quá trình cài đặt tự động (nếu cần). Tiếp theo, DPC của thiết bị gọi installSystemUpdate() với đường dẫn đến tệp 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ể sử 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 sự cố, hệ thống sẽ gọi onInstallUpdateError() kèm theo mã lỗi.

Sau khi thiết bị khởi động lại, DPC cần xác nhận việc cài đặt thành công bằng cách sử dụng 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.

Cấp phép Wi-Fi EAP (Giao thức xác thực có thể mở rộng) Wi-Fi

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ột mạng Wi-Fi cục bộ bằng EAP và bắt đầu quy trình cấp phép mà không cần thêm thao tác nhập thủ công nào.

Để xác thực Wi-Fi bằng EAP, hãy thêm dữ liệu bổ sung EXTRA_PROVISIONING_WIFI_SECURITY_TYPE với giá trị "EAP". Để chỉ định tính năng xác thực EAP, bạn có thể thêm các tiện ích bổ sung cấp phép sau vào ý định của mình:

Hỗ trợ DNS riêng

Các tổ chức có thể dùng DNS qua TLS (còn gọi là DNS riêng trên các thiết bị Android) để tránh rò rỉ truy vấn DNS, bao gồm cả các truy vấn của tên máy chủ nội bộ. Các thành phần quản trị của thiết bị được quản lý đầy đủ có thể kiểm soát chế độ cài đặt DNS riêng 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 sẽ trả về lỗi.

Để truy xuất chế độ DNS riêng và máy chủ lưu trữ đã đặt trên một 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 tư bằng cách thêm quy tắc hạn chế người dùng DISALLOW_CONFIG_PRIVATE_DNS.

Miễn 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 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ừ ứng dụng khỏi chế độ khoá. Các ứng dụng được miễn trừ sẽ sử dụng VPN theo mặc định, nhưng sẽ tự động kết nối với các mạng khác nếu không có VPN. Những ứng dụng được miễn trừ cũng từ chối rõ ràng quyền truy cập vào VPN sẽ chỉ 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 vào đều phải được cài đặt trên thiết bị khi phương thức này được gọi. Nếu một ứng dụng 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. Để giúp các ứng dụng được miễn trừ khỏi chế độ khoá trước đó, hãy gọi getAlwaysOnVpnLockdownWhitelist().

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

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

Android 10 mở rộng danh sách 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ụ thành các phạm vi. Để uỷ quyền một phạm vi, hãy gọi setDelegatedScopes() và chuyển một hoặc nhiều phạm vi sau:

Android 10 giới thiệu một lớp mới DelegatedAdminReceiver dành cho các ứng dụng uỷ quyền. Hệ thống sử dụng broadcast receiver này để gửi các lệnh gọi lại giống DPC nhằm uỷ quyền cho các ứng dụng. Các ứng dụng đã được uỷ quyền ghi nhật ký hoạt động mạng và lựa chọn chứng chỉ sẽ 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 thao tác bộ lọc ý định 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ệ broadcast receiver 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ả việc 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 theo hệ thống. Trên Android 10, quản trị viên của các thiết bị được quản lý toàn bộ có thể uỷ quyền ghi nhật ký mạng cho một ứng dụng chuyên biệt.

Để truy xuất nhật ký mạng sau khi hệ thống cung cấp một lô, các ứng dụng uỷ quyền phải phân lớp con trước DelegatedAdminReceiver (như đã mô tả ở trên). 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ý.

Ứ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 bạn định uỷ quyền cho một ứng dụng khác. Ứng dụng uỷ quyền phải 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 thêm lệnh gọi lại onNetworkLogsAvailable() nào nữa.

Để 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 về Ghi nhật ký hoạt động mạng.

Chọn chứng chỉ

Trong Android 10, quản trị viên của các thiết bị được quản lý toàn bộ, 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 lớp con DelegatedAdminReceiver (đã mô tả ở trên). Trong lớp con, hãy triển khai lệnh gọi lại onChoosePrivateKeyAlias() và trả về một bí danh cho một 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 chính sách quản trị thiết bị

Android 10 ngăn không cho ứng dụng và DPC áp dụng các chính sách quản trị viên thiết bị cũ. Khách hàng và đối tác nên chuyển sang sử dụng 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 sẽ gửi SecurityException khi được quản trị viên thiết bị nhắm mục tiêu Android 10 gọi:

Một số ứng dụng sử dụng tính năng quản trị thiết bị để quản trị thiết bị của người dùng thông thường. Ví dụ: khoá và xoá sạch thiết bị thất lạc. Để bật tính năng này, chúng tôi sẽ tiếp tục cung cấp 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

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

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

Kể từ Android 10, những ứng dụng có tính năng quan trọng cần đến phương thức khoá màn hình có thể truy vấn độ phức tạp của phương thức khoá màn hình trên thiết bị hoặc hồ sơ công việc. Các ứ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 phương thức khoá màn hình 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 khoá màn hình:

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

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

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

Trên Android 10, ứng dụng VPN có thể đặt proxy HTTP cho kết nối VPN. Để thêm proxy HTTP, ứng dụng VPN phải định cấu hình thực thể ProxyInfo với 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 thực hiện các yêu cầu HTTP qua proxy.

Để biết mã mẫu cho biết cách đặt proxy HTTP, hãy xem ứng dụng mẫu ToyVPN.

Chế độ dịch vụ VPN

Các ứng dụng VPN có thể khám phá xem dịch vụ có đang chạy do Vpn luôn bật hay không và 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() để tìm hiểu xem hệ thống có khởi động dịch vụ do VPN luôn bật hay không
  • isLockdownEnabled() để tìm hiểu xem hệ thống có 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 khi dịch vụ đang chạy nhưng trạng thái chế độ khoá có thể thay đổi.

Cải tiến 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 trình phát hành và thuật toán chính được chỉ định trong lệnh gọi.

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