Lựa chọn mạng cho mỗi ứng dụng (PANS)

Xe ngày càng phụ thuộc vào khả năng kết nối để quản lý danh sách ngày càng tăng các trường hợp sử dụng do cả OEM và chủ sở hữu xe yêu cầu, dẫn đến việc tăng dấu vết dữ liệu và chi phí liên quan. Sử dụng tính năng lựa chọn mạng cho từng ứng dụng (PANS) để định tuyến lưu lượng truy cập của các ứng dụng được chỉ định trên các mạng do OEM trả phí.

Với PANS, bạn có thể quản lý mức sử dụng dữ liệu và chi phí, đồng thời mang đến trải nghiệm lái xe an toàn, ổn định và có kết nối. PANS:

  • Bao gồm một API mới được thêm vào ConnectivityManager chỉ dành cho các thiết bị ô tô.
  • Cung cấp một API đề xuất Wi-Fi mới (xem API đề xuất Wi-Fi để kết nối Internet) để hỗ trợ các chức năng mạng PANS thay đổi linh hoạt.
  • Thu thập các chỉ số hỗ trợ.
  • Cung cấp một ứng dụng tham chiếu.

Tại sao nên dùng PANS?

PANS có thể:

  • Tự động cập nhật mối liên kết giữa ứng dụng và mạng.
  • Quản lý hoạt động định tuyến ở cấp ứng dụng mà không cần thay đổi ứng dụng.
  • Chỉ những ứng dụng được OEM cho phép mới có thể truy cập vào các mạng OEM được liên kết.
  • Nhà phát triển ứng dụng không cần thực hiện bất kỳ thay đổi nào để triển khai tính năng này.
  • Các chỉ số dành cho người dùng theo dõi mức sử dụng dữ liệu từ ứng dụng đến mạng đối với các mạng do OEM quản lý.
  • Quyền truy cập vào mạng là an toàn và không thể bị lạm dụng thông qua các trường hợp sử dụng không mong muốn hoặc các ứng dụng trái phép.
  • Các thay đổi đối với mối liên kết giữa ứng dụng và mạng PANS sẽ được thông báo cho người dùng.
  • Cấu hình mạng giống nhau được áp dụng cho tất cả người dùng.

Ưu điểm cốt lõi

PANS mang lại những lợi thế cốt lõi sau cho các OEM:

  1. Các nhà sản xuất thiết bị gốc (OEM) có thể trả phí cho lưu lượng truy cập mạng thay vì người dùng:
    • Người dùng có thể nhận được các bản cập nhật hệ thống mà không mất phí.
    • Người dùng có thể sử dụng mạng của các ứng dụng được chỉ định mà không mất phí.
    • Người dùng có thể quản lý số liệu đo từ xa và các số liệu phân tích khác mà không mất phí.
  2. Các OEM có thể đảm bảo các ứng dụng quan trọng vẫn kết nối được ngay cả khi người dùng không có gói dữ liệu trả phí. Ví dụ: các tính năng quan trọng về an toàn như bản đồ, trợ lý (lái xe rảnh tay) và bản cập nhật hệ thống vẫn tiếp tục hoạt động ngay cả khi người dùng không có gói dữ liệu.
  3. PANS cung cấp thêm mức độ chi tiết của chế độ kiểm soát dành riêng cho việc định tuyến lưu lượng truy cập mạng trong Android. Ví dụ: OEM có thể xác định một cách tối ưu cấu trúc liên kết mạng logic để định tuyến lưu lượng truy cập ở cấp ứng dụng.

Triển khai PANS

Để triển khai PANS, một API ConnectivityManager mới, setOemNetworkPreference, sẽ được cung cấp. API mới này liên kết các ứng dụng với một OemNetworkPreference. API này chỉ dành cho các thiết bị ô tô và được chú thích là @SystemApi bằng một quyền signature mới.

OemNetworkPreference

