Mạng và điện thoại

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.

Đả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_VPNtrue, 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.

  1. 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 động VpnService.SERVICE_INTERFACE.
  2. Khai báo một VpnService trong tệp kê khai của ứng dụng được bảo vệ bằng quyền BIND_VPN_SERVICE
  3. Đị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 đó.
  4. Đặ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ụng setApplicationRestrictions() .
  • 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ụng setAlwaysOnVpnPackage(), 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

  1. Xác minh danh tính của máy chủ:
    1. Tải chứng chỉ CA X.509.
    2. 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ỉ.
  2. Tạo mới WifiConfiguration đồng thời đặt SSID và quy trình quản lý khoá.
  3. Thiết lập WifiEnterpriseConfig thực thể trên WifiConfiguration này.
    1. Xác định máy chủ bằng danh sách X509Certificate đối tượng sử dụng setCaCertificates()
    2. Đặt thông tin đăng nhập, danh tính và mật khẩu của ứng dụng khách.
    3. Đặ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.
  4. Thêm mạng bằng WifiManager.
  5. 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
}