Comment gérer les contraintes liées au coût des connexions réseau limitées (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 répertorie les meilleures pratiques pour, d’une part, prendre en compte les modifications affectant le coût de la connexion réseau ou l’état du forfait données et, d’autre part, utiliser ces informations dans votre application afin d’éviter l’accroissement des dépenses pour cause d’itinérance ou le dépassement d’un seuil spécifié de transfert des données à l’aide des classes de l’espace de noms Windows.Networking.Connectivity.

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.

Qu’est-ce qu’une connexion réseau limitée ?

Une connexion réseau limitée est un réseau qui impose à l’utilisateur un coût pour une quantité spécifiée d’utilisation des données ou en cas d’itinérance. La plupart des fournisseurs de réseau mobile ont instauré des limites sur les quantités de données transférées par mois et par utilisateur. En cas de dépassement du seuil de données (ou lors du transfert de données en cours d’itinérance), l’utilisateur peut se voir facturer des sommes importantes. Compte tenu de la popularité croissante des technologies à haut débit mobile, il est vraisemblable que la hausse de la demande en termes de consommation de données augmentera l’impact de ce problème, et que cela donnera lieu à des forfaits données plus variables. Par conséquent, les applications Windows Runtime doivent avoir connaissance de telles limitations du réseau et adapter leur comportement à mesure que les conditions évoluent.

Windows 8, Windows Server 2012 et Windows Phone 8.1 et versions ultérieures classent les connexions réseau limitées selon qu’elles autorisent des limites de coût non restreintes, fixes ou variables. L’énumération NetworkCostType définit ces valeurs. Si un utilisateur dépasse la limite précisée par le forfait données ou qu’il se trouve en mode d’itinérance, la plupart des réseaux implémentent des mesures drastiques, soit financièrement soit en bloquant ou en limitant l’accès.

Au cours d’une même journée, les utilisateurs de réseau mobile ont en majorité accès à diverses connexions réseau, limitées ou non. Ils peuvent utiliser un réseau 3G/4G pour se connecter lorsqu’ils sont absents de leur bureau ou de leur domicile. À la maison ou au bureau, un ou plusieurs réseaux Wi-Fi sont souvent disponibles ; en revanche, ils ne sont plus disponibles à l’extérieur. De même, il peut parfois arriver qu’aucun réseau ne soit disponible. Face à la prolifération des réseaux Wi-Fi et haut débit mobiles, ces scénarios de changement de réseau sont de plus en plus courants.

Qui est concerné ?

Une utilisation incorrecte de la bande passante de la connexion réseau limitée peut avoir des répercussions sur la réputation de votre application et de votre organisation. En général, toutes les applications Windows Runtime, notamment celles qui transfèrent de grandes quantités de données, doivent respecter les recommandations ci-dessous :

Recommandations d’ordre général

Votre application peut être informée des changements de connexion (dans le cas présent, les changements du forfait données), en s’inscrivant pour les événements de modification. Une fois notifiée d’un changement, votre application peut accéder au ConnectionProfile indiqué pour récupérer les informations actuelles avant qu’une décision ne soit prise pour adapter le comportement de l’application. Pour obtenir des instructions sur ce processus, voir Comment gérer les événements de connexion réseau et les changements de disponibilité.

Spécifiques aux scénarios impliquant des connexions réseau limitées, les propriétés ConnectionCost suivantes peuvent être utilisées pour recueillir des informations et identifier les paramètres actuels de forfait données pour une connexion spécifique :

Propriété Description

ApproachingDataLimit

Obtient une valeur indiquant si une connexion approche de son quota d’utilisation de données indiqué par le plan de facturation à l’usage, qui est défini par l’opérateur. En général, on appelle cette restriction plafond de données.

NetworkCostType

Obtient une valeur indiquant le coût du réseau actuel pour une connexion.

  • Unrestricted : l’utilisation de cette connexion réseau est illimitée. Aucuns frais d’utilisation ni aucunes contraintes de capacité ne sont appliqués.
  • Fixed : connexion réseau illimitée jusqu’à un certain seuil de données défini par l’opérateur.
  • Variable : connexion limitée à un volume de données exprimé en octets.
  • Unknown : informations sur les coûts non disponibles pour cette connexion réseau.

OverDataLimit

Obtient une valeur indiquant si la connexion a dépassé son quota d’utilisation de données indiqué par le plan de facturation à l’usage, qui est défini par l’opérateur.

Roaming

Obtient une valeur indiquant si la connexion est établie avec un réseau extérieur au fournisseur personnel.

 

Les applications qui utilisent des connexions réseau limitées pour se connecter à des destinations sur Internet peuvent obtenir des informations sur les coûts directement en appelant GetInternetConnectionProfile et en accédant aux propriétés de coût associées. En utilisant ces informations, une application peut respecter ces recommandations pour décider de la meilleure manière d’utiliser les ressources réseau :

Comportement Recommandations pour les applications Exemple

Normal

Si NetworkCostType est Unrestricted ou Unknown et que ConnectionCost n’est pas Roaming, l’application doit alors implémenter un comportement Normal.

Dans les scénarios Normal, votre application n’implémente pas de restrictions. Les applications considèrent la connexion comme illimitée (Unlimited) en termes de coûts et non restreinte (Unrestricted) par des frais d’utilisation et des contraintes de capacité.

Exemples :

  • Lire un film HD en intégralité.
  • Télécharger un gros fichier sans restrictions ou invites de l’interface utilisateur.
  • L’application de lecteur multimédia lit l’intégralité d’un film HD.
  • L’application télécharge un fichier volumineux sans aucun message d’invite ni restriction.

Conservative

Si NetworkCostType est Fixed ou Variable et que ConnectionCost n’est pas Roaming ou OverDataLimit, l’application doit alors implémenter un comportement Conservative.

Dans les scénarios prudents, l’application implémente des restrictions pour l’optimisation de l’utilisation du réseau pour gérer les transferts sur les connexions réseau limitées.

Exemples :

  • Lire des films dans des résolutions plus basses.
  • Différer les téléchargements non essentiels.
  • Éviter la prérecherche d’informations sur un réseau.
  • Passer à un mode se limitant aux en-têtes pour la récupération des messages électroniques.
  • L’application de lecteur multimédia lit les films dans des résolutions inférieures.
  • L’application diffère les téléchargements non essentiels.

Opt-In

Si ConnectionCost est Roaming ou OverDataLimit, votre application doit implémenter un comportement Opt-In.

Pour les scénarios d’abonnement, votre application gère les cas où le coût d’accès au réseau est nettement supérieur au coût du plan de facturation. Par exemple, lorsqu’un utilisateur se connecte en itinérance, un opérateur mobile peut alors facturer des frais nettement supérieurs.

Exemples :

  • Afficher une invite avant que l’utilisateur accède au réseau.
  • Suspendre toutes les activités réseau de données en arrière-plan.
  • L’application invite l’utilisateur à accéder au réseau.
  • L’application suspend toutes les activités réseau de données en arrière-plan.

 

Cet exemple de code vérifie le coût de connexion et renvoie des suggestions de comportement approprié pour l’application.

var CostGuidance = { Normal: 0, Conservative: 1, OptIn: 2 };
// GetCostGuidance returns an object with a Cost (with value of CostGuidance), 
// CostName (a string) and Reason, which says why the cost is what it is.

function GetCostGuidance() 
{
    var connectionCost = Windows.Networking.Connectivity.NetworkInformation.getInternetConnectionProfile().getConnectionCost();
    var networkCostConstants = Windows.Networking.Connectivity.NetworkCostType;
    var Retval = new Object();
    if (connectionCost.roaming || connectionCost.overDataLimit)
    {
        Retval.Cost = CostGuidance.OptIn;
        Retval.CostName = "OptIn";
        Retval.Reason = connectionCost.roaming
            ? "Connection is roaming; using the connection may result in additional charge."
            : "Connection has exceeded the usage cap limit.";
    }
    else if (connectionCost.networkCostType == networkCostConstants.fixed
        || connectionCost.networkCostType == networkCostConstants.variable)
    {
        Retval.Cost = CostGuidance.conservative;
        Retval.CostName = "Conservative";
        Retval.Reason = connectionCost.networkCostType == NetworkCostType.fixed
            ? "Connection has limited allowed usage."
            : "Connection is charged based on usage. ";
    }
    else
    {
        Retval.Cost = CostGuidance.Normal;
        Retval.CostName = "Normal";
        Retval.Reason = connectionCost.networkCostType == networkCostConstants.unknown
            ? "Connection is unknown"
            : "Connection cost is unrestricted";
    }

    return Retval;
}

Différences de comportement entre les applications du Windows Store et les applications du Windows Phone Store

Certains fournisseurs haut débit mobile ne définissent pas les informations sur les coûts pour le plan d’un utilisateur dans le profil configuré pour le haut débit mobile. Sur Windows et Windows Phone, l’utilisateur est chargé d’entrer ces informations sur les coûts.

Les informations sur les coûts sont indiquées différemment pour les réseaux haut débit mobile. Sur Windows 8.1, si les informations sur les coûts ne sont pas définies par l’utilisateur pour le haut débit mobile, NetworkCostType sera indiqué en tant que coût fixe (Fixed). Sur Windows Phone 8.1, si les informations sur les coûts pour le haut débit mobile (données cellulaires) ne sont pas définies, elles seront indiquées en tant que Unknown. Cette différence de comportement affecte les instructions d’ordre général ci-dessus concernant la façon de vérifier le coût de connexion et retourne des suggestions de comportement approprié pour l’application. En suivant les recommandations ci-dessus, Windows 8.1 suggérerait le comportement Conservative et Windows Phone 8.1 suggérerait le comportement Normal. Les deux plateformes suggéreraient le comportement Conservative. Les instructions d’ordre général concernant le comportement approprié doivent donc être vérifiées sur Windows Phone pour les profils haut débit mobile.

Gestion de la taille de transfert maximale

Le transfert de gros fichiers sur un réseau limité peut engendrer des coûts élevés et inattendus pour l’utilisateur. Les applications qui synchronisent, envoient ou téléchargent des fichiers par le biais d’un réseau limité peuvent le faire sans l’autorisation de l’utilisateur uniquement si la taille du fichier est inférieure à la taille « Max Transfer » spécifiée par l’opérateur.

Pour transférer de grandes quantités de données, les applications doivent obtenir l’autorisation de l’utilisateur ou attendre d’avoir accès à un réseau illimité. Éventuellement, une application peut autoriser l’utilisateur à ignorer les messages ultérieurs relatifs aux autorisations utilisateur.

L’exemple de code suivant illustre comment extraire la taille de transfert maximale pour une connexion :

var dataPlanStatus = InternetProfile.getDataPlanStatus();

if (dataPlanStatus.maxTransferSizeInMegabytes !== null) {
  
    mySample.displayStatus("Maximum Transfer Size in Megabytes: " + dataPlanStatus.maxTransferSizeInMegabytes);
}
else{

    mySample.displayError("Maximum Transfer Size in Megabytes: " + "Not Defined");
}

Récapitulatif

Dans cette rubrique, nous avons passé en revue les différents scénarios impliquant des connexions réseau limitées et nous avons vu comment empêcher votre application connectée d’encourir des frais supplémentaires imputables à l’utilisateur final.

Bien qu’il s’applique aux connexions réseau limitées, un événement NetworkStatusChanged peut également représenter les changements de disponibilité d’une connexion. Pour obtenir plus d’informations et des recommandations sur la meilleure façon de répondre à ces scénarios, voir Comment gérer les événements de connexion réseau et les changements de disponibilité.

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 événements de connexion réseau et les changements de disponibilité

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

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

Exemples

Exemple d’informations réseau

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