Como gerenciar restrições de custo de redes limitadas (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Este tópico detalha as práticas recomendadas para manter o reconhecimento das alterações de status de custo de conexão de rede ou do plano de dados e habilitar o aplicativo para usar essas informações, a fim de evitar a incorrência de custos adicionais para roaming ou o excesso de um limite especificado de transferência de dados usando classes do namespace Windows.Networking.Connectivity.

Pré-requisitos

Os exemplos a seguir usam JavaScript e se baseiam na Exemplo de informações de rede. Para obter instruções sobre a criação de um aplicativo do Tempo de Execução do Windows em JavaScript, consulte Criar seu primeiro aplicativo do Tempo de Execução do Windows em JavaScript.

É importante saber o que o ConnectionProfile é e como acessar as informações que ele representa. Para obter mais informações, consulte Como recuperar informações da conexão de rede. Para obter exemplos de código adicionais, baixe o Exemplo de informações da rede.

O que são redes limitadas?

Uma rede limitada é qualquer rede que impõe um custo para o usuário referente a uma quantidade especificada de uso de dados ou durante o roaming. A maioria dos provedores de rede móvel impôs limites de utilização na quantidade de dados transferidos por mês, por usuário, e exceder o limite de utilização de dados (ou transferir dados durante o roaming) pode resultar em encargos significativos para o usuário. Com a crescente popularidade das tecnologias de banda larga móvel, o aumento da demanda de consumo de dados aumentará o impacto dessa questão, levando a um conjunto mais variável de planos de dados. Dessa forma, os aplicativos do Tempo de Execução do Windows precisam saber sobre essas limitações de rede e adaptar seu comportamento de acordo com as mudanças nas condições.

O Windows 8, Windows Server 2012 e Windows Phone 8.1 e posterior categorizam redes limitadas como permitindo limites de custo irrestritos, fixos ou variáveis. A enumeração NetworkCostType define esses valores. Se um usuário ultrapassa o limite de utilização especificado pelo plano de dados ou está em roaming, a maioria das redes implementa um encargo excessivo, seja no sentido financeiro ou pelo bloqueio/aceleração do acesso.

A maioria dos usuários de rede móvel moverá entre várias redes, limitadas e de outros tipos, durante todo o dia. Uma rede 3G/4G pode ser usada para estabelecer conectividade de rede fora de casa ou do escritório. Em casa ou no escritório, geralmente há uma ou mais redes Wi-Fi disponíveis. De modo semelhante, essas redes podem estar indisponíveis quando o usuário sai de casa. Nem sempre há uma rede disponível. Dada a expansão das redes Wi-Fi e de banda larga móvel, esses cenários de alteração de rede são cada vez mais comuns.

Quem é afetado?

O uso indevido de largura de banda de redes limitadas pode afetar a reputação do seu aplicativo e da sua organização. Em geral, todos os aplicativos do Tempo de Execução do Windows (especialmente aqueles que transferem grandes quantidades de dados) precisam seguir a orientação abaixo.

Orientações gerais

Seu aplicativo pode reconhecer alterações na conexão (neste caso, alterações no custo ou no plano de dados) por meio do registro para eventos de alteração de conexão. Logo que é notificado de uma alteração, seu aplicativo pode acessar o ConnectionProfile indicado para obter informações atuais antes de tomar qualquer decisão sobre como adaptar seu comportamento. Para obter instruções sobre esse processo, consulte Como gerenciar eventos de conexão de rede e mudanças na disponibilidade.

As seguintes propriedades de ConnectionCost (específicas aos cenários de rede limitada) podem ser usadas para coletar informações e identificar configurações de plano de dados atuais para uma conexão específica:

Propriedade Descrição

ApproachingDataLimit

Obtém um valor que indica se uma conexão está se aproximando da utilização de dados permitida especificada pelo plano de dados, que é definido pela portadora. Essa limitação é mais conhecida como limite de dados.

NetworkCostType

Obtém um valor que indica o custo de rede atual de uma conexão.

  • Unrestricted: o uso dessa conexão de rede é ilimitado. Não há tarifas de uso nem restrições de capacidade.
  • Fixed: o uso dessa conexão de rede é irrestrito até um limite de dados específico definido pela portadora.
  • Variable: o uso dessa conexão é medido com base em bytes.
  • Unknown: as informações sobre custo não estão disponíveis para essa conexão de rede.

OverDataLimit

Obtém um valor que indica se a conexão ultrapassou a utilização de dados permitida especificada pelo plano de dados, que é definido pela portadora.

Roaming

Obtém um valor que indica se a conexão é estabelecida com uma rede fora do provedor doméstico.

 

Os aplicativos que usam redes limitadas para se conectarem a destinos na Internet podem obter informações de custo diretamente, chamando GetInternetConnectionProfile e acessando as propriedades de custo associadas. Usando essas informações, o aplicativo pode seguir estas diretrizes para decidir a melhor maneira de usar os recursos de rede:

Comportamento Diretrizes do Aplicativo Exemplo

Normal

Se o NetworkCostType for Unrestricted ou Unknown e o ConnectionCost não for Roaming, o aplicativo deve implementar o comportamento Normal.

Em cenários Normal, seu aplicativo não implementa as restrições. Os aplicativos tratam a conexão como Unlimited em termos de custo e Unrestricted em termos de tarifas de uso e restrições de capacidade.

Exemplos:

  • Reproduzir um filme inteiro em HD.
  • Baixe um arquivo grande sem restrições ou avisos da IU.
  • O aplicativo de player de mídia reproduz um filme em HD inteiro.
  • Um baixa um arquivo grande sem restrições ou prompts.

Conservador

Se o NetworkCostType for Fixed ou Variável, e o ConnectionCost não for Roaming ou OverDataLimit, o aplicativo deve implementar o comportamento Conservative.

Em cenários conservadores, o aplicativo implementa as restrições para otimizar o uso da rede e realizar transferências em redes limitadas.

Exemplos:

  • Reproduzir filmes em resoluções mais baixas.
  • Atrasar downloads não críticos.
  • Evitar a pré-obtenção de informações em uma rede.
  • Alternar para um modo somente cabeçalhos ao recuperar mensagens de email.
  • O aplicativo de player de mídia reproduz filmes em resoluções menores.
  • O aplicativo atrasar downloads não críticos.

Aceitação

Se o ConnectionCost for Roaming ou OverDataLimit, o aplicativo deve implementar o comportamento Opt-In.

Em cenários de aceitação, o aplicativo lida com casos em que o custo de acesso à rede é muito maior que o custo do plano. Por exemplo, quando um usuário está em roaming, uma operadora móvel pode cobrar uma taxa de uso de dados maior.

Exemplos:

  • Avisar o usuário antes de acessar a rede.
  • Suspender todas as atividades de rede com dados em segundo plano.
  • O aplicativo solicita que o usuário acesse a rede.
  • O aplicativo suspende todas as atividades de rede com dados em segundo plano.

 

Este exemplo de código verifica o custo da conexão e retorna sugestões de comportamento apropriado do aplicativo.

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

Comportamentos diferentes entre os aplicativos da Windows Store e da Loja do Windows Phone

Alguns fornecedores de banda larga móvel não definem as informações de custo para o plano de um usuário no perfil provisionado para banda larga móvel. O usuário é responsável por inserir as informações de custo no Windows e Windows Phone.

As informações de custo são relatadas de forma diferente para as redes de banda larga móvel. No Windows 8.1, se as informações de custo para a banda larga móvel não forem definidas pelo usuário, NetworkCostType será relatado como custo Fixed. No Windows Phone 8.1, se as informações de custo para a banda larga móvel (dados da rede celular) não forem definidas, ele as reportará como Unknown. Essa diferença de comportamento afeta a diretriz geral acima para saber como verificar o custo da conexão e retornar sugestões sobre o comportamento de aplicativo apropriado. Usando a diretriz acima, o Windows 8.1 sugeriria o comportamento Conservative e o Windows Phone 8.1 sugeriria o comportamento Normal. Ambas as plataformas devem sugerir o comportamento Conservative. Como resultado, a diretriz geral para o comportamento apropriado deve ser analisada no Windows Phone para perfis de banda larga móvel.

Manipulando o tamanho de transferência máximo

Transferir grandes arquivos por uma rede limitada pode resultar em custos significativos e inesperados para o usuário. Os aplicativos que sincronizam, fazem upload ou baixam arquivos em uma rede limitada só poderão fazer isso sem permissão do usuário se o tamanho do arquivo for inferior ao tamanho de transferência máximo especificado pela operadora.

Para transferir grandes quantidades de dados, os aplicativos devem obter permissão do usuário ou aguardar para acesso a uma rede irrestrita. Opcionalmente, o aplicativo pode permitir que o usuário ignore futuras mensagens de permissão.

O código de exemplo a seguir demonstra como recuperar o tamanho de transferência máximo para uma conexão:

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

Resumo

Neste tópico, revisamos os cenários de redes limitadas e qual a melhor maneira de impedir que seu aplicativo conectado incorra em encargos adicionais em nome do usuário final.

Embora isso abranja cenários de rede limitada, um evento NetworkStatusChanged também pode representar alterações na disponibilidade de uma conexão. Para saber mais e obter orientação sobre a melhor opção para se envolver nesses cenários, consulte Como gerenciar eventos de conexão e mudanças na disponibilidade.

Tópicos relacionados

Outro

Crie seu primeiro aplicativo do Tempo de Execução do Windows em JavaScript

Como resolver exceções em aplicativos de rede

Como gerenciar eventos de conexão de rede e mudanças na disponibilidade

Como recuperar informações do adaptador de rede e da localidade

Como recuperar informações da conexão de rede

Como recuperar dados de uso da conexão de rede

Referência

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

Exemplos

Exemplo de informações de rede

Exemplo de tela de fundo de status de rede