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

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

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

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

ทำไมต้องแพน?

กระทะสามารถ:

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

ข้อได้เปรียบหลัก

PANS ให้ข้อดีหลักแก่ OEMS เหล่านี้:

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

รูปที่ 1 . กรอบ PANS

ใช้ PANS

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

รูปที่ 2 ใช้ PANS

การตั้งค่าเครือข่าย Oem

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 สามารถใช้ได้กับ Android 12 API ใหม่, 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
  • ตั้งค่านโยบายเริ่มต้นสำหรับอุปกรณ์
  • ล้างนโยบาย
  • ใช้นโยบายในการบูต
  • ใช้ API การเบี่ยงเบนความสนใจของผู้ขับขี่ (ดู แนวทางการเบี่ยงเบนความสนใจของผู้ขับขี่ )
  • อัปเดต Wi-Fi แบบไดนามิกด้วย OEM_PAID และ OEM_PRIVATE

รูปที่ 3 แอปอ้างอิง

เมตริก

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

การแก้ไขปัญหา

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

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

ข้อมูล dumpsys ทั้งหมดพร้อมใช้งานโดยการสร้างรายงานข้อบกพร่องของ Android