Transferindo os dados de seu aplicativo

Blog do desenvolvedor de aplicativos do Windows 8

Ideias sobre a criação de aplicativos com o estilo Metro para o Windows 8, da equipe de engenharia do Windows 8

Transferindo os dados de seu aplicativo

  • Comments 3

O Windows 8 mantém os usuários sempre conectados. Eles podem ficar conectados à Internet, a serviços na nuvem e a seus outros PCs com Windows 8. Seu aplicativo pode participar desse ecossistema sempre conectado, tirando vantagem da transferência de dados do aplicativo. Nesta postagem, falarei mais sobre a transferência de dados do aplicativo, o que é isso, por que isso é importante e, melhor de tudo, como é fácil implementá-lo em seu aplicativo.

Por que transferir dados

Transferir as configurações de personalização é fundamental para se sentir conectado ao Windows, e o Windows 8 faz isso para muitas configurações do Windows, tais como tema da área de trabalho, telas de fundo e favoritos do navegador. Mas o Windows é somente uma pequena parte da personalização de um usuário. Os aplicativos são a pedra fundamental na criação dessa experiência sempre conectada no Windows 8. São os seus aplicativos que trazem diversão para os usuários do Windows, e é com os seus aplicativos que eles gastam a maior parte do tempo deles. Embora os nossos aplicativos, tais como Bing Weather e Sports, tenham essas experiências de roaming, precisamos de sua ajuda para completar a visão de um Windows 8 conectado.

Transferir para a nuvem também é algo bom e excitante que pode agradar os seus clientes de forma conveniente e ajudá-lo a se destacar do resto. Um ótimo aplicativo estilo Metro com roaming permitirá que o usuário configure-o uma vez e use-o em qualquer lugar, por isso, o usuário não precisa reconfigurar o aplicativo cada vez que o acessa de um PC diferente. Isso também o ajudará a se conectar de qualquer lugar, tendo uma experiência contínua, quando mudar de um PC para outro.

Como tornamos isso fácil

Nosso objetivo com a transferência de dados do aplicativo era facilitar muito a criação de experiências de roaming. Tiramos de você, desenvolvedor, a responsabilidade de gerenciar mecanismos de sincronização porque isso pode ser complicado e complexo. Quisemos simplificar para você a transferência de tudo que o usuário pode configurar.

Para fazer isso acontecer, o Windows 8 possui uma sincronização de roaming integrada para Dados de Aplicativo de todos os aplicativos estilo Metro que usam a Conta da Microsoft conectada associada ao usuário. O ApplicationData é particionado em três tipos de dados que chamamos de localidades: local, roaming e temporário. Simplesmente gravando seus dados para a localidade de roaming, seu aplicativo pode participar dos dados que estão sendo sincronizados com a conta da Microsoft conectada. Isso significa que você não precisa se preocupar com o gerenciamento do relacionamento de sincronização, a configuração de uma identidade, a compra ou gerenciamento de um serviço, ou qualquer uma dessas coisas confusas. O Windows cuida disso para você. Tudo o que você precisa focalizar são quais dados devem ser transferidos e como projetar seu aplicativo para tirar vantagem desses benefícios. Quando os usuários se conectam ao Windows, eles também se conectam ao seu aplicativo.

Um fluxograma mostrando como a data se move para frente e para trás entre seu computador, armazenamento local e armazenamento na nuvem

Dados do usuário versus dados do aplicativo

Antes de entrarmos em detalhes, é importante ao trabalhar com experiências de roaming entender a diferença entre os dados do usuário e os dados do aplicativo. Os dados do usuário são aqueles que o usuário cria e gerencia ao usar o aplicativo, tais como documentos do usuário, música, vídeos e imagens. Isso também poderia ser qualquer coisa que o usuário entende como valiosa ou que pode ser compartilhada entre aplicativos. Esse tipo de dados deve ser armazenado em uma das bibliotecas KnownFolder, ou transferidos por meio de APIs do SkyDrive. As senhas sempre devem ser armazenadas e transferidas por meio do PasswordVault. Esta postagem de blog tem como escopo os dados que o aplicativo cria e gerencia, tais como suas configurações, preferências e estado. Essas diferenças entre dados do usuário e dados do aplicativo e como transferir cada um deles são resumidas nesta tabela.

