Desenvolvendo aplicativos conectados

Este documento fornece um conjunto de considerações sobre rede que cada aplicativo da Windows Store conectado deve conhecer.

Introdução

O Windows 8 apresenta o novo Tempo de Execução do Windows com um conjunto simples, mas poderoso de APIs que os desenvolvedores podem usar para criar aplicativos em C++, C# ou JavaScript. Uma das propriedades importantes dos aplicativos da Windows Store é que a maioria deles estará "conectada".

Este documento define um aplicativo conectado (ou com reconhecimento de rede) como um aplicativo da Windows Store que pretende usar a rede para qualquer finalidade. Todo aplicativo conectado terá de seguir as orientações abaixo para proporcionar uma experiência previsível e agradável aos usuários.

Selecionando o recurso de rede correto

Os aplicativos devem declarar funcionalidades de isolamento de rede para ter acesso a recursos de rede. Use esta lista de verificação para verificar se o isolamento de rede está configurado para seu aplicativo.

  • Determine a direção do acesso à rede exibido pelo aplicativo. As opções são solicitações de saída iniciadas pelo cliente, solicitações de entrada não solicitadas ou uma combinação delas.
  • Determine o tipo de recursos de rede com os quais o aplicativo se comunicará. Pense se o aplicativo precisa se comunicar com recursos confiáveis em uma rede doméstica, uma rede de trabalho, a Internet ou uma combinação desses tipos de rede.
  • Configure o mínimo necessário de funcionalidades de isolamento de rede no manifesto do aplicativo. Isso pode ser feito usando o Microsoft Visual Studio Express 2012 for Windows 8 durante o desenvolvimento do aplicativo.
  • Implante e execute o aplicativo para testá-lo usando as ferramentas de isolamento de rede fornecidas para solução de problemas.

As funcionalidades declaradas são impostas pelo Windows. Os aplicativos devem usar o princípio de menor privilégio e apenas adicionar as funcionalidades necessárias. A tabela a seguir detalha as funcionalidades de isolamento de rede.

Recurso de redeDescrição

Internet (Cliente)

Fornece acesso de saída à Internet e a redes em locais públicos, como aeroportos e cafeterias. A maioria dos aplicativos que requer acesso à Internet deve declarar essa funcionalidade.

Observação  

Declarada como internetClient no manifesto do aplicativo

Internet (Cliente e Servidor)

Fornece acesso de entrada e saída à Internet e a redes em locais públicos, como aeroportos e cafeterias. O acesso de entrada a portas críticas é sempre bloqueado.

Essa funcionalidades é um superconjunto da funcionalidade Internet (Cliente); não há necessidade de declarar as duas.

Observação  

Declarada como internetClientServer no manifesto do aplicativo

Redes Privadas (Cliente e Servidor)

Fornece acesso de entrada e saída a redes em locais confiáveis para o usuário, como sua casa ou seu trabalho. O acesso de entrada a portas críticas é sempre bloqueado.

Declarada como privateNetworkClientServer no manifesto do aplicativo

 

Outros certificados que podem ser necessários para seu aplicativo conectado incluem os que fornecem reconhecimento de proximidade de dispositivos ou certificados compartilhados do usuário. Para saber mais sobre as funcionalidades de declaração e isolamento de rede, veja Como configurar recursos de isolamento de rede.

Selecionando a API correta

O Tempo de execução do Windows dá suporte a uma variedade de APIs de rede para se comunicar com pontos de extremidade remotos na Internet ou em redes privadas. Para casos em que um protocolo de nível superior específico não está disponível para o desenvolvedor através de uma API, o Tempo de execução do Windows também dá suporte a soquetes TCP e UDP (além de multicast) para permitir aos desenvolvedores implementar outros protocolos de camadas mais altas.

Quem é afetado?

Todos os aplicativos da Windows Store que precisam enviar ou receber dados da rede são afetados.

Diretrizes

Primeiro, determine o recurso que você quer que seu aplicativo tenha. Se o recurso estiver em uma das áreas de recursos abaixo, use estas APIs diretamente.

APIsRecurso

Windows.Web.AtomPub, Windows.Web.Syndication

APIs para a recuperação de feeds nos formatos RSS ou Atom em várias versões. O Tempo de execução do Windows também dá suporte ao Protocolo de Publicação Atom, permitindo a publicação de coleções do Atom. Além disso, essas APIs facilitam a implementação do suporte para novos formatos, como OData.

