Cómo administrar límites de costos de red de uso medido (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Este tema detalla los procedimientos recomendados para mantener el reconocimiento de los cambios de estado del plan de datos y costo de la conexión de red, y para permitir que la aplicación use esta información, a fin de evitar costos adicionales de roaming y no superar el límite especificado para la transferencia de datos mediante las clases en el espacio de nombres Windows.Networking.Connectivity.

Requisitos previos

Los siguientes ejemplos usan JavaScript y se basan en la muestra de información de red. Para obtener ayuda sobre cómo crear una aplicación de Windows en tiempo de ejecución con JavaScript, consulta Crear la primera aplicación de Windows en tiempo de ejecución con JavaScript.

Es importante saber qué es un ConnectionProfile y cómo acceder a la información que representa. Para obtener más información, consulta el tema Cómo recuperar información de conexión de red. Si quieres ver más ejemplos de código, descarga la muestra de información de red.

¿Qué son las redes de uso medido?

Una red de uso medido es cualquier red que impone un costo al usuario por el uso de una cantidad específica de datos o por el servicio de roaming. La mayoría de los proveedores de red móvil han establecido límites en la cantidad de datos transferidos por mes, para cada usuario, y exceder el límite de datos (o transferir datos con roaming) le puede salir muy caro al usuario. Con la creciente popularidad de las tecnologías de banda ancha móvil, aumentar la demanda del consumo de datos incrementa el impacto de este problema, lo que podrá generar un conjunto más variable de planes de datos. Como consecuencia, las aplicaciones de Windows en tiempo de ejecución necesitan reconocer tales limitaciones de la red y comportarse en consecuencia a medida que cambian las condiciones.

Windows 8, Windows Server 2012 y Windows Phone 8.1 y versiones posteriores clasifican las redes de uso medido según tengan límites de costos variables, fijos o no restringidos. La enumeración NetworkCostType define estos valores. Si un usuario supera el límite especificado por el plan de datos o usa el servicio de roaming, la mayoría de las redes imponen un costo excesivo ya sea en términos financieros, o al bloquear o desacelerar el acceso.

La mayoría de los usuarios de redes móviles se desplazan entre varias redes, de uso medido y otras, durante el transcurso del día. El usuario podría usar una red 3G o 4G para tener conectividad de red cuando está fuera de su casa o de la oficina. Tanto en casa como en la oficina, generalmente habrá una o más redes Wi-Fi disponibles. Pero estas redes Wi-Fi dejarán de estar disponibles al salir del lugar. También puede haber ocasiones en las que no haya ninguna red disponible. Debido a la proliferación de redes de banda ancha móvil y Wi-Fi, estos escenarios de cambio de red son cada vez más habituales.

¿Quiénes se ven afectados?

El uso incorrecto del ancho de banda de red de uso medido puede afectar el prestigio de tu aplicación y el de tu organización. En general, se deben respetar las siguientes instrucciones para todas las aplicaciones de Windows en tiempo de ejecución (en especial, aquellas que transfieren grandes cantidades de datos):

Instrucciones generales

Tu aplicación puede reconocer los cambios de conexión, en este caso los campos de plan de datos o costo, si está registrada para eventos de cambio de conexión. Una vez notificada de un cambio, tu aplicación puede acceder al ConnectionProfile indicado para obtener información actualizada, antes de que se tome una decisión para adaptar el comportamiento de la aplicación. Para obtener instrucciones sobre este proceso, consulta Cómo administrar eventos de conexión y cambios de disponibilidad.

Las siguientes propiedades ConnectionCost, específicas de los escenarios de red de uso medido, se pueden usar para recopilar información e identificar la configuración actual del plan de datos de una conexión específica:

Propiedad Descripción

ApproachingDataLimit

Obtiene un valor que indica si una conexión se está acercando a la concesión de uso especificada por el plan de datos, definido por el operador. Esta limitación es comúnmente conocida como límite de datos.

NetworkCostType

Obtiene un valor que indica el costo actual de red para una conexión.

  • Unrestricted El uso de esta conexión de red es ilimitado. No tiene cargos por uso ni límites de capacidad.
  • Fixed: el uso de esta conexión de red no tiene restricciones hasta un límite de datos especificado por el operador.
  • Variable: el uso de esta conexión de red se mide en función de los bytes.
  • Unknown: la información sobre costos no está disponible para esta conexión de red.

OverDataLimit

Obtiene un valor que indica si una conexión ha superado la concesión de uso especificada por el plan de datos, definido por el operador.

Roaming

Obtiene un valor que indica si la conexión es con una red fuera del proveedor doméstico.

 

Las aplicaciones que usan redes de uso medido para conectarse a destinos en Internet pueden obtener información sobre los costos directamente llamando a GetInternetConnectionProfile y accediendo a las propiedades de costos asociadas. Al usar esta información, la aplicación puede seguir estas directrices para decidir la mejor manera de usar los recursos de red:

Comportamiento Directrices de las aplicaciones Ejemplo

Normal

Si el NetworkCostType es Unrestricted o Unknown y el ConnectionCost no es Roaming, entonces la aplicación debería implementar un comportamiento Normal.

En escenarios Normal, la aplicación no implementa restricciones. Las aplicaciones tratan la conexión como Unlimited en costo y Unrestricted para los cargos por uso y límites de capacidad.

Ejemplos:

  • Reproducir una película en HD completa.
  • Descargar un archivo grande sin restricciones ni peticiones de interfaz de usuario.
  • La aplicación de reproductor multimedia puede reproducir una película HD completa.
  • Una aplicación descarga un archivo grande sin restricciones ni peticiones.

Conservador

Si el NetworkCostType es Fixed o Variable y el ConnectionCost no es Roaming ni OverDataLimit, entonces la aplicación debería implementar un comportamiento Conservative.

En escenarios conservadores, la aplicación implementa restricciones para optimizar el uso de la red para controlar transferencias en redes de uso medido.

Ejemplos:

  • Reproducir películas en resoluciones bajas.
  • Demorar descargas que no sean críticas.
  • Evitar la captura previa de información a través de una red.
  • Alternar a un modo de solo encabezado al recuperar mensajes de correo electrónico.
  • La aplicación de reproductor multimedia puede reproducir películas con resoluciones bajas.
  • La aplicación demora las descargas que no son críticas.

Participación

Si el ConnectionCost es Roaming o OverDataLimit, tu aplicación debería implementar un comportamiento Opt-In.

En escenarios de participación, la aplicación controla casos en los que el costo de acceso de red es excesivamente superior al costo del plan. Por ejemplo, cuando un usuario está en modo roaming, un proveedor móvil puede cargar una tarifa más alta por el uso de datos.

Ejemplos:

  • Preguntar al usuario antes de acceder a la red.
  • Suspender todas las actividades de red de datos en segundo plano.
  • La aplicación pregunta al usuario por el acceso a la red.
  • La aplicación suspende todas las actividades de red de datos en segundo plano.

 

Con este ejemplo de código se comprueba el costo de la conexión y devuelve sugerencias para el comportamiento adecuado de la aplicación.

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;
}