Dados do usuário

Dados do aplicativo

Podem ser usados por vários aplicativos

Apenas são significativos para o aplicativo que os criou

Documentos, música, imagens, dados exportados

Configurações, preferências, contexto, estado do aplicativo

Armazenados na nuvem por meio do SkyDrive

São transferidos com ApplicationData

Criando uma experiência configurar uma vez, usar em qualquer lugar

Vamos começar com uma simples experiência configurar uma vez, usar em qualquer lugar. Suponha que eu tenha um aplicativo que seja um simples leitor de RSS que permite que o usuário leia itens de um conjunto de feeds. Ao visualizar um feed específico, o aplicativo exibe um determinado número de itens por página. Tenho uma definição que pode ser configurada pelo usuário chamada ItemsPerPage que controla quantos itens de feed devem ser exibidos em uma página. Quero fazer com que se o usuário definir essa configuração em um PC, ela será transferida para outros PCs que tenham meu aplicativo instalado. Na classe ApplicationData, existe uma propriedade chamada RoamingSettings, e habilitar uma configuração para ser transferida é tão simples quando gravá-la como um valor em RoamingSettings.

JS:

Windows.Storage.ApplicationData.current.roamingSettings.values[“ItemsPerPage”] = 10

C#:

Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“ItemsPerPage”] = 10;

E é isso! Toda a mecânica de sincronização é manipulada pelo Windows, e essa configuração agora será sincronizada entre todos os PCs do usuário que tenham meu aplicativo instalado sem qualquer outra ação minha. Essa configuração geralmente é apresentada para o usuário no botão Configurações de Aplicativo. Recomendo altamente que você transfira quaisquer configurações do aplicativo por padrão. Algumas configurações podem ser específicas da máquina e não devem ser salvas nos locais de roaming.

Se você quisesse gravar um arquivo em vez de uma configuração, Application Data também oferece RoamingFolder, que funciona da mesma forma. Se você optar por usar um arquivo para transferir dados, certifique-se de fechar quaisquer identificadores abertos para o arquivo quando terminar de gravá-lo. Arquivos com identificadores abertos não são transferidos.

Planejando a cota de roaming

Se tudo o que você usa em seu aplicativo são simples configurações, então, tudo que que observamos até agora é o que você precisa. Mas que tal uma lista de favoritos ou uma coleção ou quantidades grandes de dados? Que tamanho pode ser? A transferência de dados do aplicativo é otimizada para configurações e preferências de roaming e possuem uma cota de armazenamento por aplicativo adequada para esses tipos de dados. A cota existe para que sejam considerados os recursos do sistema. A vida longa da bateria e o desempenho do sistema são características importantes do Windows 8, e o nosso limite ajuda a garantir que nenhum dos dois seja sacrificado para proporcionar essas experiências de roaming. Você pode obter essa cota, usando a propriedade RoamingStorageQuota do ApplicationData, que no momento em que escrevo é 100 KB. A melhor forma de trabalhar dentro da cota é planejar o uso dos dados de seu aplicativo no momento do design e garantir que eles não fiquem fora da cota.

Então, o que acontece se você exceder a RoamingStorageQuota? Nada! Mais especificamente, nada é transferido. Seu aplicativo não será interrompido, e ele pode continuar a ler e gravar dados dos locais de roaming. Mas até que o total de dados transferidos nos locais de roaming seja menor do que RoamingStorageQuota, esses dados serão sincronizados para a nuvem.

Uma das desvantagens comuns que vemos com aplicativos que não planejam corretamente o uso da transferência de dados é que eles transferem conteúdo em vez de referências ao conteúdo. Por exemplo, se eu quisesse transferir um conjunto de artigos de notícias favoritos, eu deveria transferir os identificadores ou URLs do artigo, não os artigos inteiros. Transferir dados brutos em vez de referências ao conteúdo disponível é uma forma rápida de ultrapassar a cota e desperdiçar espaço. Você pode aproveitar o máximo do roaming, transferindo identificadores de conteúdo, não o conteúdo real em si.