OemNetworkPreference là một khái niệm trừu tượng đối với OEM_PAIDOEM_PRIVATE. NetworkCapabilities ánh xạ các ứng dụng theo tên gói thành một lựa chọn ưu tiên về mạng. Lựa chọn ưu tiên về mạng cho phép phân cấp mạng. Ví dụ: việc liên kết một ứng dụng với lựa chọn ưu tiên OEM_NETWORK_PREFERENCE_OEM_PAID sẽ dẫn đến thứ tự ưu tiên sau đây của các mạng mặc định được chỉ định cho một ứng dụng: trước tiên, hãy sử dụng mạng UNMETERED, nếu không có UNMETERED, hãy sử dụng mạng OEM_PAID và nếu không có OEM_PAID, hãy sử dụng mạng mặc định của hệ thống.

  • OEM_PAID Được dùng chủ yếu cho những ứng dụng có thể được định tuyến trên cả mạng OEM và mạng không phải OEM.
  • OEM_PRIVATE Được dùng chủ yếu cho các ứng dụng OEM để truy cập vào một mạng dành riêng cho các ứng dụng đó.
/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, use the general default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1;

/**
* If an unmetered network is available, use it.
* Otherwise, if a network with the OEM_PAID capability is available, use it.
* Otherwise, the app doesn't get a default network.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2;

/**
* Use only NET_CAPABILITY_OEM_PAID networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3;

/**
* Use only NET_CAPABILITY_OEM_PRIVATE networks.
*/
public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4;

Gọi API PANS

Cách sử dụng API PANS:

  1. Sử dụng OemNetworkPreferences để liên kết một ứng dụng với lựa chọn ưu tiên mạng.
  2. Gọi setOemNetworkPreference bằng đối tượng OemNetworkPreferences.
  3. Sử dụng giao diện Runnable để theo dõi quá trình hoàn tất API.

Ví dụ:

// Mapping three packages to two network preferences
// Packages have a 1:1 mapping to network preferences
OemNetworkPreferences pref = new OemNetworkPreferences.Builder()
  .addNetworkPreference("first.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
  .addNetworkPreference("second.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID)
  .addNetworkPreference("third.package.name", OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY)
  .build();

myConnectivityManager.setOemNetworkPreference(pref, myExecutor, myListener);

Những yếu tố nên cân nhắc

Khi triển khai PANS, hãy lưu ý những điểm sau:

  • Các lựa chọn ưu tiên về mạng không được duy trì trong quá trình khởi động và cần được áp dụng lại trong mỗi lần khởi động.
  • Bạn không cần cài đặt ứng dụng để tạo lựa chọn ưu tiên cho ứng dụng. Do đó, bạn có thể chủ động đặt lựa chọn ưu tiên về mạng cho các ứng dụng chưa cài đặt.
  • Tại một thời điểm bất kỳ, một ứng dụng chỉ có thể được liên kết với một lựa chọn ưu tiên về mạng duy nhất.
  • Lựa chọn ưu tiên về mạng được dùng để đặt mạng mặc định của một ứng dụng. Đây là mạng được dùng khi một ứng dụng chưa chỉ định(các) mạng mà ứng dụng đó muốn dùng thông qua một trong các API chuyên biệt. Không chỉ đáp ứng phần lớn nhu cầu về khả năng kết nối, mà giải pháp này còn cho phép tiếp tục sử dụng các API chuyên biệt như API NetworkRequest để không làm gián đoạn các trường hợp sử dụng ứng dụng hiện có. Ví dụ: khi một ứng dụng chỉ muốn thực hiện một thao tác qua mạng không đo lường, PANS sẽ không buộc ứng dụng đó sử dụng một mạng khác.

Định cấu hình mạng

Bạn phải có mạng có khả năng OEM_PAID hoặc OEM_PRIVATE khi sử dụng lựa chọn ưu tiên mạng tương ứng. Android hỗ trợ việc định cấu hình các chức năng cho mạng Ethernet và Wi-Fi. Đối với mạng Ethernet, bạn có thể sử dụng lớp phủ tài nguyên config_ethernet_interfaces. Giá trị này được đặt tại thời điểm biên dịch.

Đối với Wi-Fi, bạn có thể dùng API WifiNetworkSuggestion với các API Android 12 mới, setOemPaid(Boolean)setOemPrivate(Boolean). Bạn có thể thay đổi thông tin này trong thời gian chạy.

Hãy xem xét những ví dụ sau:

  1. Một lớp phủ tài nguyên có tên config_ethernet_interfaces chỉ định:
    • Tên của giao diện cần định cấu hình.
    • Các giá trị NetworkCapabilities mong muốn.
      <!-- 11 NET_CAPABILITY_NOT_METERED
          12 NET_CAPABILITY_INTERNET
          14 NET_CAPABILITY_TRUSTED
          15 NET_CAPABILITY_NOT_VPN
          22 NET_CAPABILITY_OEM_PAID || 26 NET_CAPABILITY_OEM_PRIVATE -->
      <string-array translatable="false" name="config_ethernet_interfaces">
        <item>eth0;11,12,14,15,22;;</item></string-array>
  2. Bạn có thể thay đổi WiFiNetworkSuggestion này một cách linh hoạt:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                  .setSsid(WifiInfo.sanitizeSsid(ssid))
                  .setOemPrivate(true)
                  .build());
    mWifiManager.addNetworkSuggestions(list);

Hạn chế quyền truy cập vào mạng PANS

Việc gắn thẻ một mạng bằng khả năng OEM_PAID hoặc OEM_PRIVATE sẽ đánh dấu mạng đó là mạng bị hạn chế. Các ứng dụng có quyền CONNECTIVITY_USE_RESTRICTED_NETWORKS (do OEM kiểm soát) chỉ có thể sử dụng các mạng bị hạn chế.

Các ứng dụng có quyền này có thể sử dụng các mạng bị hạn chế miễn là các ứng dụng đó yêu cầu rõ ràng. Tuy nhiên, các ứng dụng này sẽ không nhận được mạng bị hạn chế làm mạng mặc định. Các ứng dụng được liên kết thông qua PANS có thể đặt mạng OEM bị hạn chế làm mạng mặc định và không cần quyền truy cập vào mạng bị hạn chế để sử dụng. Khi một ứng dụng như vậy có mạng OEM bị hạn chế được PANS chỉ định làm mạng mặc định, ứng dụng đó cũng có khả năng yêu cầu rõ ràng mạng OEM nói trên nếu muốn.

Xem xét ứng dụng tham chiếu

Một ứng dụng tham chiếu (bao gồm cả mã) có tên là NetworkPreferenceApp được cung cấp trong các bản dựng ô tô gỡ lỗi người dùng và minh hoạ cách:

  • Sử dụng các chỉ số PANS.
  • Đặt chính sách PANS.
  • Đặt chính sách mặc định cho thiết bị.
  • Xoá một chính sách.
  • Áp dụng chính sách khi khởi động.
  • Sử dụng Driver Distraction API (xem Nguyên tắc tránh mất tập trung khi lái xe).
  • Cập nhật Wi-Fi một cách linh hoạt bằng OEM_PAIDOEM_PRIVATE.

Chỉ số

Để tăng cường tính minh bạch về việc sử dụng dữ liệu, các chỉ số được thu thập và cung cấp liên quan đến lượng dữ liệu được truyền qua các ánh xạ mạng OEM_PAIDOEM_PRIVATE.

Khắc phục sự cố

Hầu hết các trường hợp cần khắc phục sự cố đều phát sinh từ việc ứng dụng sử dụng sai mạng (không có kết nối mạng) hoặc sử dụng quá nhiều dữ liệu. Cách bật tính năng giải quyết nhanh:

  • Phần Kết nối dumpsys bao gồm danh sách các mạng mặc định đang hoạt động cho mỗi ứng dụng và các ứng dụng liên kết (được lập bản đồ từ PANS).
  • Netd dumpsys bao gồm IP UID và các quy tắc tường lửa.
  • Netstats dumpsys bao gồm các chỉ số PANS cho mỗi ứng dụng. Ví dụ: ứng dụng nào đã sử dụng mạng OEM nào.

Bạn có thể truy cập vào tất cả dữ liệu dumpsys bằng cách tạo một báo cáo lỗi Android.