Comment gérer les événements de connexion réseau et les changements de disponibilité (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Cette rubrique montre comment s’inscrire pour recevoir des notifications de changements d’état de la connexion réseau et comment récupérer les informations d’état actuelles à l’aide des classes de l’espace de noms Windows.Networking.Connectivity.

Nous vous donnerons également des recommandations relatives au comportement des applications qui prendront en charge une expérience utilisateur cohérente dans des scénarios réseau.

Prérequis

Les exemples suivants utilisent JavaScript et s’appuient sur l’exemple d’informations réseau. Pour obtenir une aide générale sur la création d’une application Windows Runtime en JavaScript, voir Créer votre première application Windows Runtime en JavaScript.

Il est important de savoir ce qu’est un ConnectionProfile et comment accéder aux informations qu’il représente ; pour plus d’informations, voir Comment récupérer des informations de connexion réseau. Pour obtenir des exemples de code supplémentaires, téléchargez l’exemple d’informations réseau.

En quoi consiste un événement de modification d’état de la connexion ?

Les événements de modification d’état indiquent des changements au niveau de la disponibilité, du type ou du coût de connectivité offerts par une connexion individuelle. Les dernières applications connectées se heurtent fréquemment à des scénarios de traversée réseau qui sont propres à l’utilisation d’appareils mobiles. Quand Windows Runtime détecte un nouveau réseau, il le propose automatiquement en tant que nouvelle option de connectivité. Par exemple, si un utilisateur utilise un appareil sur un réseau 3G/4G pour diffuser des données et que, par la suite, il arrive dans le champ d’un réseau Wi-Fi, la nouvelle option de connectivité est disponible pour permettre à l’application de l’exploiter. Bien sûr, cela signifie également qu’un utilisateur peut sortir du champ d’un réseau, lequel peut même être en cours d’utilisation.

Compte tenu de toutes ces possibilités, il est important de doter votre application d’une logique capable de faire des choix pertinents en cas de changement de la disponibilité du réseau. Les connexions réseau existantes ne basculent pas automatiquement vers d’autres connexions de façon transparente. Votre application doit s’inscrire aux événements networkstatuschanged et s’adapter en conséquence.

Inscription aux notifications d’événements de modification d’état de connexion

Pour que votre application puisse s’adapter en cas de modification de l’état du réseau, elle doit savoir à quel moment ces modifications ont lieu. L’exemple de code suivant montre comment s’inscrire aux notifications d’événements de networkstatuschanged pour un profil de connexion spécifique.

Vous devez écrire du code capable de gérer les exceptions au moment où vous appelez la plupart des méthodes réseau asynchrones. En outre, les méthodes de l’espace de noms Windows.Networking.Connectivity qui s’inscrivent aux notifications d’événements ou tentent de récupérer ConnectionProfile peuvent lever des exceptions. Votre gestionnaire d’exceptions peut récupérer des informations plus détaillées sur la cause de l’exception dans le but d’analyser l’échec et de prendre des décisions appropriées. Pour plus d’informations, voir Comment gérer les exceptions dans les applications réseau.


// Define some variables used

// A variable to store network status change information
var internetProfileInfo = "";

// A  boolean to keep track of registration for network status change notifications
var registeredNetworkStatusNotif = false;

var networkInfo = Windows.Networking.Connectivity.NetworkInformation;

//Register for Network Status Change notifications, and display new Internet Connection Profile information on network status change
function registerForNetworkStatusChangeNotif() {

    // register for network status change notifications
    if (!registeredNetworkStatusNotif) {
        try {
            networkInfo.addEventListener("networkstatuschanged", onNetworkStatusChange);
            registeredNetworkStatusNotif = true;

            if (internetProfileInfo === "") {
                mySample.displayStatus("No network status change. ", "sample", "status");
        }
        catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message);
        }
    }
}

Quand un scénario réseau change, votre application peut avoir besoin de se désinscrire des notifications de changements d’état du réseau, si elle est déjà inscrite, puis de se réinscrire aux notifications du nouveau scénario réseau.