Diferencias de comportamiento entre aplicaciones de la Tienda Windows y aplicaciones de Windows Phone

Algunos proveedores de banda ancha móvil no establecen la información sobre los costos del plan de un usuario en el perfil aprovisionado para la banda ancha móvil. El usuario es responsable de especificar esta información sobre los costos en Windows y Windows Phone.

La información sobre los costos se indica de manera distinta para las redes de banda ancha móvil. En Windows 8.1, si el usuario no establece la información sobre los costos para la banda ancha móvil, NetworkCostType se indicará como de costo Fixed. En Windows Phone 8.1, si no se establece la información sobre los costos de la banda ancha móvil (datos móviles), se indicará como Unknown. Esta diferencia de comportamiento afecta a las instrucciones generales de más arriba para comprobar el costo de la conexión y devuelve sugerencias para el comportamiento apropiado de la aplicación. Con las instrucciones de más arriba, Windows 8.1 sugeriría un comportamiento Conservative y Windows Phone 8.1, Normal. Ambas plataformas deberían sugerir un comportamiento Conservative. Por tanto, las instrucciones generales sobre el comportamiento apropiado se deberían revisar en Windows Phone para perfiles de banda ancha móvil.

Controlar el tamaño máximo de transferencias

Transferir archivos grandes en una red de uso medido puede ocasionar costos imprevistos para el usuario. Las aplicaciones que sincronizan, cargan y descargan archivos en una red de uso medido pueden hacerlo sin el permiso del usuario, solo si el tamaño de los archivos es menor al tamaño máximo de transferencia especificado por el operador.

Para transferir grandes cantidades de datos, las aplicaciones deberían tener el permiso del usuario o esperar tener acceso a una red sin restricciones. De manera opcional, la aplicación puede permitirle al usuario omitir mensajes futuros de permiso.

El siguiente código de ejemplo demuestra de qué manera recuperar el tamaño máximo de transferencias de una conexión:

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");
}

Resumen

En este tema revisamos escenarios de red de uso medido y cómo prevenir de la mejor manera que la aplicación conectada incurra en cargos adicionales en nombre del usuario final.

Si bien aquí se cubren escenarios básicos de red de uso medido, un evento NetworkStatusChanged también puede representar cambios en la disponibilidad de una conexión. Si quieres obtener más información e instrucciones acerca de cómo proceder mejor ante estos escenarios, consulta Cómo administrar eventos de conexión y cambios de disponibilidad.

Temas relacionados

Otros

Crear la primera aplicación de Windows en tiempo de ejecución con JavaScript

Cómo controlar excepciones en aplicaciones de red

Cómo administrar eventos de conexión y cambios de disponibilidad

Cómo recuperar información de localidad y adaptador de red

Cómo recuperar información de conexión de red

Cómo recuperar datos de uso de conexión de red

Referencia

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

Muestras

Muestra de información de red

Muestra del estado de red en segundo plano