בחירת רשת לכל אפליקציה (PANS)

השימוש בקישוריות ברכבים הולך וגדל, כדי לנהל את הרשימה ההולכת וגדלה של תרחישי שימוש שמבוקשים על ידי יצרני ציוד מקורי ובעלי רכבים. כתוצאה מכך, נפח הנתונים גדל והעלויות הנלוות עולות. אפשר להשתמש בתכונה per-application network selection (PANS) כדי לנתב את התנועה של אפליקציות ספציפיות ברשתות שהתשלום עליהן מתבצע על ידי יצרן הציוד המקורי.

באמצעות PANS, אתם יכולים לנהל את נפח השימוש בנתונים ואת העלות שלו, ובו-זמנית לספק חוויית שימוש חזקה, מאובטחת ומחוברת ברכב. מספרי חשבון קבוע (PAN):

  • מדובר ב-API חדש שנוסף ל-ConnectivityManager וזמין רק למכשירים לרכב.
  • מספק API מעודכן להצעות לחיבור Wi-Fi (ראו Wi-Fi suggestion API for internet connectivity) כדי לכלול תמיכה ביכולות של רשתות PAN שמשתנות באופן דינמי.
  • איסוף מדדים תומכים.
  • מספקת אפליקציה לדוגמה.

למה כדאי להשתמש ב-PANS?

מספרי PANS יכולים:

  • עדכון דינמי של מיפויים מאפליקציות לרשתות.
  • ניהול ניתוב ברמת האפליקציה בלי לבצע שינויים באפליקציות.
  • רק אפליקציות שאושרו על ידי יצרן הציוד המקורי יכולות לגשת לרשתות הממופות של יצרן הציוד המקורי.
  • מפתחי אפליקציות לא צריכים לבצע שינויים כדי להטמיע את התכונה הזו.
  • מדדים שגלויים למשתמשים עוקבים אחרי השימוש בנתונים באפליקציה ברשתות שמנוהלות על ידי יצרן ציוד מקורי (OEM).
  • הגישה לרשת מאובטחת ואי אפשר לנצל אותה לרעה באמצעות תרחישי שימוש לא מכוונים או אפליקציות לא מורשות.
  • המשתמשים מקבלים הודעה על שינויים במיפוי של אפליקציות PANS לרשת.
  • אותה תצורת רשת מוחלת על כל המשתמשים.

יתרונות מרכזיים

היתרונות המרכזיים של PANS ליצרני ציוד מקורי (OEM):

  1. יצרני ציוד מקורי יכולים לשלם על תעבורת הרשת במקום המשתמשים:
    • עדכוני מערכת יכולים להינתן למשתמש ללא עלות.
    • אפשר לספק למשתמש את נתוני השימוש ברשת של אפליקציות ספציפיות ללא עלות.
    • אפשר לנהל טלמטריה וניתוחים אחרים ללא עלות למשתמש.
  2. יצרני ציוד מקורי יכולים לוודא שאפליקציות קריטיות יישארו מחוברות גם אם אין למשתמש תוכנית נתונים בתשלום. לדוגמה, תכונות קריטיות לבטיחות כמו מפות, Assistant (נהיגה ללא ידיים) ועדכוני מערכת ממשיכות לפעול גם כשאין למשתמש חבילת גלישה.
  3. ‫PANS מספקת רמת גרנולריות נוספת של שליטה שספציפית לניתוב של תנועת רשת ב-Android. לדוגמה, יצרני ציוד מקורי יכולים להגדיר באופן אופטימלי טופולוגיה לוגית של רשת לניתוב תעבורה ברמת האפליקציה.

הטמעה של PAN

כדי להטמיע את PANS, מסופק ממשק API חדש של ConnectivityManager,‏ setOemNetworkPreference. ה-API החדש הזה ממפה אפליקציות לOemNetworkPreference. ה-API הזה זמין רק למכשירים לרכב, והוא מסומן ב-@SystemApi עם הרשאה חדשה signature.

OemNetworkPreference

OemNetworkPreference הוא הפשטה של OEM_PAID ושל OEM_PRIVATE NetworkCapabilities למיפוי אפליקציות לפי שם החבילה להעדפה של רשת. העדפות הרשת מאפשרות היררכיות של רשתות. לדוגמה, מיפוי של אפליקציה להעדפה OEM_NETWORK_PREFERENCE_OEM_PAID יגרום להקצאת העדיפות הבאה של רשתות ברירת המחדל לאפליקציה: שימוש ברשת OEM_NETWORK_PREFERENCE_OEM_PAID קודם, אם OEM_NETWORK_PREFERENCE_OEM_PAID לא זמינה, שימוש ברשת OEM_PAID, ואם OEM_PAID לא זמינה, שימוש ברשת ברירת המחדל של המערכת.UNMETEREDUNMETERED

  • 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 APIs

כדי להשתמש בממשקי ה-API של PANS:

  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 מספק תמיכה בהגדרת יכולות לרשתות Ethernet ו-Wi-Fi. ברשתות Ethernet, אפשר להשתמש בכיסוי משאבים, 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 מוגבלות כברירת מחדל, ולא יצטרכו את הרשאת הרשת המוגבלת כדי להשתמש בהן. כש-PANS מקצה לאפליקציה כזו רשת OEM מוגבלת כרשת ברירת המחדל שלה, לאפליקציה יש גם אפשרות לבקש במפורש את רשת ה-OEM אם היא בוחרת לעשות זאת.

בדיקת אפליקציית העזר

אפליקציית הפניה (כולל קוד) בשם NetworkPreferenceApp מסופקת בגרסאות של מערכות הפעלה לרכב שמיועדות לניפוי באגים על ידי משתמשים, ומדגימה איך:

  • Consume PANS metrics.
  • הגדרת מדיניות PANS.
  • מגדירים מדיניות ברירת מחדל למכשיר.
  • מחיקת מדיניות.
  • החלת מדיניות בעת האתחול.
  • משתמשים ב-Driver Distraction API (ראו הנחיות בנושא הסחת דעת של נהגים).
  • עדכון דינמי של ה-Wi-Fi באמצעות OEM_PAID ו-OEM_PRIVATE.

מדדים

כדי לשפר את השקיפות בנוגע לשימוש בנתונים, אנחנו אוספים מדדים ומפרסמים אותם לגבי כמות הנתונים שמועברים במיפויים של רשתות OEM_PAID ו-OEM_PRIVATE.

פתרון בעיות

רוב הבעיות שדורשות פתרון נובעות משימוש באפליקציה ברשת הלא נכונה (ללא קישוריות לרשת) או משימוש יתר בחבילת הגלישה. כדי להפעיל את התכונה 'פתרונות מהירים':

  • הקישוריות dumpsys כוללת רשימה של רשתות ברירת מחדל פעילות לכל אפליקציה והאפליקציות המשויכות אליהן (ממופה מ-PANS).
  • ‫Netd dumpsys כולל UID IP וכללי חומת אש.
  • הדוח Netstats dumpsys כולל מדדים של PAN לכל אפליקציה. לדוגמה, באילו אפליקציות נעשה שימוש באיזו רשת OEM.

אפשר ליצור דוח באגים ב-Android כדי לקבל גישה לכל הנתונים של dumpsys.