//Unregister for Network Status Change notifications
function unRegisterForNetworkStatusChangeNotif() {
    try {
        networkInfo.removeEventListener("networkstatuschanged", onNetworkStatusChange);
        internetProfileInfo = "";
    }
    catch (e) {
        mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

Récupération des informations de modification d’état de connexion

Quand un changement d’état se produit, un gestionnaire d’événements tel que celui décrit dans l’exemple suivant récupère le ConnectionProfile associé pour le profil de connexion Internet actif. Ce ConnectionProfile peut être utilisé pour récupérer et afficher les informations d’état de la connexion, notamment la portée actuelle, ainsi que le type et le coût de la connectivité, conformément à ce qui est défini par NetworkConnectivityLevel, NetworkTypes et NetworkCostType.

// Event handler for Network Status Change event
function onNetworkStatusChange(sender) {

    //network status changed
    internetProfileInfo = "Network Status Changed: \n\r";

    try {
        // get the ConnectionProfile that is currently used to connect to the Internet
        var internetProfile = networkInfo.getInternetConnectionProfile();
        if (internetProfile === null) {
            mySample.displayStatus("Not connected to Internet\n\r");
        }
        else {
            internetProfileInfo += getConnectionProfileInfo(internetProfile) + "\n\r";
            mySample.displayStatus(internetProfileInfo);
        }
        internetProfileInfo = "";
    }
    catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

L’état du réseau peut varier de plusieurs façons, ce qui se traduit par un événement de modification de l’état du réseau. Par exemple, un appareil peut avoir un nouveau ConnectionProfile, un nouveau coût de connexion, un nouveau niveau de connectivité, etc. Le gestionnaire d’événements ci-dessus peut utiliser la classe NetworkStateChangeEventDetails pour déterminer ce qui a changé.

Comportement recommandé pour l’application lors de la gestion des modifications d’état de connexion

Le tableau suivant recense les principaux scénarios de modification d’état de connexion et fournit des recommandations relatives au comportement des applications :

Scénario Comportement recommandé
Pert de connexion en raison d’une erreur

Les connexions peuvent être rétablies en retentant l’opération réseau. En cas d’échec, attendez qu’un événement networkstatuschanged récupère les informations d’état de connexion actuelles. Les applications doivent de préférence utiliser un intervalle d’interruption qui augmente de manière exponentielle entre chaque nouvelle tentative, sachant que la valeur de départ étant de 50 millisecondes.

Perte du réseau

Informez l’utilisateur que la connexion a été perdue, puis inscrivez-vous et attendez un événement networkstatuschanged.

Nouvelle disponibilité du réseau

Avec les appareils mobiles, les scénarios impliquant un seul appareil traversant plusieurs réseaux publics et privés sont courants. Par exemple, un utilisateur peut être connecté à un réseau haut débit mobile et discuter avec des amis à l’aide de l’application de messagerie, avant de rentrer chez lui et de se connecter à un réseau non restreint. Dans Windows 8, Windows Server 2012 et Windows Phone 8.1 et versions ultérieures, la stratégie par défaut est de privilégier un réseau non restreint par rapport à la connexion réseau limitée, et un réseau plus rapide par rapport au réseau plus lent. Cependant, les connexions existantes établies par une application ne basculent pas automatiquement sur un nouveau réseau. L’application doit jouer un rôle actif, car elle seule peut prendre la meilleure décision quant à l’utilité de basculer ou non sur un nouveau réseau.

Si le téléchargement d’un flux vidéo est presque terminé, il n’est peut-être pas judicieux de basculer sur un nouveau réseau pour redémarrer le téléchargement. En revanche, si le réseau actuel abandonne des paquets, s’il est trop lent ou s’il faut plus de temps pour que le flux se termine, il est peut-être préférable de basculer sur le nouveau réseau.

Si vous jugez qu’il est opportun de changer de réseau pour votre application, respectez les recommandations suivantes lorsque vous détectez un nouveau réseau :

1. Vérifiez le coût de la connexion au réseau et tentez à nouveau l’opération si la connexion est meilleure. Windows sélectionne automatiquement le réseau non restreint plutôt que la connexion réseau limitée et le réseau plus rapide plutôt que le réseau plus lent, le cas échéant.

2. Lors de la nouvelle tentative, si l’opération réseau réussit, annulez l’opération réseau d’origine sur le réseau précédent, le cas échéant.

Modification du coût réseau

L’utilisation des réseaux mobiles, en particulier, est souvent soumise à des restrictions spécifiques. Si le coût de la connexion réseau de votre application est modifié en raison d’une consommation supérieure à 80 % du plafond de données transmises via une connexion mobile haut débit, d’un coût variable ou de l’itinérance, adaptez le comportement de l’application comme il est indiqué dans la rubrique Comment gérer les contraintes liées au coût des connexions réseau limitées.

 

Remarque  Les développeurs confirmés peuvent également choisir d’optimiser le comportement de l’application lors de nouvelles tentatives d’opérations réseau. Par exemple, vous souhaitez peut-être remplacer une connexion existante par une nouvelle connexion sur un réseau à plus haut débit. Dans ce scénario, un développeur peut utiliser les API sockets, comme StreamSocketInformation.bandwidthStatistics, pour déterminer si le basculement sur une autre connexion est approprié.

 

Récapitulatif

Dans cette rubrique, nous avons vu comment s’inscrire aux notifications de modification d’état de connexion et comment utiliser ces notifications pour récupérer l’objet ConnectionProfile pour lequel l’événement s’est produit. Nous avons également examiné le comportement d’application recommandé lors de la gestion des scénarios de modification d’état les plus courants.

Bien que cette rubrique couvre la disponibilité du réseau, dans les scénarios impliquant des connexions réseau limitées, un événement networkstatuschanged peut également représenter une modification apportée au coût et aux propriétés du forfait données. Pour obtenir plus d’informations et des recommandations sur la meilleure façon de changer le comportement d’une application dans ces scénarios, voir Comment gérer les contraintes liées au coût des connexions réseau limitées.

Rubriques associées

Autre

Créer votre première application Windows Runtime en JavaScript

Comment gérer les exceptions dans les applications réseau

Comment gérer les contraintes liées au coût des connexions réseau limitées

Comment récupérer des informations de carte réseau et de localité

Comment récupérer des informations de connexion réseau

Comment récupérer des données d’utilisation de connexion réseau

Référence

ConnectionProfile

NetworkInformation

networkstatuschanged

networkStatusChangedEventHandler

Windows.Networking.Connectivity

Exemples

Exemple d’informations réseau

Exemple d’arrière-plan d’état du réseau