การเลือกเครือข่ายต่อแอปพลิเคชัน (PANS)

ยานพาหนะพึ่งพาการเชื่อมต่อมากขึ้นเพื่อจัดการรายการกรณีการใช้งานที่เพิ่มขึ้น ซึ่งทั้ง OEM และเจ้าของยานพาหนะร้องขอ ส่งผลให้ร่องรอยข้อมูลและค่าใช้จ่ายที่เกี่ยวข้องเพิ่มขึ้น ใช้ฟีเจอร์การเลือกเครือข่ายต่อแอปพลิเคชัน (PANS) เพื่อกำหนดเส้นทางการรับส่งข้อมูลของแอปที่ระบุในเครือข่ายที่ OEM ชำระเงิน

PANS ช่วยให้คุณจัดการปริมาณและค่าใช้จ่ายในการใช้อินเทอร์เน็ตได้พร้อมๆ กับการมอบประสบการณ์การใช้งานรถยนต์ที่เชื่อมต่อที่แข็งแกร่ง ปลอดภัย และเชื่อมต่อ PANS:

  • ประกอบด้วย API ใหม่ที่เพิ่มลงใน ConnectivityManager ซึ่งพร้อมใช้งาน ในอุปกรณ์ยานยนต์เท่านั้น
  • มี Wi-Fi Suggestion API ที่อัปเดตแล้ว (ดู Wi-Fi Suggestion API สำหรับการเชื่อมต่ออินเทอร์เน็ต) เพื่อรองรับความสามารถของเครือข่าย PANS ที่เปลี่ยนแปลงแบบไดนามิก
  • รวบรวมเมตริกสนับสนุน
  • มีแอปอ้างอิง

เหตุใดจึงควรใช้ PANS

PANS สามารถทำสิ่งต่อไปนี้ได้

  • อัปเดตการแมประหว่างแอปกับเครือข่ายแบบไดนามิก
  • จัดการการกำหนดเส้นทางระดับแอปโดยไม่ต้องทำการเปลี่ยนแปลงใดๆ ในแอป
  • เฉพาะแอปที่ OEM อนุญาตเท่านั้นที่จะเข้าถึงเครือข่าย OEM ที่แมปไว้ได้
  • นักพัฒนาแอปไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ เพื่อใช้ฟีเจอร์นี้
  • เมตริกที่ผู้ใช้มองเห็นจะติดตามการใช้อินเทอร์เน็ตจากแอปไปยังเครือข่ายสำหรับเครือข่ายที่ OEM จัดการ
  • การเข้าถึงเครือข่ายมีความปลอดภัยและไม่สามารถถูกละเมิดผ่านกรณีการใช้งานที่ไม่ตั้งใจหรือ แอปที่ไม่ได้รับอนุญาต
  • เราจะแจ้งให้ผู้ใช้ทราบถึงการเปลี่ยนแปลงการแมปแอปกับเครือข่ายของ PANS
  • ระบบจะใช้การกำหนดค่าเครือข่ายเดียวกันกับผู้ใช้ทุกคน

ข้อดีหลัก

PANS มอบข้อได้เปรียบหลักๆ ต่อไปนี้ให้แก่ OEM

  1. OEM สามารถชำระค่าการรับส่งข้อมูลเครือข่ายแทนผู้ใช้ได้ โดยทำดังนี้
    • การอัปเดตระบบจะให้บริการแก่ผู้ใช้โดยไม่มีค่าใช้จ่าย
    • ระบบสามารถให้ข้อมูลการใช้งานเครือข่ายของแอปที่ระบุแก่ผู้ใช้ได้โดยไม่มีค่าใช้จ่าย
    • ผู้ใช้สามารถจัดการการวัดระยะไกลและข้อมูลวิเคราะห์อื่นๆ ได้โดยไม่มีค่าใช้จ่าย
  2. OEM สามารถมั่นใจได้ว่าแอปที่สำคัญจะยังคงเชื่อมต่อได้แม้จะไม่มีแพ็กเกจอินเทอร์เน็ตที่ผู้ใช้ชำระเงินก็ตาม เช่น ฟีเจอร์ที่สำคัญต่อความปลอดภัย เช่น แผนที่, Assistant (การขับขี่แบบแฮนด์ฟรี) และการอัปเดตระบบจะยังคงทำงานได้แม้ ผู้ใช้จะไม่มีแพ็กเกจอินเทอร์เน็ต
  3. PANS ช่วยให้ควบคุมการกำหนดเส้นทางการรับส่งข้อมูลในเครือข่ายใน Android ได้ละเอียดยิ่งขึ้น ตัวอย่างเช่น OEM สามารถกำหนดโทโพโลยีเครือข่ายเชิงตรรกะได้อย่างเหมาะสม สำหรับการกำหนดเส้นทางการรับส่งข้อมูลระดับแอป

