Android 10 (API düzeyi 29) ve sonraki sürümleri çalıştıran cihazlar, uygulamanızın bir cihazın kablosuz erişim noktasına otomatik olarak bağlanması için ağ kimlik bilgilerini eklemesine izin verir. WifiNetworkSuggestion
kullanarak hangi ağa bağlanılacağıyla ilgili öneriler sağlayabilirsiniz.
Platform, uygulamanızdan ve diğerlerinden gelen girişlere göre hangi erişim noktasını kabul edeceğini belirler.
Android 11 (API düzeyi 30) ve sonraki sürümlerde:
PasspointConfiguration
sağlama işlemi, öneri API'si tarafından desteklenir. Android 11'den önce,PasspointConfiguration
için temel hazırlığı yapmak içinaddOrUpdatePasspointConfiguration()
API'sinin kullanılması gerekir.- Çerçeve, TLS tabanlı Enterprise önerilerinde (EAP-TLS, EAP-TTLS ve EAP-PEAP) güvenlik şartlarını zorunlu kılar. Bu tür ağlara yönelik önerilerde bir
Root CA certificate
veserver domain name
ayarlanmalıdır.
- Çerçeve, EAP-SIM tabanlı Enterprise önerileri (EAP-SIM, EAP-AKA, EAP-AKA-PRIME) için sahiplik şartlarını zorunlu kılar. Bu tür önerilere yalnızca operatör tarafından imzalanan uygulamalar izin verir.
- Operatör tarafından imzalanan bir uygulama tarafından sağlanan öneriler için çerçeve, önerilere uygulamanın operatör imzalamasına karşılık gelen bir operatör kimliği otomatik olarak atar. İlgili SIM cihazdan çıkarıldığında bu tür öneriler otomatik olarak devre dışı bırakılır.
Android 12 (API düzeyi 31) ve sonraki sürümlerde:
Ek gizlilik, rastgele MAC adresini düzenli olarak yeniden rastgele hale getiren kalıcı olmayan MAC rastgeleleştirme özelliği aracılığıyla etkinleştirilebilir. Ağınızın rastgeleleştirme düzeyini belirtmek için
setMacRandomizationSetting
simgesini kullanın.isPasspointTermsAndConditionsSupported()
: Hükümler ve koşullar, ağ dağıtımlarının açık ağları kullanan güvenli olmayan giriş portallarını güvenli bir Passpoint ağı ile değiştirmesine olanak tanıyan bir Passpoint özelliğidir. Şartlar ve koşulların kabul edilmesi gerektiğinde kullanıcıya bir bildirim gösterilir. Şartlar ve koşullara göre sınırlandırılmış Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Cihaz bu özelliği desteklemiyorsa söz konusu ağa bağlanamaz ve alternatif veya eski bir ağ önerilmelidir.isDecoratedIdentitySupported()
: Önek süslemesi içeren ağlarda kimlik doğrulama yapılırken süslenmiş kimlik öneki, ağ operatörlerinin AAA ağının içindeki birden fazla proxy aracılığıyla açık yönlendirme yapmak için ağ erişim tanımlayıcısı (NAI) güncellemesine olanak tanır (bu konuda daha fazla bilgi için RFC 7542'ye bakın).Android 12, bu özelliği PPS-MO uzantıları için WBA spesifikasyonuna uygun olacak şekilde uygular. Süslenmiş kimlik gerektiren Passpoint ağları öneren uygulamaların, cihazın bu özelliği desteklediğinden emin olmak için önce bu API'yi çağırması gerekir. Cihaz bu özelliği desteklemiyorsa kimlik süslenmez ve ağda kimlik doğrulama başarısız olabilir.
Passpoint önerisi oluşturmak için uygulamaların PasspointConfiguration
, Credential
ve HomeSp
sınıflarını kullanması gerekir. Bu sınıflar, Wi-Fi Alliance Passpoint spesifikasyonunda tanımlanan Passpoint profilini açıklar.
Aşağıdaki kod örneğinde, bir açık, bir WPA2, bir WPA3 ağı ve bir Passpoint ağı için kimlik bilgilerinin nasıl sağlanacağı gösterilmektedir:
Kotlin
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val passpointConfig = PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration val suggestion4 = WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestionsList = listOf(suggestion1, suggestion2, suggestion3, suggestion4); val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
Java
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final PasspointConfiguration passpointConfig = new PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration final WifiNetworkSuggestion suggestion4 = new WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); add(suggestion4); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
Uygulama ilk kez bir öneri yerleştirdikten hemen sonra kullanıcıya bildirim gönderilir. Bildirim türü, cihazda çalışan Android sürümüne bağlıdır:
- Android 11 (API düzeyi 30) ve sonraki sürümlerde, uygulama ön planda çalışıyorsa kullanıcı bir iletişim kutusu, arka planda çalışıyorsa bir bildirim görür.
- Android 10'da (API düzeyi 29), uygulamanın ön planda veya arka planda çalışıp çalışmadığından bağımsız olarak kullanıcı bir bildirim görür.
Platform, ağ önerilerinden birine bağlandığında ayarlar, ağ bağlantısını ilgili önerici uygulamayla ilişkilendiren metni gösterir.
Kullanıcı bağlantısının kesilmesini işleme
Kullanıcı, bağlı olduğu ağ önerilerinden biriyle bağlantısını açıkça kesmek için kablosuz ağ seçiciyi kullanırsa bu ağ, kapsama alanındayken yoksayılır. Bu süre zarfında, uygulama ağa karşılık gelen ağ önerisini kaldırıp yeniden eklese bile söz konusu ağ otomatik bağlantı için dikkate alınmaz. Kullanıcı, daha önce bağlantısı kesilmiş bir ağa açıkça bağlanmak için kablosuz ağ seçiciyi kullanırsa bu ağ, otomatik bağlantı için hemen dikkate alınır.
Uygulamanın onay durumunu değiştirme
Ağ önerisi bildirimini reddeden kullanıcı, CHANGE_WIFI_STATE
iznini uygulamadan kaldırır. Kullanıcı, daha sonra kablosuz bağlantı kontrol menüsüne (Ayarlar > Uygulamalar ve bildirimler > Özel uygulama erişimi > Kablosuz bağlantı kontrolü > App name) giderek bu onayı verebilir.