Uygulama başına ağ seçimi (PANS)

Araçlarda, hem OEM'ler hem de araç sahipleri tarafından istenen kullanım alanı listesinin giderek büyümesi nedeniyle bağlantıya olan ihtiyaç artıyor. Bu da veri ayak izinin ve ilişkili maliyetlerin artmasına neden oluyor. Belirtilen uygulamaların trafiğini OEM tarafından ödeme yapılan ağlara yönlendirmek için uygulama başına ağ seçimi (PANS) özelliğini kullanın.

PANS ile hem veri kullanımının hacmini ve maliyetini yönetebilir hem de güçlü, güvenli ve bağlı bir araç deneyimi sunabilirsiniz. PANS:

  • Yalnızca otomotiv cihazlarda kullanılabilen ConnectivityManager'e eklenen yeni bir API'den oluşur.
  • Dinamik olarak değişen PANS ağ özelliklerine destek eklemek için güncellenmiş bir kablosuz öneri API'si (İnternet bağlantısı için kablosuz öneri API'si bölümüne bakın) sağlar.
  • Destekleyici metrikleri toplar.
  • Referans uygulama sağlar.

Neden PANS?

PANS şunları yapabilir:

  • Uygulama ile ağ eşlemelerini dinamik olarak güncelleyin.
  • Uygulamalarda değişiklik yapmadan uygulama düzeyinde yönlendirmeyi yönetin.
  • Yalnızca OEM'nin izin verdiği uygulamalar eşlenen OEM ağlarına erişebilir.
  • Uygulama geliştiricilerin bu özelliği uygulamak için herhangi bir değişiklik yapmasına gerek yoktur.
  • Kullanıcılara yönelik metrikler, OEM tarafından yönetilen ağlar için uygulamadan ağa veri kullanımını izler.
  • Ağ erişimi güvenlidir ve istenmeyen kullanım alanları veya yetkisiz uygulamalar aracılığıyla kötüye kullanılamaz.
  • PANS uygulamadan ağa eşlemelerinde yapılan değişiklikler kullanıcılara bildirilir.
  • Tüm kullanıcılar için aynı ağ yapılandırması uygulanır.

Temel avantajlar

PANS, OEM'lere aşağıdaki temel avantajları sunar:

  1. OEM'ler, kullanıcılar yerine ağ trafiği için ödeme yapabilir:
    • Sistem güncellemeleri kullanıcıya ücretsiz olarak sağlanabilir.
    • Belirtilen uygulamaların ağ kullanımı, kullanıcıya ücretsiz olarak sağlanabilir.
    • Telemetri ve diğer analizler, kullanıcıya maliyet yansıtılmaksızın yönetilebilir.
  2. OEM'ler, kullanıcı tarafından ödenen bir veri planı olmadan bile kritik uygulamaların bağlı kalmasını sağlayabilir. Örneğin, haritalar, asistan (ellerinizi kullanmadan sürüş) ve sistem güncellemeleri gibi güvenlik açısından kritik özellikler, kullanıcının veri planı olmadığında bile çalışmaya devam eder.
  3. PANS, Android'de ağ trafiği yönlendirmesine özgü ek ayrıntılı kontrol sağlar. Örneğin, OEM'ler uygulama düzeyindeki trafiğin yönlendirilmesi için mantıksal bir ağ topolojisini optimum şekilde tanımlayabilir.

Şekil 1. PANS çerçevesi

PANS'i uygulama

PANS'i uygulamak için yeni bir ConnectivityManager API (setOemNetworkPreference) sağlanır. Bu yeni API, uygulamaları bir OemNetworkPreference ile eşler. Bu API yalnızca otomotiv cihazlar tarafından kullanılabilir ve yeni bir signature izniyle @SystemApi olarak ek açıklamaya sahiptir.

Şekil 2. PANS'i uygulama

OemNetworkPreference

OemNetworkPreference, OEM_PAID ve OEM_PRIVATE NetworkCapabilities üzerinde bir soyutlamadır. Uygulamaları paket adına göre ağ tercihine eşler. Ağ tercihleri, ağ hiyerarşileri oluşturmanıza olanak tanır. Örneğin, bir uygulamanın OEM_NETWORK_PREFERENCE_OEM_PAID tercihiyle eşlenmesi, uygulamaya atanan varsayılan ağların aşağıdaki önceliğine neden olur: Öncelikle bir UNMETERED ağı kullanın, UNMETERED kullanılamıyorsa bir OEM_PAID ağı kullanın ve OEM_PAID kullanılamıyorsa sistem varsayılan ağını kullanın.

  • OEM_PAID Öncelikli olarak hem OEM hem de OEM dışı ağlarda yönlendirilebilecek uygulamalar için kullanılır.
  • OEM_PRIVATE Genellikle OEM uygulamalarının kendilerine özel bir ağa erişmesi için kullanılır.