Implement PANS

เราได้จัดเตรียม ConnectivityManager API ใหม่ setOemNetworkPreference เพื่อใช้ PANS API ใหม่นี้จะเชื่อมโยงแอปกับ OemNetworkPreference API นี้ใช้ได้เฉพาะกับอุปกรณ์ยานยนต์และมีคำอธิบายประกอบเป็น @SystemApi พร้อมsignatureสิทธิ์ใหม่

OemNetworkPreference

OemNetworkPreference เป็นนามธรรมเหนือ OEM_PAID และ OEM_PRIVATE NetworkCapabilities การแมปแอปตามชื่อแพ็กเกจ กับค่ากำหนดของเครือข่าย ค่ากำหนดเครือข่ายช่วยให้มีลำดับชั้นของเครือข่าย เช่น การแมปแอปกับOEM_NETWORK_PREFERENCE_OEM_PAIDค่ากำหนด จะส่งผลให้ลำดับความสำคัญของเครือข่ายเริ่มต้นที่กำหนดให้กับแอปเป็นดังนี้ ใช้เครือข่าย UNMETERED ก่อน หากUNMETEREDไม่พร้อมใช้งาน ให้ใช้เครือข่าย OEM_PAID และหากOEM_PAIDไม่พร้อมใช้งาน ให้ใช้เครือข่ายเริ่มต้นของระบบ

  • OEM_PAID ใช้สําหรับแอปที่กําหนดเส้นทางได้ทั้งในเครือข่าย OEM และเครือข่ายที่ไม่ใช่ OEM เป็นหลัก
  • OEM_PRIVATE ใช้สำหรับแอป OEM เป็นหลักเพื่อรับสิทธิ์เข้าถึงเครือข่ายที่จัดไว้ให้