Ao planejar seu aplicativo, é melhor não usar conjuntos de dados sem critério. Quaisquer conjuntos de dados em aberto, tais como a lista de favoritos, devem ser fixados, de forma que o seu aplicativo sempre esteja dentro da cota de roaming. Continuando com o meu exemplo de leitor de RSS feed, suponha que eu quisesse salvar a lista de RSS feeds, que é uma lista gerenciada pelo usuário. A forma de fazer isso é tornar algo que de outra maneira seja ilimitado em algo que tenha um limite. Isso requer uma pequena estimativa. Suponha que eu queira alocar 20 KB para listas de RSS feeds. Para simplificar, farei uma estimativa conservadora de 80 bytes por URL. Nesse tamanho, eu poderia comprimir 250 URLs em 20 KB. A redução de URLs poderia tornar isso ainda menor, mas 250 é provavelmente muito mais feeds do que o meu aplicativo jamais precisará. Tudo o que preciso fazer é manter isso dentro do limite e gravar minha lista de feeds em um arquivo, salvá-la na RoamingFolder, e pronto.

Criando uma experiência contínua entre PCs

Existe outra forma experiência de roaming legal que você pode adicionar ao seu aplicativo – a experiência de usuário contínua entre PCs! Imagine uma pessoa em casa em um desktop usando meu leitor para acompanhar seus feeds e que depois precisa pegar um ônibus. Ao sair, ela pega seu tablet com Windows 8 e abre meu aplicativo. A experiência que quero é que ela possa continuar a ler de onde parou em seu PC desktop. Habilitar a experiência contínua é preservar o conteúdo do que o usuário está fazendo e transferi-lo.

Funcionalmente, isso não é diferente de transferir qualquer outra configuração, mas esse cenário é um pouco diferente da maioria das configurações. O usuário pode navegar através de feeds muito rapidamente, portanto, essa configuração pode mudar frequentemente enquanto outras configurações geralmente não podem. Além disso, para que a experiência seja realmente agradável para o usuário, os dados precisam ser precisos quanto ao que o usuário estava fazendo pela última vez. Para atender a essas necessidades do cliente, criamos um nome de configuração exclusivo que foi especificamente criado para lidar com essa experiência, HighPriority. Para usá-lo, simplesmente nomeie sua configuração de HighPriority no contêiner raiz de RoamingSettings. Ele é usado como qualquer outra configuração. O mecanismo de roaming permite que essa configuração seja transferida mais rapidamente do que outros dados transferidos para que você possa oferecer essa experiência.

Para permitir que isso seja feito em meu leitor de feeds, tudo o que preciso fazer é transferir o identificador do feed. Na inicialização do aplicativo ou ao reiniciar depois da suspensão, verifico o identificador e navego para o feed apropriado. É bem semelhante à minha configuração anterior exceto que o nome da configuração é HighPriority.

JS:

Windows.Storage.ApplicationData.current.roamingSettings.values[“HighPriority”] = currentFeedId;

C#:

Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] = currentFeedId;

Como a outra experiência de roaming, o Windows cuida de todo o trabalho duro de forma que você não precisa se preocupar com isso. A chave no uso de HighPriority é saber quando ler a configuração e quando gravá-la. Geralmente, verifique HighPriority durante a inicialização do aplicativo ou quando ele é reiniciado depois de ser suspenso, para que o usuário possa acessar o que quer que estivesse fazendo ao usar o aplicativo pela última vez, seja no PC atual ou em outro PC. Gravamos HighPriority em ações iniciadas pelo usuário, como a navegação para uma nova página ou o clique em um link.

A configuração HighPriority é frequentemente instantânea, mas pode ser acelerada com gravações rápidas, portanto, gravações desnecessárias apenas causarão diminuição do desempenho no aplicativo e não aprimorarão as experiências de roaming. Via de regra, faça HighPriority representar onde e o quê o usuário está fazendo, tal como quando o usuário navega para páginas no aplicativo ou examina conteúdo. Alguns aplicativos podem ter mudado de dados rapidamente, tal como um reprodutor de vídeos que está mantendo o controle do contador no vídeo que está sendo reproduzido. Seria exagero gravar HighPriority toda vez que o contador de vídeo é incrementado, portanto, em vez disso, você poderia atualizá-lo quando o vídeo muda de estados, como reproduzir/pausar, o usuário atinge um ponto de verificação, ou quando o aplicativo é suspenso.

