Les appareils équipés d'Android 10 (niveau d'API 29) ou version ultérieure autorisent votre application à ajouter un réseau
pour qu’un appareil se connecte
automatiquement à un point d’accès Wi-Fi. Vous pouvez fournir
des suggestions pour le réseau auquel
vous connecter à l'aide de
WifiNetworkSuggestion
Au final, la plate-forme choisit le point d'accès à accepter en fonction
des commentaires de votre
application et d’autres.
Sur Android 11 (niveau d'API 30) ou version ultérieure:
- Provisionner une
PasspointConfiguration
est pris en charge par l'API Suggestion. Avant Android 11, en provisionnant unPasspointConfiguration
nécessite l'utilisation de la classeaddOrUpdatePasspointConfiguration()
API. - Le framework applique les exigences de sécurité aux solutions d'entreprise basées sur TLS
des suggestions (EAP-TLS, EAP-TTLS et EAP-PEAP). des suggestions à ces réseaux
doit définir un
Root CA certificate
et unserver domain name
.
- Le framework impose des exigences de propriété pour les comptes d'entreprise basés sur EAP-SIM suggestions (EAP-SIM, EAP-AKA, EAP-AKA-PRIME) ces suggestions sont autorisé uniquement par les applications signées par l'opérateur.
- Pour les suggestions fournies par une application signée par un opérateur, le framework lui attribue un identifiant d'opérateur correspondant à l'identifiant signature par l'opérateur. Telles les suggestions sont automatiquement désactivées si la carte SIM correspondante est retirée de l'appareil.
Sur Android 12 (niveau d'API 31) ou version ultérieure:
Une confidentialité supplémentaire peut être activée via la randomisation MAC non persistante, qui réorganise périodiquement l’adresse MAC aléatoire. Utiliser
setMacRandomizationSetting
afin de spécifier le niveau de randomisation pour votre réseau.isPasspointTermsAndConditionsSupported()
: Les Conditions d'utilisation sont un Passpoint. qui permet aux déploiements réseau de remplacer les portails captifs non sécurisés, qui utilisent des réseaux ouverts, avec un réseau Passpoint sécurisé. Une notification est affiché à l'utilisateur lorsqu'il est nécessaire d'accepter les conditions d'utilisation. Applis qui suggèrent des réseaux Passpoint restreints par des conditions d'utilisation doit d'abord appeler cette API pour s'assurer que l'appareil est compatible avec cette fonctionnalité. Si l'appareil n'est pas compatible avec cette fonctionnalité, il ne pourra pas se connecter à ce réseau, et un autre réseau ou un ancien réseau doit être suggéré.isDecoratedIdentitySupported()
: Lors de l'authentification auprès de réseaux avec une décoration de préfixe, le le préfixe d'identité permet aux opérateurs réseau de mettre à jour Identifiant (NAI) permettant d'effectuer un routage explicite via plusieurs proxys à l'intérieur d'un réseau AAA (voir RFC 7542 pour plus d'informations à ce sujet).Android 12 implémente cette fonctionnalité conformément à la spécification WBA pour PPS-MO extensions. Les applications qui suggèrent des réseaux Passpoint nécessitant une identité décorée doivent appelez d'abord cette API pour vérifier que l'appareil est compatible avec cette fonctionnalité. Si l'appareil n'est pas compatible avec cette fonctionnalité, l'identité ne sera pas décorée. et l'authentification auprès du réseau peut échouer.
Pour créer une suggestion Passpoint, les applications doivent utiliser le
PasspointConfiguration
,
Credential
HomeSp
cours. Ces
décrivent le profil Passpoint, défini dans le contrat Wi-Fi Alliance
Passe
caractéristiques.
L'exemple de code suivant montre comment fournir des identifiants pour une instance ouverte, une WPA2, un réseau WPA3 et un réseau Passpoint:
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);
Immédiatement après que l'application a placé une suggestion pour la première fois, l'utilisateur est notifiée. Le type de notification dépend de la version d'Android exécutée sur l'appareil:
- Sur Android 11 (niveau d'API 30) ou version ultérieure, une boîte de dialogue s'affiche si l'application est qui s'exécute au premier plan, et une notification si l'application s'exécute au premier plan en arrière-plan.
- Sous Android 10 (niveau d'API 29), l'utilisateur voit une notification, quel que soit le si l'application s'exécute au premier plan ou en arrière-plan.
Lorsque la plate-forme se connecte à l'une des suggestions de réseaux, les paramètres s'affichent Texte qui attribue la connexion réseau à l'application de suggestion correspondante.
Gérer les déconnexions des utilisateurs
Si l'utilisateur se sert du sélecteur de Wi-Fi pour se déconnecter explicitement de l'un des suggestions de réseau lorsque vous y êtes connecté, celui-ci est ignoré est toujours dans la plage. Pendant cette période, ce réseau ne sera pas pris en compte pour la connexion automatique, même si l'application supprime et ajoute de nouveau la suggestion de réseau correspondant au réseau. Si l'utilisateur se sert du sélecteur de Wi-Fi pour indiquer explicitement se connecter à un réseau qui a été déconnecté précédemment, ce réseau sera pour une connexion automatique immédiate.
Modification de l'état d'approbation de l'application
Un utilisateur qui refuse une notification de suggestion de réseau supprime
Autorisation CHANGE_WIFI_STATE
de l'application. L'utilisateur peut accorder cette approbation
dans le menu de contrôle du Wi-Fi (Paramètres >
Applications et Notifications > Application spéciale
accès > Contrôle du Wi-Fi > App name).