/**
* 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;

เรียกใช้ PANS API

หากต้องการใช้ PANS API ให้ทำดังนี้

  1. ใช้ OemNetworkPreferences เพื่อแมปแอปกับค่ากำหนดของเครือข่าย
  2. เรียกใช้ setOemNetworkPreference ด้วยออบเจ็กต์ OemNetworkPreferences
  3. ใช้Runnableอินเทอร์เฟซเพื่อรอให้ API เสร็จสมบูรณ์

เช่น

// 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);

ข้อควรพิจารณา

ขณะที่ใช้ PANS โปรดคำนึงถึงประเด็นต่อไปนี้

  • ค่ากำหนดเครือข่ายจะไม่คงอยู่เมื่อรีบูตและต้อง นำไปใช้ใหม่ทุกครั้งที่รีบูต
  • หากต้องการสร้างค่ากําหนดสําหรับแอป คุณไม่จําเป็นต้องติดตั้งแอป ดังนั้นคุณจึงตั้งค่ากำหนดเครือข่าย สำหรับแอปที่ถอนการติดตั้งไปแล้วได้ล่วงหน้า
  • ในแต่ละครั้ง คุณจะแมปแอปกับค่ากำหนดเครือข่ายได้เพียงค่าเดียวเท่านั้น
  • ค่ากำหนดเครือข่ายใช้เพื่อตั้งค่าเครือข่ายเริ่มต้นของแอป ซึ่งเป็นเครือข่ายที่ใช้เมื่อแอปไม่ได้ระบุเครือข่ายที่ต้องการใช้ผ่าน API เฉพาะอย่างใดอย่างหนึ่ง ซึ่งไม่เพียงครอบคลุมความต้องการด้านการเชื่อมต่อส่วนใหญ่เท่านั้น แต่ยังช่วยให้ใช้ API เฉพาะต่อไปได้ เช่น NetworkRequest API เพื่อไม่ให้กรณีการใช้งานแอปที่มีอยู่หยุดทำงาน ตัวอย่างเช่น เมื่อแอปต้องการดำเนินการผ่านเครือข่ายที่ไม่จำกัดปริมาณการใช้งานเท่านั้น PANS จะไม่บังคับให้แอปใช้เครือข่ายอื่น

กำหนดค่าเครือข่าย

เครือข่ายที่มีความสามารถ OEM_PAID หรือ OEM_PRIVATE ต้องพร้อมใช้งานเมื่อใช้ค่ากำหนดเครือข่ายที่เกี่ยวข้อง Android รองรับการกำหนดค่าความสามารถสำหรับเครือข่ายอีเทอร์เน็ตและ Wi-Fi สำหรับ เครือข่ายอีเทอร์เน็ต คุณสามารถใช้การซ้อนทับทรัพยากร config_ethernet_interfaces ซึ่งจะตั้งค่าในเวลาคอมไพล์

สำหรับ Wi-Fi คุณสามารถใช้ WifiNetworkSuggestion API กับ API ใหม่ของ Android 12, setOemPaid(Boolean) และ setOemPrivate(Boolean) ได้ ซึ่งเปลี่ยนแปลงได้ในขณะรันไทม์

ลองดูตัวอย่างต่อไปนี้

  1. การวางซ้อนทรัพยากรที่ชื่อ config_ethernet_interfaces จะระบุข้อมูลต่อไปนี้
    • ชื่อของอินเทอร์เฟซที่จะกำหนดค่า
    • ค่า NetworkCapabilities ที่ต้องการ
      <!-- 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. WiFiNetworkSuggestion เปลี่ยนแปลงได้แบบไดนามิก
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                  .setSsid(WifiInfo.sanitizeSsid(ssid))
                  .setOemPrivate(true)
                  .build());
    mWifiManager.addNetworkSuggestions(list);

จำกัดการเข้าถึงเครือข่าย PANS

การติดแท็กเครือข่ายด้วยความสามารถ OEM_PAID หรือ OEM_PRIVATE จะทําให้เครือข่ายนั้นเป็นเครือข่ายที่ถูกจํากัด เครือข่ายที่จำกัด จะใช้ได้เฉพาะแอปที่มีสิทธิ์ CONNECTIVITY_USE_RESTRICTED_NETWORKS ซึ่งควบคุมโดย OEM

แอปที่มีสิทธิ์นี้จะใช้เครือข่ายที่ถูกจำกัดได้หากแอปขอใช้เครือข่ายดังกล่าวอย่างชัดแจ้ง อย่างไรก็ตาม แอปเหล่านี้จะไม่ได้รับเครือข่ายที่ถูกจำกัดเป็นค่าเริ่มต้น แอป ที่แมปผ่าน PANS สามารถตั้งค่าเครือข่าย OEM ที่จำกัดเป็นค่าเริ่มต้นได้ และไม่จำเป็นต้องมี สิทธิ์เข้าถึงเครือข่ายที่จำกัดเพื่อใช้งาน เมื่อแอปดังกล่าวมีเครือข่าย OEM ที่ถูกจำกัดซึ่ง PANS กำหนดให้เป็นเครือข่ายเริ่มต้น แอปก็จะมีสิทธิ์ขอเครือข่าย OEM ดังกล่าวอย่างชัดเจนด้วย หากแอปเลือกที่จะทำเช่นนั้น

ตรวจสอบแอปอ้างอิง

เรามีแอปอ้างอิง (รวมถึงโค้ด) ชื่อ NetworkPreferenceApp ในบิลด์ยานยนต์สำหรับดีบักของผู้ใช้ ซึ่งแสดงวิธีทำสิ่งต่อไปนี้

  • ใช้เมตริก PANS
  • กำหนดนโยบาย PANS
  • ตั้งค่านโยบายเริ่มต้นสำหรับอุปกรณ์
  • ล้างนโยบาย
  • ใช้นโยบายในการบูต
  • ใช้ Driver Distraction API (ดูหลักเกณฑ์สิ่งรบกวนผู้ขับขี่)
  • อัปเดต Wi-Fi แบบไดนามิกด้วย OEM_PAID และ OEM_PRIVATE

เมตริก

เพื่อเพิ่มความโปร่งใสเกี่ยวกับการใช้ข้อมูล เราจึงรวบรวมและแสดงเมตริกเกี่ยวกับปริมาณข้อมูลที่ส่งผ่านการแมปเครือข่าย OEM_PAID และ OEM_PRIVATE

การแก้ปัญหา

เงื่อนไขการแก้ปัญหาส่วนใหญ่เกิดจากแอปใช้เครือข่ายที่ไม่ถูกต้อง (ไม่มีการเชื่อมต่อเครือข่าย) หรือมีการใช้อินเทอร์เน็ตเกินโควต้า หากต้องการเปิดใช้การแก้ปัญหาอย่างรวดเร็ว ให้ทำดังนี้

  • การเชื่อมต่อ dumpsys มีรายการเครือข่ายเริ่มต้นต่อแอปที่ใช้งานอยู่ และแอปที่เชื่อมโยง (แมปจาก PANS)
  • Netd dumpsys มีที่อยู่ IP ของ UID และกฎไฟร์วอลล์
  • Netstats dumpsys มีเมตริก PANS ต่อแอป เช่น แอปใดใช้เครือข่าย OEM ใด

คุณดูข้อมูล dumpsys ทั้งหมดได้โดยสร้างรายงานข้อบกพร่องของ Android