/**
* 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'lerini çağırma

PANS API'lerini kullanmak için:

  1. Bir uygulamayı ağ tercihiyle eşlemek için OemNetworkPreferences simgesini kullanın.
  2. OemNetworkPreferences nesnesini kullanarak setOemNetworkPreference'ü çağırın.
  3. API'nin tamamlanmasını dinlemek için Runnable arayüzünü kullanın.

Örnek:

// 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);

Dikkat edilmesi gereken noktalar

PANS'i uygularken aşağıdaki noktaları göz önünde bulundurun:

  • Ağ tercihleri, önyüklemeler arasında korunmaz ve her önyüklemede yeniden uygulanması gerekir.
  • Bir uygulama için tercih oluşturmak için uygulamanın yüklü olması gerekmez. Bu nedenle, kaldırılan uygulamaların ağ tercihleri proaktif olarak ayarlanabilir.
  • Bir uygulama, herhangi bir zamanda yalnızca tek bir ağ tercihiyle eşlenebilir.
  • Ağ tercihleri, bir uygulamanın varsayılan ağını ayarlamak için kullanılır. Bu ağ, uygulama özel API'lerden biri aracılığıyla kullanmak istediği ağları belirtmediğinde kullanılır. Bu, bağlantı ihtiyaçlarının büyük bir kısmını karşılamakla kalmaz, aynı zamanda mevcut uygulama kullanım alanlarını bozmamak için NetworkRequest API gibi özel API'lerin kullanılmaya devam edilmesine de olanak tanır. Örneğin, bir uygulama yalnızca sınırsız bir ağ üzerinden işlem yapmak istediğinde PANS, uygulamayı başka bir ağ kullanmaya zorlamaz.

Ağ yapılandırma

İlgili ağ tercihi kullanılırken OEM_PAID veya OEM_PRIVATE özelliklerine sahip bir ağ mevcut olmalıdır. Android, Ethernet ve kablosuz ağların özelliklerinin yapılandırılması için destek sağlar. Ethernet ağları için config_ethernet_interfaces kaynak yer paylaşımını kullanabilirsiniz. Bu değer derleme zamanında ayarlanır.

Wi-Fi için WifiNetworkSuggestion API, yeni Android 12 API'leri setOemPaid(Boolean) ve setOemPrivate(Boolean) ile kullanılabilir. Bu, çalışma zamanında değiştirilebilir.

Aşağıdaki örnekleri inceleyin:

  1. config_ethernet_interfaces adlı bir kaynak yer paylaşımı şunları belirtir:
    • Yapılandırılacak arayüzün adı.
    • İstenen NetworkCapabilities değerleri.
      <!-- 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. Bu WiFiNetworkSuggestion dinamik olarak değiştirilebilir:
    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(new WifiNetworkSuggestion.Builder()
                   .setSsid(WifiInfo.sanitizeSsid(ssid))
                   .setOemPrivate(true)
                   .build());
    mWifiManager.addNetworkSuggestions(list);

PANS ağlarına erişimi kısıtlama

Bir ağı OEM_PAID veya OEM_PRIVATE özellikleriyle etiketlemek, o ağı kısıtlanmış ağ olarak işaretler. Kısıtlanmış ağlar, yalnızca OEM'ler tarafından kontrol edilen CONNECTIVITY_USE_RESTRICTED_NETWORKS iznine sahip uygulamalar tarafından kullanılabilir.

Bu izne sahip uygulamalar, açıkça talep etmeleri koşuluyla kısıtlanmış ağları kullanabilir. Ancak bu uygulamalar varsayılan olarak kısıtlanmış ağları almaz. PANS üzerinden eşlenen uygulamalarda varsayılan olarak kısıtlanmış OEM ağları ayarlanabilir ve bu ağları kullanmak için kısıtlanmış ağ izni gerekmez. Bu tür bir uygulamanın varsayılan ağı olarak PANS tarafından atanmış kısıtlanmış bir OEM ağı varsa uygulama, isterse söz konusu OEM ağını açıkça isteyebilir.

Referans uygulamayı inceleme

Kullanıcı hata ayıklama otomotiv derlemelerinde NetworkPreferenceApp adlı bir referans uygulama (kod dahil) sağlanır ve aşağıdakilerin nasıl yapılacağı gösterilir:

  • PANS metriklerini kullanma
  • PANS politikasını ayarlayın.
  • Cihaz için varsayılan bir politika ayarlayın.
  • Bir politikayı temizleyin.
  • Açılışta politika uygulama
  • Driver Distraction API'yi kullanın (Sürücünün Dikkatini Dağıtan Unsurlar Yönergeleri'ne bakın).
  • OEM_PAID ve OEM_PRIVATE ile kablosuz bağlantıyı dinamik olarak güncelleyin.

Şekil 3. Referans uygulama

Metrikler

Veri kullanımıyla ilgili şeffaflığı kolaylaştırmak için OEM_PAID ve OEM_PRIVATE ağ eşlemeleri üzerinden aktarılan veri miktarıyla ilgili metrikler toplanır ve kullanılabilir hale getirilir.

Sorun giderme

Sorun giderme koşullarının çoğu, uygulamanın yanlış ağı kullanmasından (ağ bağlantısı yok) veya veri aşımından kaynaklanır. Hızlı çözümleri etkinleştirmek için:

  • Bağlantı dumpsys, uygulama başına etkin varsayılan ağların ve bu ağlarla ilişkili uygulamaların (PANS'den eşlenen) listesini içerir.
  • Netd dumpsys, UID IP ve güvenlik duvarı kurallarını içerir.
  • Netstats dumpsys, uygulama başına PANS metriklerini içerir. Örneğin, hangi uygulamaların hangi OEM ağını kullandığı.

Tüm dumpsys verileri, Android hata raporu oluşturarak kullanılabilir.