Управление тарифными ограничениями в сети с лимитным тарифным планом (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этой теме даны подробные рекомендации о том, как обеспечить получение информации об изменениях затрат на сетевое подключение или состояния тарифных планов и позволить вашему приложению использовать эту информацию, чтобы избежать дополнительных затрат на роуминг или превышения установленного предела передачи данных, используя классы в пространстве имен Windows.Networking.Connectivity.

Необходимые условия

В следующих примерах, основанных на образце с информацией о сети, используется JavaScript. Общую справку по созданию приложения среды выполнения Windows на JavaScript см. в разделе Создание первого приложения среды выполнения Windows на JavaScript.

Важно знать, что такое ConnectionProfile и как получить доступ к представляемой им информации. Подробнее см. в статье о том, как получить информацию о сетевом подключении. Чтобы получить дополнительные примеры кода, скачайте пример Network Information.

Что такое сети с лимитным тарифным планом?

Сеть с лимитным тарифным планом — это любая сеть, в которой с пользователей взимается плата за передачу установленного объема данных или за роуминг. Большинство поставщиков услуг мобильной связи накладывают ограничение на объем данных, передаваемых за месяц, или данных, передаваемых одним пользователем. Превышение ограничения на объем данных (или передача данных в роуминге) может привести к существенным затратам пользователя. С ростом популярности технологий высокоскоростного мобильного подключения повышается спрос на потребление данных, что может обострить эту проблему и привести к большему разнообразию тарифных планов. Поэтому приложениям среды выполнения Windows необходимо учитывать такие сетевые ограничения и соответствующим образом реагировать на изменение условий.

Windows 8, Windows Server 2012 и Windows Phone 8.1, а также их последующие версии разделяют сети с лимитным тарифным планом на разрешающие неограниченный доступ, фиксированные лимиты или лимиты с переменными затратами. В перечислении NetworkCostType определены эти значения. Если пользователи превышают установленные тарифным планом лимиты или находятся в роуминге, в большинстве сетей применяется резкое увеличение накладных расходов, реализуемое либо за счет повышения стоимости, либо путем блокировки или ограничения доступа.

Большинство пользователей мобильной связи в течение дня переходят между зонами действия разных сетей с лимитными и другими тарифными планами. Сеть 3G/4G позволяет выполнять подключение, когда пользователь находится вне дома или офиса. Дома или в офисе часто доступны одна или несколько сетей Wi-Fi, но эти сети Wi-Fi становятся недоступны, когда пользователь покидает свой дом или офис. Возможны также случаи, когда не доступна ни одна из сетей. Сети Wi-Fi и мобильные широкополосные сети становятся все более распространенными в рамках сценариев смены сетей.

Кого это касается

Неправильное использование пропускной способности сети с лимитным тарифным планом может повлиять на репутацию вашего приложения и организации. Как правило, все приложения среды выполнения Windows (особенно передающие большие объемы данных) должны соблюдать изложенные ниже правила.

Общие правила

Вы можете учесть в приложении изменения состояний сетевого подключения, в данном случае — изменения стоимости или тарифного плана, выполнив регистрацию для получения уведомлений о событиях изменения состояния подключения. После получения уведомления об изменении приложение может выполнить доступ к указанному профилю ConnectionProfile для получения текущей информации, прежде чем будет принято решение об изменении поведения приложения. Инструкции по этому процессу см. в разделе Как управлять событиями и изменениями доступности подключения.

Приведенные ниже свойства ConnectionCost, характерные для сети с лимитным тарифным планом, позволяют собирать информацию и идентифицировать текущие параметры тарифного плана для конкретного соединения.

Свойство Описание

ApproachingDataLimit

Принимает значение, указывающее, достигнут ли для подключения предельный объем передаваемых данных согласно определяемому оператором тарифному плану. Это ограничение чаще всего именуется потолком данных.

NetworkCostType

Принимает значение, указывающее текущие затраты на подключение к сети.

  • Unrestricted: использование этого сетевого подключения не ограничено. В нем нет ограничений по оплате за использование и по емкости.
  • Fixed: использование этого сетевого подключения не ограничено до определенного предела, заданного оператором.
  • Variable: использование этого подключения учитывается побайтно.
  • Unknown: для этого сетевого подключения информация о затратах недоступна.

OverDataLimit

Принимает значение, указывающее, превышен ли для подключения предельный объем передаваемых данных согласно определяемому оператором тарифному плану.

Roaming

Принимает значение, указывающее, установлено ли подключение за пределами сети домашнего поставщика.

 

Приложения, использующие сети с лимитным тарифным планом для подключения к узлам в Интернете, могут получить сведения о стоимости напрямую, вызывая GetInternetConnectionProfile и выполняя доступ к связанным свойствам цен. Используя эту информацию, приложение может действовать по следующим правилам, чтобы выбрать наилучший способ использования сетевых ресурсов:

Поведение Правила для приложения Пример

Обычное

Если NetworkCostTypeUnrestricted или Unknown, а ConnectionCost не Roaming, ваше приложение должно реализовывать поведение Normal.

При сценариях Normal ваше приложение не реализует ограничения. Подключение считается неограниченным (Unlimited) по стоимости и неограниченным (Unrestricted) по оплате за использование и по емкости.

Примеры.

  • Проиграйте HD DVD целиком.
  • Скачайте большой файл без ограничений или подсказок пользовательского интерфейса.
  • Приложение проигрывателя мультимедиа воспроизводит фильм в формате HD от начала до конца.
  • Приложение может скачать большой файл без каких-либо ограничений и запросов.

Консервативное поведение

Если NetworkCostTypeFixed или переменная, а ConnectionCost не Roaming или OverDataLimit, ваше приложение должно реализовывать поведение Conservative.

В консервативных сценариях приложение реализует ограничения, чтобы оптимизировать использование сети для передач через сети с лимитным тарифным планом.

Примеры.

  • Проиграйте фильмы с более низкими разрешениями.
  • Приостановите некритичные задачи по скачиванию.
  • Избегайте предварительной загрузки информации по сети.
  • При извлечении электронных сообщений переходите в режим отображения только заголовков.
  • Приложение проигрывателя мультимедиа может воспроизводить фильмы с более низким разрешением.
  • Приложение приостанавливает некритичные задачи по скачиванию.

С согласием

Если ConnectionCostRoaming или OverDataLimit, ваше приложение должно реализовывать поведение Opt-In.

При сценариях с согласием приложение обрабатывает случаи, когда стоимость доступа к сети значительно выше стоимости тарифного плана. Например, когда пользователь находится в роуминге, оператор мобильной связи может взимать плату по более высокому тарифу.

Примеры.

  • Запросите пользователя, прежде чем подключиться к такой сети.
  • Приостановите все сетевые операции над данными, выполняющиеся в фоновом режиме.
  • Приложение предлагает пользователю подключиться к сети.
  • Приложение приостанавливает все сетевые операции с данными, выполняющиеся в фоновом режиме.

 

В этом примере кода проверяется стоимость подключения и возвращаются предложения по соответствующему поведению приложения.

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

Различия в поведении приложений Магазина Windows и приложений Магазина Windows Phone

Некоторые поставщики высокоскоростного мобильного подключения не указывают информацию о затратах для тарифного плана пользователя в профиле, предусмотренном для работы с высокоскоростным мобильным подключением. Пользователь несет ответственность за ввод информации о затратах в Windows и Windows Phone.

Информация о затратах по-разному передается в сетях высокоскоростных мобильных подключений. В Windows 8.1 при отсутствии указанной пользователем информации о затратах на высокоскоростное мобильное подключение параметру NetworkCostType будет присвоено значение Fixed. В Windows Phone 8.1 при отсутствии информации о затратах на высокоскоростное мобильное подключение (данных о сети мобильной связи) этот параметр будет иметь значение Unknown. Эти различия в поведении влияют на вышеуказанные общие правила проверки стоимости подключения и возвращают предложения по соответствующему поведению приложений. С учетом вышеуказанных правил Windows 8.1 предлагает поведение Conservative, а Windows Phone 8.1 — поведение Normal. Обе платформы должны предлагать поведение Conservative. Поэтому общие правила соответствующего поведения должны быть изменены в Windows Phone для профилей высокоскоростного мобильного подключения.

Обработка максимального размера передачи

Передача больших файлов через сеть с лимитным тарифным планом может привести к значительным затратам, неожиданным для пользователя. Приложения, которые синхронизируют, передают или скачивают файлы в сети с лимитным тарифным планом, могут это делать без разрешения пользователя, только если размер файла меньше значения размера максимальной передачи, заданного оператором.

Для передачи больших объемов данных приложения должны получить разрешение пользователя или дождаться доступа к неограниченной сети. Дополнительно приложение может позволить пользователю обходить будущие запросы разрешения пользователя.

В примере ниже показано, как для соединения получить значение максимального размера передачи:

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

Сводка

Мы рассмотрели в этом разделе сценарии использования сетей с лимитным тарифным планом и получили сведения о том, как избежать дополнительных затрат для конечных пользователей сетевого приложения.

Хотя здесь приведены сценарии использования сетей с лимитным тарифным планом, событие NetworkStatusChanged также может отражать изменения доступности подключения. Подробности и рекомендации по оптимальному применению описанных сценариев см. в разделе Как управлять событиями и изменениями доступности подключения.

Связанные разделы

Прочие ссылки

Создание первого приложения среды выполнения Windows на JavaScript

Обработка исключений в сетевых приложениях

Как управлять событиями и изменениями доступности подключения

Получение данных о сетевом адаптере и расположении

Как получить информацию о сетевом подключении

Получение данных об использовании подключения за определенный период

Ссылки

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

Примеры

Пример Network information

Пример Network status background