Các tính năng trong hướng dẫn này mô tả việc quản lý mạng và điện thoại mà bạn có thể triển khai trong chính sách thiết bị trình điều khiển (DPC). Tài liệu này có chứa mã mẫu, bạn cũng có thể sử dụng quy trình Kiểm tra DPC dưới dạng nguồn của mã mẫu cho các tính năng của Android dành cho doanh nghiệp.
Ứng dụng DPC có thể chạy ở chế độ chủ sở hữu hồ sơ trên thiết bị cá nhân hoặc trong chủ sở hữu thiết bị trên các thiết bị được quản lý hoàn toàn. Bảng này cho biết các tính năng khả dụng khi DPC chạy ở chế độ chủ sở hữu hồ sơ hoặc chủ sở hữu thiết bị chế độ:
Tính năng | Chủ sở hữu trang doanh nghiệp | Chủ sở hữu thiết bị |
Truy cập danh bạ công việc trên các hồ sơ | ✓ | |
Đảm bảo kết nối mạng bảo mật cho lưu lượng truy cập công việc | ✓ | ✓ |
Thiết lập một một mã nhận dạng mạng không dây duy nhất giữa các khu vực | ✓ | ✓ |
Chỉ định trình quay số riêng cho hồ sơ công việc | ✓ |
Truy cập danh bạ công việc trên các hồ sơ
EMM có thể cho phép hồ sơ cá nhân của người dùng truy cập vào danh bạ công việc của họ để danh bạ cá nhân và công việc của người dùng có thể truy cập được thông qua tính năng tìm kiếm cục bộ và tra cứu thư mục từ xa. Trên các thiết bị cá nhân, một trình quay số trong ứng dụng có thể thực hiện và nhận cuộc gọi cho cá nhân cũng như cuộc gọi về công việc. Ngoài ra, địa chỉ liên hệ công việc được tích hợp tốt vào giao diện người dùng hệ thống. Nếu hồ sơ công việc là đã mã hoá thì hồ sơ cá nhân sẽ không thể xem dữ liệu của mình.
Tích hợp với giao diện người dùng hệ thống
Giao diện người dùng hệ thống cho biết cuộc gọi đến về công việc bằng biểu tượng cặp tài liệu. Chiến lược phát hành đĩa đơn
callLog
cũng cho thấy
để chỉ định cuộc gọi đến và đi đến công việc. Trình quay số cá nhân và
ứng dụng danh bạ có thể dùng điều khiển từ xa để hiện thông tin về tên nhận dạng người gọi của người liên hệ công việc
tra cứu thư mục, nên địa chỉ liên hệ đó không bắt buộc phải được đồng bộ hoá trên
thiết bị cục bộ. Ứng dụng nhắn tin có thể thực hiện nhận dạng người gọi trên thiết bị và tìm kiếm.
Định nghĩa về khả năng tương thích với Android Giấy tờ (CDD) bao gồm các yêu cầu để danh bạ công việc hiển thị trong trình quay số mặc định và các yêu cầu mà danh bạ và ứng dụng nhắn tin được gắn huy hiệu để cho biết những người này đến từ cơ quan hồ sơ.
Có thể truy cập và tìm kiếm danh bạ công việc
Người dùng có thể truy cập và gọi cho các địa chỉ liên hệ công việc từ hồ sơ cá nhân của họ. hiển thị trong màn hình tìm kiếm của ứng dụng gọi điện. Người dùng có thể tìm kiếm công việc địa chỉ liên hệ—sử dụng tự động hoàn thành—được đồng bộ hóa cục bộ với thiết bị và được liệt kê thông qua tra cứu thư mục từ xa.
Kiểm soát danh bạ công việc trong hồ sơ chính
DPC kiểm soát quyền tìm kiếm thông tin liên hệ công việc. Đang chạy trong tài khoản chủ sở hữu hồ sơ DPC quản lý chế độ hiển thị danh bạ công việc trong hồ sơ cá nhân. Để biết thêm thông tin, hãy xem bài viết Tạo chính sách thiết bị bộ điều khiển dành cho thiết bị di động.
Tính năng tìm kiếm người liên hệ công việc bằng hồ sơ cá nhân được bật theo mặc định.
Để xem cách đặt chính sách, hãy sử dụng
DevicePolicyManager.getCrossProfileContactsSearchDisabled()
.Để bật hoặc tắt tính năng tìm kiếm danh bạ công việc theo hồ sơ cá nhân, hãy sử dụng
DevicePolicyManager.setCrossProfileContactsSearchDisabled()
.
Đảm bảo kết nối mạng an toàn cho lưu lượng truy cập công việc
Chạy ở chế độ chủ sở hữu thiết bị hoặc chế độ chủ sở hữu hồ sơ, một chính sách thiết bị bộ điều khiển có thể sử dụng kết nối Mạng riêng ảo (VPN) luôn bật để buộc các ứng dụng chuyển lưu lượng truy cập thông qua một ứng dụng VPN đã chỉ định mà không thể đã bị bỏ qua. Sử dụng kết nối VPN luôn bật, DPC có thể đảm bảo mạng lưu lượng truy cập từ một hồ sơ công việc hoặc thiết bị được quản lý sẽ chuyển qua một dịch vụ VPN, và mà không có sự can thiệp của người dùng. Quá trình này tạo ra một kết nối mạng an toàn cho lưu lượng truy cập liên tục trong hồ sơ công việc.
Giới thiệu về kết nối VPN luôn bật
Là một phần của khung hệ thống, việc định tuyến VPN được quản lý tự động để
không thể bỏ qua dịch vụ VPN. Nếu dịch vụ VPN bị ngắt kết nối khi đang ở
chế độ khoá, lưu lượng truy cập không thể rò rỉ ra Internet mở. Đối với các ứng dụng
triển khai
VpnService
,
VPN luôn bật cung cấp một khung quản lý kết nối VPN an toàn thông qua
một máy chủ đáng tin cậy và duy trì nó. Dịch vụ VPN tự động khởi động lại
kết nối giữa các bản cập nhật ứng dụng, bất kể kết nối qua Wi-Fi hay
di động. Nếu thiết bị khởi động lại, khung sẽ khởi động lại kết nối VPN.
Người dùng có thể thấy rõ kết nối với dịch vụ VPN. Đối với thiết bị thuộc sở hữu của công ty, nên người dùng sẽ không bắt buộc phải xác nhận hộp thoại đồng ý cho VPN ở chế độ luôn bật. Chế độ cài đặt mạng VPN của người dùng cho phép bật luôn bật theo cách thủ công.
Nếu DISALLOW_CONFIG_VPN
là true
, nên người dùng không thể định cấu hình VPN. Bật
DISALLOW_DEBUGGING_FEATURES
để hạn chế người dùng ghi đè VPN luôn bật bằng lệnh gỡ lỗi adb.
Để ngăn người dùng gỡ cài đặt VPN, hãy gọi
DevicePolicyManager.setUninstallBlocked
.
Thiết lập dịch vụ VPN
Tổ chức sử dụng giải pháp dành cho doanh nghiệp của bạn dành cho Android thiết lập VPN.
- Cài đặt một ứng dụng VPN giúp triển khai
VpnService
. Bạn có thể tìm thấy các dịch vụ VPN đang hoạt động bằng cách sử dụng bộ lọc ý định khớp với hành độngVpnService.SERVICE_INTERFACE
. - Khai báo một
VpnService
trong tệp kê khai của ứng dụng được bảo vệ bằng quyềnBIND_VPN_SERVICE
- Định cấu hình
VpnService
để hệ thống khởi động. Tránh thiết lập để ứng dụng VPN tự khởi động bằng cách lắng nghe khả năng khởi động của hệ thống và kiểm soát vòng đời của chính hệ thống đó. - Đặt trạng thái được quản lý cấu hình cho ứng dụng VPN (xem ví dụ bên dưới).
Bật kết nối VPN luôn bật
DPC có thể định cấu hình kết nối VPN luôn bật thông qua một ứng dụng cụ thể bằng cách
đang gọi
DevicePolicyManager.setAlwaysOnVpnPackage()
.
Kết nối này sẽ tự động được cấp và duy trì sau khi khởi động lại. Nếu
lockdownEnabled
là false, lưu lượng truy cập mạng có thể không an toàn kể từ thời điểm
điện thoại khởi động lại và VPN sẽ kết nối. Điều này rất hữu ích nếu bạn không muốn dừng lại
kết nối mạng bất cứ khi nào VPN gặp sự cố hoặc nếu VPN không cần thiết.
Xác minh kết nối VPN luôn bật
DPC có thể đọc tên của gói quản lý VPN luôn bật
cho người dùng hiện tại với
DevicePolicyManager.getAlwaysOnVpnPackage().
Nếu không có gói nào như vậy hoặc VPN đã được tạo trong phần Cài đặt hệ thống
ứng dụng, null
sẽ được trả về.
Ví dụ
Trong ứng dụng TestDPC, AlwaysOnVpnFragment.java
dùng các API này để bật chế độ cài đặt cho kết nối VPN luôn bật.
Trong ví dụ sau đây:
- Chiến lược được quản lý
cấu hình của
Dịch vụ VPN được đặt bởi
DevicePolicyManager
bằng cách sử dụngsetApplicationRestrictions()
. - Cấu hình được quản lý sử dụng các cặp khoá-giá trị tuỳ ý và ứng dụng ví dụ này sử dụng chúng ở nơi khác để định cấu hình cài đặt mạng của VPN (xem Kiểm tra cấu hình được quản lý).
- Ví dụ này sẽ thêm trình cài đặt gói Android vào một danh sách từ chối để trình cài đặt cập nhật gói hệ thống qua VPN. Tất cả lưu lượng truy cập mạng của người dùng trong hồ sơ công việc hoặc thiết bị đi qua ứng dụng VPN này, ngoại trừ gói trình cài đặt; các bản cập nhật của ứng dụng sử dụng Internet cởi mở.
- Sau đó,
DevicePolicyManager
sẽ bật kết nối VPN luôn bật cho Gói VPN đang sử dụngsetAlwaysOnVpnPackage()
, và bật chế độ khoá.
Kotlin
// Set VPN's managed configurations val config = Bundle().apply { putString(Extras.VpnApp.ADDRESS, "192.0.2.0") putString(Extras.VpnApp.IDENTITY, "vpn.account1") putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate") putStringArray(Extras.VpnApp.DENYLIST, arrayOf("com.android.packageinstaller")) } val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val admin = myDeviceAdminReceiver.getComponentName(this) // Name of package to update managed configurations val vpnPackageName = "com.example.vpnservice" // Associate managed configurations with DeviceAdminReceiver dpm.setApplicationRestrictions(admin, vpnPackageName, config) // Enable always-on VPN connection through VPN package try { val lockdownEnabled = true dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled) } catch (ex: Exception) { throw PolicyException() }
Java
// Set VPN's managed configurations final Bundle config = new Bundle(); config.putString(Extras.VpnApp.ADDRESS, "192.0.2.0"); config.putString(Extras.VpnApp.IDENTITY, "vpn.account1"); config.putString(Extras.VpnApp.CERTIFICATE, "keystore://auth_certificate"); config.putStringArray(Extras.VpnApp.DENYLIST, new String[]{"com.android.packageinstaller"}); DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName admin = myDeviceAdminReceiver.getComponentName(this); // Name of package to update managed configurations final String vpnPackageName = "com.example.vpnservice"; // Associate managed configurations with DeviceAdminReceiver dpm.setApplicationRestrictions(admin, vpnPackageName, config); // Enable always-on VPN connection through VPN package try { boolean lockdownEnabled = true; dpm.setAlwaysOnVpnPackage(admin, vpnPackageName, lockdownEnabled)); } catch (Exception ex) { throw new PolicyException(...); }
Thiết lập một mã nhận dạng mạng không dây duy nhất giữa các khu vực
Chạy ở chế độ chủ sở hữu thiết bị hoặc chế độ chủ sở hữu hồ sơ, một chính sách thiết bị đơn vị kiểm soát (DPC) có thể liên kết nhiều chứng chỉ của tổ chức phát hành chứng chỉ (CA) bằng một cấu hình mạng không dây duy nhất. Với cấu hình này, thiết bị có thể kết nối với các điểm truy cập không dây có cùng tên mạng, hoặc mã định danh của bộ dịch vụ (SSID), nhưng được định cấu hình bằng CA khác nhau chứng chỉ. Điều này rất hữu ích nếu mạng không dây của tổ chức của bạn sống ở nhiều khu vực địa lý và mỗi khu vực đòi hỏi một tổ chức phát hành chứng chỉ. Ví dụ, chữ ký pháp lý có thể yêu cầu người dùng cơ quan cấp chứng nhận cần có CA khu vực.
Lưu ý: Android đã hỗ trợ
setCaCertificate
kể từ API 18 (Jelly Bean), nhưng quản trị viên CNTT phải cung cấp mạng của họ
riêng biệt với từng CA để đảm bảo thiết bị được xác thực liền mạch ở mỗi
điểm truy cập, bất kể khu vực của họ.
Chỉ định chứng chỉ CA để nhận dạng máy chủ
Để chỉ định danh sách các chứng chỉ X.509 xác định máy chủ bằng cách sử dụng cùng một
SSID, đưa tất cả CA có liên quan vào cấu hình không dây bằng WifiEnterpriseConfig.setCaCertificates()
.
Chứng chỉ của máy chủ là hợp lệ nếu CA của máy chủ đó khớp với một trong các chứng chỉ đã cho.
Tên mặc định được tự động gán cho các chứng chỉ và được sử dụng trong
. Chiến lược phát hành đĩa đơn
WifiManager
cài đặt chứng chỉ và tự động lưu cấu hình khi
được bật và xoá chứng chỉ khi cấu hình được
đã bị xoá.
Để lấy tất cả chứng chỉ CA được liên kết với cấu hình không dây, hãy sử dụng
WifiEnterpriseConfig.getCaCertificates()
để trả về danh sách
Đối tượng X509Certificate
.
Thêm cấu hình không dây bằng nhiều chứng chỉ CA
- Xác minh danh tính của máy chủ:
- Tải chứng chỉ CA X.509.
- Tải khoá riêng tư và chứng chỉ của ứng dụng. Xem bài viết Bảo mật với HTTPS và SSL để biết ví dụ về cách đọc tệp chứng chỉ.
- Tạo mới
WifiConfiguration
đồng thời đặt SSID và quy trình quản lý khoá. - Thiết lập
WifiEnterpriseConfig
thực thể trênWifiConfiguration
này.- Xác định máy chủ bằng danh sách
X509Certificate
đối tượng sử dụngsetCaCertificates()
- Đặt thông tin đăng nhập, danh tính và mật khẩu của ứng dụng khách.
- Đặt phương pháp Giao thức xác thực mở rộng (EAP) và Giai đoạn 2 làm trong việc thiết lập kết nối.
- Xác định máy chủ bằng danh sách
- Thêm mạng bằng
WifiManager
. - Bật mạng. WifiManager tự động lưu cấu hình trong thiết lập.
Ví dụ sau liên kết các bước với nhau:
Kotlin
// Verify the server's identity val caCert0 = getCaCert("cert0.crt") val caCert1 = getCaCert("cert1.crt") val clientKey = getClientKey() val clientCert = getClientCert() // Create Wi-Fi configuration val wifiConfig = WifiConfiguration().apply { SSID = "mynetwork" allowedKeyManagement.set(KeyMgmt.WPA_EAP) allowedKeyManagement.set(KeyMgmt.IEEE8021X) // Set up Wi-Fi enterprise configuration enterpriseConfig.setCaCertificates(arrayOf<X509Certificate>(caCert0, caCert1)) enterpriseConfig.setClientKeyEntry(clientKey, clientCert) enterpriseConfig.setIdentity("myusername") enterpriseConfig.setEapMethod(Eap.TLS) enterpriseConfig.setPhase2Method(Phase2.NONE) } // Add network val wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager val netId = wifiManager.addNetwork(wifiConfig) // Enable network if (netId < 0) { // Error creating new network } else { wifiManager.enableNetwork(netId, true) }
Java
// Verify the server's identity X509Certificate caCert0 = getCaCert("cert0.crt"); X509Certificate caCert1 = getCaCert("cert1.crt"); PrivateKey clientKey = getClientKey(); X509Certificate clientCert = getClientCert(); // Create Wi-Fi configuration WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "mynetwork"; wifiConfig.allowedKeyManagement.set(KeyMgmt.WPA_EAP); wifiConfig.allowedKeyManagement.set(KeyMgmt.IEEE8021X); // Set up Wi-Fi enterprise configuration wifiConfig.enterpriseConfig.setCaCertificates(new X509Certificate[] {caCert0, caCert1}); wifiConfig.enterpriseConfig.setClientKeyEntry(clientKey, clientCert); wifiConfig.enterpriseConfig.setIdentity("myusername"); wifiConfig.enterpriseConfig.setEapMethod(Eap.TLS); wifiConfig.enterpriseConfig.setPhase2Method(Phase2.NONE); // Add network WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); int netId = wifiManager.addNetwork(wifiConfig); // Enable network if (netId < 0) { // Error creating new network } else { wifiManager.enableNetwork(netId, true); }
Chỉ định một trình quay số riêng cho hồ sơ công việc
Bạn có thể thêm một ứng dụng gọi điện riêng vào danh sách cho phép để dùng trong hồ sơ công việc.
Đó có thể là trình quay số hoặc ứng dụng Voice over IP (VoIP) triển khai
ConnectionService
API cho phần phụ trợ gọi. Tính năng này cung cấp tính năng quay số giao diện người dùng hệ thống tích hợp tương tự
với các ứng dụng VoIP trong hồ sơ công việc, giúp công việc
một tính năng chính. Cuộc gọi đến đến tài khoản gọi điện cho công việc đang
tách biệt với cuộc gọi đến thành tài khoản gọi cá nhân.
Người dùng có thể chọn gọi và nhận cuộc gọi từ trình gọi điện công việc có trong danh sách cho phép
trên tài khoản điện thoại. Tất cả cuộc gọi thực hiện từ trình quay số đó hoặc đến cơ quan
tài khoản điện thoại, đều được ghi lại trong
CallLog
Google Cloud. Trình quay số công việc duy trì nhật ký cuộc gọi chỉ dành cho công việc với quyền truy cập vào
danh bạ công việc. Các cuộc gọi sử dụng công tắc mạch đến do trình quay số chính xử lý
và được lưu trữ trong nhật ký cuộc gọi cá nhân. Nếu hồ sơ công việc bị xoá, nhật ký cuộc gọi
được liên kết với hồ sơ công việc đó cũng như với tất cả các hồ sơ công việc
.
Các ứng dụng bên thứ ba phải triển khai ConnectionService
Các ứng dụng VoIP của bên thứ ba cần thực hiện cuộc gọi điện thoại và thực hiện các cuộc gọi đó
tích hợp vào ứng dụng điện thoại tích hợp sẵn có thể triển khai
ConnectionService
API. Đây là yêu cầu bắt buộc đối với mọi dịch vụ VoIP dùng để gọi điện cho công việc. Các ứng dụng này
được hưởng lợi nhờ việc xử lý các cuộc gọi của họ giống như các cuộc gọi di động truyền thống, vì
chẳng hạn như chúng xuất hiện trong trình quay số hệ thống và nhật ký cuộc gọi tích hợp sẵn. Nếu
triển khai ứng dụng
ConnectionService
được cài đặt trong hồ sơ công việc, trình quay số cũng chỉ truy cập được vào hồ sơ này
được cài đặt trong hồ sơ công việc đó.
Sau khi nhà phát triển đã triển khai
ConnectionService
,
họ nên thêm mã này vào tệp kê khai của ứng dụng và đăng ký
PhoneAccount
với
TelecomManager
.
Tài khoản điện thoại là một phương thức riêng biệt để gọi hoặc nhận cuộc gọi điện thoại,
và có thể có nhiều PhoneAccounts
cho mỗi
ConnectionService
Sau khi đăng ký tài khoản điện thoại, người dùng
có thể bật nó thông qua cài đặt trình quay số.
Tích hợp giao diện người dùng hệ thống và thông báo
Giao diện người dùng hệ thống cung cấp cho người dùng trải nghiệm quay số nhất quán và tích hợp
đối với các ứng dụng bên thứ ba sử dụng
ConnectionService
API làm phần phụ trợ để thực hiện lệnh gọi. Nếu bạn dùng ứng dụng trong hồ sơ công việc, hãy sử dụng một cặp tài liệu
hiển thị trên cuộc gọi đến và trên thanh trạng thái. Ứng dụng triển khai
ConnectionService
được cài đặt trong hồ sơ công việc có thể sử dụng
trình quay số hệ thống hoặc tạo một trình quay số công việc riêng biệt. Đây có thể là một ứng dụng hoặc
ứng dụng riêng biệt.
Ứng dụng gọi điện xác định liệu ứng dụng sẽ thực hiện hoặc nhận cuộc gọi công việc bằng
đang tìm cờ
android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL
.
Nếu cuộc gọi là cuộc gọi về công việc, thì trình quay số sẽ cho người dùng biết điều này bằng cách thêm
huy hiệu công việc (biểu tượng cặp tài liệu):
Kotlin
// Call placed through a work phone account. getCurrentCall() is defined by the // dialer. val call = getCurrentCall() if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) { // Set briefcase icon }
Java
// Call placed through a work phone account. getCurrentCall() is defined by the // dialer. Call call = getCurrentCall(); if (call.hasProperty(android.telecom.Call.Details.PROPERTY_ENTERPRISE_CALL)) { // Set briefcase icon }