हर ऐप्लिकेशन के लिए नेटवर्क चुनना (पीएनएस)

ओईएम और गाड़ी के मालिक, दोनों ही कनेक्टिविटी से जुड़े कई अनुरोध करते हैं. इसलिए, गाड़ियों में कनेक्टिविटी की ज़रूरत बढ़ती जा रही है. इससे डेटा फ़ुटप्रिंट और उससे जुड़ी लागतें भी बढ़ जाती हैं. हर ऐप्लिकेशन के लिए नेटवर्क चुनने की सुविधा (पीएएनएस) का इस्तेमाल करके, चुने गए ऐप्लिकेशन का ट्रैफ़िक उन नेटवर्क पर रूट करें जिनके लिए ओईएम ने पेमेंट किया है.

PANS की मदद से, डेटा के इस्तेमाल की मात्रा और लागत को मैनेज किया जा सकता है. साथ ही, कार में बेहतर, सुरक्षित, और कनेक्टेड अनुभव दिया जा सकता है. PANS:

  • इसमें ConnectivityManager में जोड़ा गया एक नया एपीआई शामिल है. यह सिर्फ़ ऑटोमोटिव डिवाइसों के लिए उपलब्ध है.
  • इसमें वाई-फ़ाई के सुझाव देने वाले एपीआई का अपडेट किया गया वर्शन शामिल है. इंटरनेट कनेक्टिविटी के लिए वाई-फ़ाई के सुझाव देने वाला एपीआई देखें. इससे, पीएएनएस नेटवर्क की क्षमताओं को डाइनैमिक तरीके से बदलने की सुविधा मिलती है.
  • यह कुकी, काम की मेट्रिक इकट्ठा करती है.
  • रेफ़रंस ऐप्लिकेशन उपलब्ध कराता है.

पैन की ज़रूरत क्यों होती है?

पीएएनएस ये काम कर सकते हैं:

  • ऐप्लिकेशन से नेटवर्क की मैपिंग को डाइनैमिक तरीके से अपडेट करना.
  • ऐप्लिकेशन में बदलाव किए बिना, ऐप्लिकेशन-लेवल की राउटिंग मैनेज करें.
  • सिर्फ़ ओईएम की अनुमति वाले ऐप्लिकेशन, मैप किए गए ओईएम नेटवर्क को ऐक्सेस कर सकते हैं.
  • इस सुविधा को लागू करने के लिए, ऐप्लिकेशन डेवलपर को कोई बदलाव करने की ज़रूरत नहीं है.
  • उपयोगकर्ता के लिए उपलब्ध मेट्रिक, OEM मैनेज किए गए नेटवर्क के लिए, ऐप्लिकेशन से नेटवर्क तक के डेटा के इस्तेमाल को ट्रैक करती हैं.
  • नेटवर्क का ऐक्सेस सुरक्षित है. इसका गलत इस्तेमाल, अनचाहे इस्तेमाल के मामलों या बिना अनुमति वाले ऐप्लिकेशन के ज़रिए नहीं किया जा सकता.
  • PANS ऐप्लिकेशन से नेटवर्क की मैपिंग में हुए बदलावों के बारे में उपयोगकर्ताओं को सूचना दी जाती है.
  • सभी उपयोगकर्ताओं के लिए, एक जैसा नेटवर्क कॉन्फ़िगरेशन लागू होता है.

मुख्य फ़ायदे