Windows.Networking.BackgroundTransfer

APIs usadas para download/upload de conteúdo ininterrupto, com reconhecimento de custo e capacidade de continuação, mesmo quando o aplicativo que faz a chamada não está em primeiro plano. Essa API dá suporte a download usando os protocolos HTTP, HTTPS e FTP.

XMLHTTPRequest (JavaScript), HttpClient (C#), IXHR2 (C++).

APIs usadas para interagir com os serviços Web RESTful e outros protocolo baseados em HTTP.

Windows.Networking.Proximity

APIs usadas para detectar a proximidade entre dois dispositivos após a qual os aplicativos podem acionar a comunicação de rede entre si usando APIs de soquete.

Windows.Storage.Pickers

As APIs usadas para se comunicar com os compartilhamentos de arquivos remotos (como salvar um arquivo em um compartilhamento de arquivos remoto) devem usar as APIs de selecionador de arquivos.

 

Se uma API com o recurso que você deseja incluir não estiver listada acima, use as novas APIs Windows.Networking.Sockets. No entanto, os aplicativos que usam essas APIs, precisarão considerar o seguinte:

  • O Windows 8 apresenta um novo tipo de soquete, denominado "WebSocket". Aqui estão algumas considerações que o ajudarão a decidir quando usar os vários tipos de soquetes (UDP, TCP ou WebSockets).

    • Se você estiver se conectando a um serviço que usa um protocolo sem suporte das APIs descritas nesta seção, como SMTP, MAPI ou telnet, use os soquetes TCP ou UDP.

    • Se você precisar se conectar a outro dispositivo na mesma rede local, use os soquetes TCP ou UDP.

    • Se você precisar de um protocolo simples de solicitação e resposta que possa se comunicar por meio de proxies HTTP, use as APIs REST descritas acima. (C++, C#, JavaScript).

    • Se você está criando um aplicativo que requer uma semântica semelhante a soquetes (assíncrona, bidirecional) para conectar-se à Web (incluindo através de proxies HTTP) para um novo serviço que você também está criando - use WebSockets.

  • Use nomes para resolver pontos de extremidade. Evite o uso de endereços IP (incluindo literais de IP nos URIs) para resolver pontos de extremidade porque os endereços IP podem ser alterados, enquanto o nome normalmente não. O uso de um nome geralmente assegura que você se conecte ao endereço IP atual do ponto de extremidade.

  • As APIs do Windows tradicionalmente usam sequências de caracteres Unicode como formato nativo (incluindo para HostNames e URIs). No entanto, um determinado protocolo pode exigir um formato diferente; certifique-se converter as sequências de caracteres para qualquer formato que o protocolo exija usando os métodos da classe DataReader/DataWriter para isso.

  • Os HostNames e as URIs devem ser implementados como objetos da classe e não como sequências de caracteres, ao comparar igualdade porque as regras de igualdade são diferentes para objetos.

  • Registre-se para obter notificações de alterações na rede e siga as orientações conforme detalhado em Reagindo a alterações no status da rede.

Adaptando o comportamento do aplicativo a redes limitadas

As redes limitadas existem na Internet há algum tempo. Por exemplo, a maioria dos provedores de Internet têm uma capacidade (geralmente uma capacidade muito grande) quanto à quantidade de dados que os usuários podem transferir por mês. Mais recentemente, a popularidade crescente das tecnologias de banda larga móvel agravou o problema por exceder a capacidade de dados ou de roaming, que pode resultar em significativos custos financeiros para o usuário. Assim, os aplicativos precisam monitorar os recursos de rede disponíveis e se comportar adequadamente.

A tabela a seguir lista os possíveis custos de conexão definidos por Windows.Networking.Connectivity.ConnectionCost.

PropriedadeDescrição

ApproachingDataLimit

Obtém um valor que indica se uma conexão está se aproximando da utilização permitida especificada pelo plano 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. Ela tem tarifas de uso sem restrições e limitações de capacidade.

  • Fixed: o uso dessa conexão de rede é irrestrito até um limite específico.

  • 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 excedeu a utilização permitida especificada pelo plano de dados.

Roaming

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

 

Quem é afetado?

Em geral, todos os aplicativos (especialmente aqueles que transferem grandes quantidades de dados) precisam seguir a orientação abaixo:

Os usuários podem determinar a quantidade de largura de banda que cada aplicativo está usando. O uso indevido de largura de banda de redes limitadas pode afetar a reputação do seu aplicativo e da sua empresa.

Guidance

Os aplicativos que se conectam a destinos na Internet devem obter informações de custo sobre a rede pela qual estão enviando e recebendo dados usando GetInternetConnectionProfile. Dependendo das limitações de transferência de dados estabelecidas pela operadora, siga estas diretrizes:

ComportamentoDiretrizes
Normal

Em cenários normais, o aplicativo não deve implementar restrições. A conexão deve ser tratada como 'Ilimitada' em termos de custo e não deve ser limitada por tarefas de uso e restrições de capacidade.

Se o NetworkCostType for "Irrestrito" ou "Desconhecido" e o ConnectionCost não for "Roaming", o aplicativo deve implementar o comportamento normal.

Exemplos:

  • O aplicativo media player pode reproduzir um filme em HD inteiro.

  • Um aplicativo pode baixar um arquivo grande sem quaisquer restrições ou prompts.

Conservador

Em cenários conservadores, o aplicativo deve implementar restrições para otimizar o uso da rede para lidar com operações em redes limitadas.

Se o NetworkCostType for "Fixo" ou "Variable" e o ConnectionCost não for "Roaming" ou "Acima do Limite de Dados", o aplicativo deve implementar o comportamento conservador.

Exemplos:

  • O aplicativo media player pode reproduzir filmes em resoluções menores.

  • Um aplicativo pode atrasar downloads não críticos.

  • Um aplicativo pode evitar a pré-obtenção de informações em uma rede.

  • Os aplicativos de email podem alternar para um modo somente cabeçalhos ao receber mensagens de email.

Aceitação

Em cenários de aceitação, o aplicativo deve tratar dos casos excepcionais em que o custo de acesso à rede é significativamente maior que o custo do plano. Por exemplo, quando um usuário está em roaming, uma operadora móvel pode cobrar uma taxa significativamente maior.

Se o ConnectionCost for "Roaming" ou "Acima do Limite de Dados", o aplicativo deve implementar o comportamento de aceitação.

Exemplos:

  • O aplicativo deve perguntar ao usuário se deve acessar a rede.

  • O aplicativo deve suspender todas as atividades de rede com dados em segundo plano.

 

Reagindo a alterações no status da rede

Quando o Windows 8 detectar novas redes, ele deverá fornecer automaticamente novas opções de conectividade. Por exemplo, se um usuário está usando uma rede 3G para transmitir dados e depois entra no alcance de uma rede Wi-Fi, a nova opção de conectividade estará disponível para que o aplicativo a aproveite, se for oportuno.

Em qualquer situação de dispositivo móvel, as redes podem ir e vir. Uma rede 3G pode sair do alcance na casa do usuário ou na garagem, enquanto o Wi-Fi ainda está disponível; da mesma forma, o Wi-Fi pode sair do alcance quando um usuário sair de casa. Além disso, pode haver ocasiões em que nenhuma rede está disponível. Devido à proliferação de Wi-Fi e de redes de banda larga móveis, essas alterações na rede (redes vindo, indo ou não estando disponíveis) serão comuns. As conexões não se alternam automaticamente para uma nova rede com perfeição; o aplicativo precisa se envolver. Observe que a política padrão no Windows 8 é escolher a rede irrestrita sobre a rede limitada e a rede mais rápida sobre a rede mais lenta.

Quem é afetado?

Todos os aplicativos da Windows Store que usam uma rede são afetados, e não seguir essas orientações pode resultar em uma má experiência do usuário quando houver alterações na rede.

Diretrizes

Todos os aplicativos da Windows Store devem seguir estas etapas:

  1. Se a conexão que o aplicativo estava usando não mais estiver disponível (indicado por um erro):

    1. Verifique o custo da conexão à Internet.

    2. Repita a operação. Se isso falhar, aguarde por outra notificação de NetworkStatusChanged.

  2. Verificar o custo da conexão à Internet e, em seguida, adaptar o comportamento como recomendado anteriormente em Adaptando o comportamento das redes limitadas.

  3. Registrar-se para obter notificações de alterações no status da rede (onNetworkStatusChanged).

  4. Iniciar a operação de rede usando uma das APIs descritas em Selecionando a API correta.

  5. Uma notificação de alteração no status da rede indica que o custo disponível ou que as opções de conectividade podem ter se alterado. Quando essa notificação for recebida, faça o seguinte:

    1. Verifique o custo da conexão à Internet. Se a característica de custo for alterada (grátis -> custo ou custo -> grátis), repita a operação da rede. O Windows 8 usará automaticamente a melhor rede/rede de menor custo disponível. Ao repetir, se a operação de rede tiver êxito, cancele a operação da rede original.

      Observação  Desenvolvedores avançados também podem optar por otimizar o comportamento do aplicativo ao repetir as operações da rede. Por exemplo, você pode querer substituir uma conexão existente por uma nova conexão em uma rede de velocidade maior. Nessa situação, um desenvolvedor pode usar as APIs de soquetes (BandwidthStatistics) para determinar se deve alternar.
    2. Se a característica de custo da conexão à Internet não tiver sido alterada, mas uma notificação relativa a custo for recebida, como > 80% da capacidade consumida, custo variável, roaming, e assim por diante, adapte o comportamento.

Depurando e solucionando problemas de aplicativos conectados

Falhas de rede podem fazer com que os aplicativos travem, falhem ou exibam caixas de diálogo não acionáveis e mensagens de erro confusas aos usuários. A depuração desses erros pode ser difícil porque os erros podem ocorrer em qualquer lugar na pilha da rede.

Quem é afetado?

Todos os aplicativos da Windows Store que usam a rede diretamente (usando soquetes) ou indiretamente (através de uma API que eventualmente usa a rede) são afetados. A situação ideal é que o sistema operacional manipule automaticamente as condições de erro em nome do desenvolvedor e quando isso não funcionar, os aplicativos devem estar preparados para lidar com os erros.

Diretrizes

Os aplicativos da Windows Store devem fazer o seguinte:

  • Quando um erro de rede acontecer, repetir a operação se isso for apropriado. Por exemplo, não repita a operação se a autenticação falhar, mas repita a operação se a rede na qual você estava se comunicando desaparecer porque outra pode estar disponível. Muitos erros são simplesmente corrigidos quando a operação é repetida. Ao repetir, siga as orientações especificadas anteriormente em Reagindo às alterações no status da rede.

  • Certifique-se de usar APIs assíncronas para que não haja bloqueio nas chamadas do segmento da interface do usuário. Em outras palavras, se uma operação de rede demorar muito para ser concluída ou se houver um erro, o aplicativo não deve travar. Não emule o comportamento síncrono sobre a natureza assíncrona do Tempo de execução do Windows.

  • De modo ideal, ter um modelo para tratar erros planejado com antecedência. Ao projetar o aplicativo, avalie cuidadosamente como as informações de erro serão expostas ao usuário. Por exemplo, o Outlook usa um indicador de rede discreto; o Communicator tem um esquema "substituir toda a interface do usuário"; o Internet Explorer inclui uma caixa de diálogo orientada a tarefas para downloads que exibe erros de rede. Colete exceções para os casos em que uma exceção é acionada, entenda cada uma das cadeias de caracteres de erro e informe adequadamente o usuário.

  • Teste o seu aplicativo em diferentes ambientes de rede com atividades como desconexão ou reconexão à rede, suspensão ou retomada, ou alternância de uma rede para outra.

  • Quando estiver testando seu aplicativo e encontrar erros que não são imediatamente óbvios, habilite o Rastreamento ETW.

Recursos

A documentação abaixo fornece orientações e detalhes sobre as APIs dos recursos do Tempo de execução do Windows descritas neste tópico:

Diretrizes para implementação de recursos

Adicionando suporte à rede
Conectando-se a um serviço Web
Conectando-se aos serviços de rede
Conectando-se a m serviço de soquete Web
Acessando as informações de plano de dados e conexão
Transferindo um arquivo de um recurso de rede
Acessando e gerenciando conteúdo sindicalizado

Exemplos de código

Documentação de namespace

Windows.Networking.BackgroundTransfer
Windows.Networking.Connectivity
Windows.Networking.Proximity
Windows.Networking.Sockets
Windows.Storage.Picker
Windows.Web.AtomPub
Windows.Data.Html
Windows.Web.Syndication
Windows.Foundation (Classe do Uri)
Windows.Networking (Classe do HostName)
Windows.Storage.Streams (Classes DataReader/DataWriter)

 

 

Mostrar:
© 2015 Microsoft