Mantendo seus dados consistentes

Alguns dados são altamente conectados e devem sempre ser transferidos juntos. O exemplo clássico são as coordenadas de um ponto. Você não vai querer que as coordenadas x e y sejam transferidas independentemente quando alteradas ou isso pode corromper os dados e criar pontos inválidos. As unidades de ApplicationData são as configurações e arquivos, portanto, tudo em um arquivo sempre será transferido junto como uma unidade, e uma configuração em si é uma unidade. Se você quiser transferir várias configurações juntas, tais como as coordenadas, você pode usar CompositeSettingValue. Esse tipo de configuração permite agrupar várias configurações em um único valor que sempre será transferido como uma unidade.

A configuração HighPriority também pode ser uma composição, permitindo que você transfira com segurança várias partes de dados que representam o estado atual de seu aplicativo. Por exemplo, meu leitor de feeds agrupa itens de feed por páginas para facilitar a leitura. Não quero nunca que a ID do feed e a página sejam transferidas independentemente de outra porque os feeds podem ter números de páginas diferentes. O que eu realmente quero fazer é transferir a ID atual do feed e a página atual desse feed junto com uma CompositeSettingValue de forma que elas sempre estejam consistentes.

JS:

var currentFeed = new Windows.Storage.ApplicationDataCompositeValue();
currentFeed.insert(“CurrentFeedId”, currentFeedId);
currentFeed.insert(“CurrentFeedPage”, currentFeedPage);
Windows.Storage.ApplicationData.current.roamingSettings.values[“HighPriority”] = currentFeed;

C#:

Windows.Storage.ApplicationDataCompositeValue currentFeed = 
new Windows.Storage.ApplicationDataCompositeValue();
currentFeed.Insert(“CurrentFeedId”, currentFeedId);
currentFeed.Insert(“CurrentFeedPage”, currentFeedPage);
Windows.Storage.ApplicationData.Current.RoamingSettings.Values[“HighPriority”] = currentFeed;

Se uma composição for usada como a configuração HighPriority, então ela deve ficar abaixo de 8 KB para manter os benefícios de HighPriority. Exceder 8 KB não causará erros, mas a configuração será transferida como se fosse normal.

Respondendo a alterações de roaming de entrada

Existe uma última parte da experiência de roaming que você deve saber, trata-se do evento DataChanged de ApplicationData. O evento DataChanged é simplesmente um evento que você pode sinalizar sempre que os dados do aplicativo mudam, tal como sinalizar para uma tarefa em segundo plano em que o usuário alterou uma configuração. Quando a transferência de dados na nuvem causar uma alteração local em seu aplicativo, o Windows sinalizará automaticamente esse evento para você. Isso permite que você responda a situações em que os dados de outro PC podem ter sido atrasados e chegaram depois que o usuário já começou a usar seu aplicativo. Você poderia usar esse evento para atualizar seu modo de exibição dos dados ou responder a alterações de configuração. É importante compreender que essa experiência é otimizada para consumidores que usam um PC de cada vez e alternam entre eles, portanto, você não deve usar eventos DataChanged como um mecanismo de comunicação em tempo real entre PCs.

Torne-se parte da experiência conectada

Ter aplicativos que utilizam o roaming é uma parte importante da criação de um Windows 8 conectado, e criamos uma plataforma que facilita a criação dessas novas experiências elegantes. Transferir para a nuvem é uma ótima forma de o seu aplicativo se destacar e agradar seus clientes com conveniência e uma transição fluida entre PCs. Para obter orientação adicional sobre o uso de Roaming, consulte Diretrizes para dados de aplicativo de roaming. Além disso, verifique a amostra ApplicationData, que contém exemplos de todas as experiências discutidas nesta entrada de blog. Obrigado por ler!

-- Dave Bennett, Gerente de Programas, Windows

  • Loading...
Leave a Comment
  • Please add 1 and 5 and type the answer here:
  • Post