PANS, OEM को ये मुख्य फ़ायदे देता है:

  1. ओईएम, उपयोगकर्ताओं के बजाय नेटवर्क ट्रैफ़िक के लिए पेमेंट कर सकते हैं:
    • सिस्टम अपडेट, उपयोगकर्ता को बिना किसी शुल्क के उपलब्ध कराए जा सकते हैं.
    • उपयोगकर्ता को, तय किए गए ऐप्लिकेशन के नेटवर्क इस्तेमाल की सुविधा बिना किसी शुल्क के दी जा सकती है.
    • टेलीमेट्री और अन्य आंकड़ों को उपयोगकर्ता बिना किसी शुल्क के मैनेज कर सकता है.
  2. OEM यह पक्का कर सकते हैं कि अहम ऐप्लिकेशन, उपयोगकर्ता के डेटा प्लान के बिना भी कनेक्ट रहें. उदाहरण के लिए, सुरक्षा के लिहाज़ से ज़रूरी सुविधाएं जैसे कि मैप, Assistant (बिना हाथ लगाए ड्राइविंग करना), और सिस्टम अपडेट, डेटा प्लान न होने पर भी काम करती हैं.
  3. PANS, Android में नेटवर्क ट्रैफ़िक की राउटिंग के लिए, कंट्रोल की अतिरिक्त सुविधा देता है. उदाहरण के लिए, ओईएम, ऐप्लिकेशन-लेवल के ट्रैफ़िक की राउटिंग के लिए, लॉजिकल नेटवर्क टोपोलॉजी को बेहतर तरीके से तय कर सकते हैं.

PANS लागू करना

PANS को लागू करने के लिए, नया ConnectivityManager एपीआई, setOemNetworkPreference उपलब्ध कराया गया है. यह नया एपीआई, ऐप्लिकेशन को OemNetworkPreference से मैप करता है. यह एपीआई सिर्फ़ वाहन में लगे डिवाइसों के लिए उपलब्ध है. इसे @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_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 को कॉल करना

PANS API का इस्तेमाल करने के लिए:

  1. किसी ऐप्लिकेशन को नेटवर्क की प्राथमिकता के हिसाब से मैप करने के लिए, OemNetworkPreferences का इस्तेमाल करें.
  2. OemNetworkPreferences ऑब्जेक्ट के साथ setOemNetworkPreference को कॉल करें.
  3. एपीआई के पूरा होने की सूचना पाने के लिए, Runnable इंटरफ़ेस का इस्तेमाल करें.

उदाहरण के लिए:

// 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 लागू करते समय, इन बातों का ध्यान रखें:

  • नेटवर्क की प्राथमिकताएं, बूट करने के दौरान सेव नहीं होती हैं. इसलिए, हर बूट पर इन्हें फिर से लागू करना पड़ता है.
  • किसी ऐप्लिकेशन के लिए प्राथमिकता सेट करने के लिए, उसे इंस्टॉल करना ज़रूरी नहीं है. इसलिए, अनइंस्टॉल किए गए ऐप्लिकेशन के लिए नेटवर्क की प्राथमिकताएं पहले से सेट की जा सकती हैं.
  • किसी भी समय, किसी ऐप्लिकेशन को सिर्फ़ एक नेटवर्क प्राथमिकता से मैप किया जा सकता है.
  • नेटवर्क की प्राथमिकताओं का इस्तेमाल, किसी ऐप्लिकेशन के डिफ़ॉल्ट नेटवर्क को सेट करने के लिए किया जाता है. यह वह नेटवर्क होता है जिसका इस्तेमाल तब किया जाता है, जब किसी ऐप्लिकेशन ने किसी खास एपीआई के ज़रिए यह नहीं बताया होता कि उसे किन नेटवर्क का इस्तेमाल करना है. इससे कनेक्टिविटी की ज़्यादातर ज़रूरतें पूरी हो जाती हैं. साथ ही, इससे NetworkRequest एपीआई जैसे खास एपीआई का इस्तेमाल जारी रखा जा सकता है, ताकि ऐप्लिकेशन के इस्तेमाल के मौजूदा उदाहरणों में कोई रुकावट न आए. उदाहरण के लिए, जब कोई ऐप्लिकेशन सिर्फ़ बिना शुल्क वाले नेटवर्क पर कोई कार्रवाई करना चाहता है, तो PANS उसे किसी दूसरे नेटवर्क का इस्तेमाल करने के लिए मजबूर नहीं करेगा.

नेटवर्क कॉन्फ़िगर करना

नेटवर्क की प्राथमिकता से जुड़ी सेटिंग का इस्तेमाल करते समय, OEM_PAID या OEM_PRIVATE की सुविधा वाला नेटवर्क उपलब्ध होना चाहिए. Android, ईथरनेट और वाई-फ़ाई नेटवर्क के लिए, सुविधाओं को कॉन्फ़िगर करने की सुविधा देता है. ईथरनेट नेटवर्क के लिए, रिसॉर्स ओवरले config_ethernet_interfaces का इस्तेमाल किया जा सकता है. इसे कंपाइल करने के समय सेट किया जाता है.

