انتخاب شبکه برای هر برنامه (PANS)، انتخاب شبکه برای هر برنامه (PANS)

وسایل نقلیه به طور فزاینده‌ای برای مدیریت فهرست رو به رشد موارد استفاده مورد درخواست تولیدکنندگان اصلی تجهیزات (OEM) و مالکان خودرو، به اتصال متکی هستند که منجر به افزایش ردپای داده و هزینه‌های مرتبط می‌شود. از ویژگی انتخاب شبکه به ازای هر برنامه (PANS) برای مسیریابی ترافیک برنامه‌های مشخص شده در شبکه‌هایی که توسط تولیدکنندگان اصلی تجهیزات (OEM) هزینه می‌شوند، استفاده کنید.

با PANS، می‌توانید حجم و هزینه استفاده از داده‌ها را مدیریت کنید و همزمان یک تجربه رانندگی قوی، ایمن و متصل را ارائه دهید. PANS:

  • شامل یک API جدید اضافه شده به ConnectivityManager است که فقط برای دستگاه‌های خودرو در دسترس است.
  • یک API پیشنهاد وای‌فای به‌روزرسانی‌شده ارائه می‌دهد ( برای اتصال به اینترنت به API پیشنهاد وای‌فای مراجعه کنید) تا پشتیبانی از قابلیت‌های شبکه PANS که به صورت پویا در حال تغییر هستند را شامل شود.
  • معیارهای پشتیبانی را جمع‌آوری می‌کند.
  • یک برنامه مرجع ارائه می‌دهد.

چرا PANS؟

PANS می‌تواند:

  • نگاشت‌های برنامه به شبکه را به صورت پویا به‌روزرسانی کنید.
  • مدیریت مسیریابی در سطح برنامه بدون ایجاد تغییر در برنامه‌ها.
  • فقط برنامه‌های مجاز به OEM می‌توانند به شبکه‌های OEM نقشه‌برداری شده دسترسی داشته باشند.
  • توسعه‌دهندگان برنامه برای پیاده‌سازی این ویژگی نیازی به ایجاد هیچ تغییری ندارند.
  • معیارهای کاربرپسند، میزان مصرف داده بین برنامه و شبکه را برای شبکه‌های مدیریت‌شده توسط تولیدکنندگان اصلی تجهیزات (OEM) ردیابی می‌کنند.
  • دسترسی به شبکه امن است و نمی‌توان از طریق موارد استفاده ناخواسته یا برنامه‌های غیرمجاز از آن سوءاستفاده کرد.
  • تغییرات در نگاشت‌های برنامه به شبکه PANS به کاربران اطلاع داده می‌شود.
  • پیکربندی شبکه یکسانی برای همه کاربران اعمال می‌شود.

مزایای اصلی

PANS این مزایای اصلی را برای تولیدکنندگان اصلی تجهیزات (OEM) فراهم می‌کند:

  1. تولیدکنندگان تجهیزات اصلی (OEM) می‌توانند به جای کاربران، هزینه ترافیک شبکه را پرداخت کنند:
    • به‌روزرسانی‌های سیستم می‌تواند بدون هیچ هزینه‌ای برای کاربر ارائه شود.
    • استفاده از شبکه برای برنامه‌های مشخص شده می‌تواند بدون هیچ هزینه‌ای برای کاربر فراهم شود.
    • تله‌متری و سایر تجزیه و تحلیل‌ها می‌توانند بدون هیچ هزینه‌ای برای کاربر مدیریت شوند.
  2. تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند تضمین کنند که برنامه‌های حیاتی حتی بدون طرح داده‌ای که کاربر پرداخت می‌کند، متصل می‌مانند. به عنوان مثال، ویژگی‌های ایمنی حیاتی مانند نقشه‌ها، دستیار (رانندگی بدون دخالت دست) و به‌روزرسانی‌های سیستم حتی زمانی که کاربر هیچ طرح داده‌ای ندارد، به کار خود ادامه می‌دهند.
  3. PANS جزئیات بیشتری از کنترل خاص مسیریابی ترافیک شبکه در اندروید را فراهم می‌کند. به عنوان مثال، تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند به طور بهینه یک توپولوژی منطقی شبکه را برای مسیریابی ترافیک سطح برنامه تعریف کنند.

پیاده‌سازی PANS

برای پیاده‌سازی PANS، یک API جدید ConnectivityManager به setOemNetworkPreference ارائه شده است. این API جدید، برنامه‌ها را به OemNetworkPreference نگاشت می‌کند. این API فقط برای دستگاه‌های خودرو در دسترس است و به عنوان یک @SystemApi با مجوز signature جدید حاشیه‌نویسی می‌شود.

تنظیمات شبکه 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;

فراخوانی APIهای PANS

برای استفاده از 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 در دسترس باشد. اندروید از پیکربندی قابلیت‌های شبکه‌های اترنت و وای‌فای پشتیبانی می‌کند. برای شبکه‌های اترنت، می‌توانید از یک پوشش منبع، config_ethernet_interfaces ، استفاده کنید. این در زمان کامپایل تنظیم می‌شود.

برای وای‌فای، API WifiNetworkSuggestion می‌تواند با 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 مربوط به حواس‌پرتی راننده استفاده کنید (به دستورالعمل‌های حواس‌پرتی راننده مراجعه کنید).
  • وای‌فای را با OEM_PAID و OEM_PRIVATE به صورت پویا به‌روزرسانی کنید.

معیارها

برای تسهیل شفافیت در مورد استفاده از داده‌ها، معیارهایی در مورد میزان داده‌های منتقل شده از طریق نگاشت‌های شبکه OEM_PAID و OEM_PRIVATE جمع‌آوری و در دسترس قرار می‌گیرند.

عیب‌یابی

بیشتر مشکلات عیب‌یابی یا به دلیل استفاده برنامه از شبکه اشتباه (عدم اتصال به شبکه) یا مصرف بیش از حد داده ایجاد می‌شوند. برای فعال کردن راه‌حل‌های سریع:

  • ابزار Connectivity dumpsys شامل فهرستی از شبکه‌های پیش‌فرض فعال برای هر برنامه و برنامه‌های مرتبط با آنها (که از PANS نگاشت شده‌اند) است.
  • Netd dumpsys شامل UID، IP و قوانین فایروال است.
  • Netstats dumpsys شامل معیارهای PANS به ازای هر برنامه است. برای مثال، کدام برنامه‌ها از کدام شبکه OEM استفاده کرده‌اند.

تمام داده‌های dumpsys با ایجاد یک گزارش اشکال اندروید (Android bugreport) در دسترس هستند.