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

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

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

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

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

שירות PANS יכול:

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

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

ל-PANS יש יתרונות מרכזיים ליצרני ציוד מקורי:

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

איור 1. מסגרת PANS

הטמעת PANS

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

איור 2. הטמעת PANS

OemNetworkPreference

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

  • OEM_PAID משמש בעיקר לאפליקציות שאפשר לנתב גם ברשתות של יצרני ציוד מקורי (OEM) וגם ברשתות אחרות.
  • OEM_PRIVATE משמש בעיקר לאפליקציות של יצרני ציוד מקורי כדי לקבל גישה לרשת ייעודית.
/**
* 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

כדי להשתמש בממשקי ה-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, אפשר להשתמש ב-API ‏WifiNetworkSuggestion עם ממשקי ה-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 זמינה בגרסאות build לכלי רכב לצורך ניפוי באגים על ידי משתמשים, וממחישה איך:

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

איור 3. אפליקציית עזר

מדדים

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

פתרון בעיות

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

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

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