Wi-Fi के लिए, WifiNetworkSuggestion एपीआई का इस्तेमाल 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 अनुमति हो. इस अनुमति को ओईएम कंट्रोल करते हैं.

इस अनुमति वाले ऐप्लिकेशन, पाबंदी वाले नेटवर्क का इस्तेमाल कर सकते हैं. हालांकि, इसके लिए ऐप्लिकेशन को साफ़ तौर पर अनुरोध करना होगा. हालांकि, इन ऐप्लिकेशन के लिए डिफ़ॉल्ट तौर पर, प्रतिबंधित नेटवर्क सेट नहीं किए जाएंगे. PANS के ज़रिए मैप किए गए ऐप्लिकेशन के लिए, ओईएम के प्रतिबंधित नेटवर्क को डिफ़ॉल्ट के तौर पर सेट किया जा सकता है. साथ ही, इन ऐप्लिकेशन को प्रतिबंधित नेटवर्क का इस्तेमाल करने के लिए अनुमति की ज़रूरत नहीं होगी. जब PANS, ऐसे किसी ऐप्लिकेशन के लिए OEM नेटवर्क को डिफ़ॉल्ट नेटवर्क के तौर पर असाइन करता है, तो ऐप्लिकेशन के पास यह विकल्प होता है कि वह उस OEM नेटवर्क से साफ़ तौर पर अनुरोध करे.

रेफ़रंस ऐप्लिकेशन की समीक्षा करना

उपयोगकर्ता के डीबग किए गए ऑटोमोटिव बिल्ड में, NetworkPreferenceApp नाम का रेफ़रंस ऐप्लिकेशन (कोड के साथ) दिया गया है. इससे यह पता चलता है कि:

  • PANS मेट्रिक का इस्तेमाल करें.
  • PANS की नीति सेट करें.
  • डिवाइस के लिए डिफ़ॉल्ट नीति सेट करें.
  • नीति को साफ़ तौर पर बताना.
  • बूट करने पर नीति लागू करें.
  • ड्राइवर का ध्यान भटकाने वाले ऐप्लिकेशन से जुड़े एपीआई का इस्तेमाल करें (ड्राइवर का ध्यान भटकाने वाले ऐप्लिकेशन से जुड़े दिशा-निर्देश देखें).
  • OEM_PAID और OEM_PRIVATE की मदद से, वाई-फ़ाई को डाइनैमिक रूप से अपडेट करें.

मेट्रिक

डेटा के इस्तेमाल के बारे में पारदर्शिता बनाए रखने के लिए, OEM_PAID और OEM_PRIVATE नेटवर्क मैपिंग पर ट्रांसमिट किए गए डेटा की मात्रा से जुड़ी मेट्रिक इकट्ठा की जाती हैं और उन्हें उपलब्ध कराया जाता है.

समस्या का हल

समस्या हल करने से जुड़ी ज़्यादातर शर्तें, किसी ऐप्लिकेशन के गलत नेटवर्क का इस्तेमाल करने (कोई नेटवर्क कनेक्टिविटी नहीं) या डेटा के ज़्यादा इस्तेमाल की वजह से होती हैं. जल्दी समाधान पाने की सुविधा चालू करने के लिए:

  • कनेक्टिविटी dumpsys में, हर ऐप्लिकेशन के हिसाब से डिफ़ॉल्ट नेटवर्क और उनसे जुड़े ऐप्लिकेशन की सूची शामिल होती है. इन्हें PANS से मैप किया जाता है.
  • Netd dumpsys में यूआईडी आईपी और फ़ायरवॉल के नियम शामिल होते हैं.
  • Netstats dumpsys में, हर ऐप्लिकेशन के हिसाब से PANS मेट्रिक शामिल होती हैं. उदाहरण के लिए, किन ऐप्लिकेशन ने किस ओईएम नेटवर्क का इस्तेमाल किया.

Android की बग रिपोर्ट बनाकर, dumpsys का पूरा डेटा ऐक्सेस किया जा सकता है.