Ativar a sincronização offline da aplicação do Windows

Descrição Geral

Este tutorial mostra-lhe como adicionar suporte offline a uma aplicação Plataforma Universal do Windows (UWP) usando um backend Azure Mobile App. A sincronização offline permite que os utilizadores finais interajam com uma aplicação móvel -- visualização, adição ou modificação de dados - mesmo quando não há ligação à rede. As alterações são armazenadas numa base de dados local. Uma vez que o dispositivo está novamente on-line, estas alterações são sincronizadas com o backend remoto.

Neste tutorial, atualiza o projeto da aplicação UWP a partir do tutorial Criar uma aplicação Windows para suportar as funcionalidades offline das Aplicações Azure Mobile. Se não utilizar o projeto de servidor de arranque rápido descarregado, tem de adicionar os pacotes de extensão de acesso a dados ao seu projeto. Para obter mais informações sobre pacotes de extensão do servidor, consulte Work with the .NET backend server SDK for Azure Mobile Apps.

Para saber mais sobre a funcionalidade de sincronização offline, consulte o tópico Offline Data Sync em Azure Mobile Apps.

Requisitos

Este tutorial requer os seguintes pré-requisitos:

Atualize a aplicação do cliente para suportar funcionalidades offline

As funcionalidades offline da Azure Mobile App permitem interagir com uma base de dados local quando estiver num cenário offline. Para utilizar estas funcionalidades na sua aplicação, inicializa um SyncContext para uma loja local. Em seguida, consulte a sua tabela através da interface IMobileServiceSyncTable . A SQLite é utilizada como a loja local do dispositivo.

  1. Instale o tempo de funcionação DA SQLite para o Plataforma Universal do Windows.

  2. No Visual Studio, abra o gestor de pacotes NuGet para o projeto de aplicação UWP que completou no tutorial de aplicações Create a Windows . Procure e instale o pacote NuGet Microsoft.Azure.Mobile.Client.SQLiteStore .

  3. Em Explorador de Soluções, clique à direita Adicionar Referência>...>Janelas Universais>Extensões, em seguida, ativar tanto a SQLite para Plataforma Universal do Windows como visual C++ 2015 Runtime para aplicações Plataforma Universal do Windows.

    Adicionar referência UWP SQLite

  4. Abra o ficheiro MainPage.xaml.cs e descodi a #define OFFLINE_SYNC_ENABLED definição.

  5. No Visual Studio, pressione a tecla F5 para reconstruir e executar a aplicação do cliente. A aplicação funciona da mesma forma que antes de ativar a sincronização offline. No entanto, a base de dados local está agora preenchida com dados que podem ser usados num cenário offline.

Atualizar a app para desligar do backend

Nesta secção, quebra-se a ligação com o backend da sua Aplicação Móvel para simular uma situação offline. Quando adiciona itens de dados, o seu manipulador de exceções diz-lhe que a aplicação está em modo offline. Neste estado, novos itens adicionados na loja local e serão sincronizados com o backend da aplicação móvel quando o empurrão for executado em um estado conectado.

  1. Editar App.xaml.cs no projeto partilhado. Comente a inicialização do MobileServiceClient e adicione a seguinte linha, que utiliza um URL de aplicação móvel inválido:

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    Também pode demonstrar o comportamento offline desativando redes wi-fi e celulares no dispositivo ou utilizando o modo avião.

  2. Prima F5 para construir e executar a aplicação. Note que a sua sincronização falhou na atualização quando a aplicação foi lançada.

  3. Introduza novos itens e note que o impulso falha com um estado CanceladoByNetworkError cada vez que clicar em Guardar. No entanto, os novos itens existem na loja local até que possam ser empurrados para o backend da aplicação móvel. Numa aplicação de produção, se suprimir estas exceções, a aplicação do cliente comporta-se como se ainda estivesse ligada ao backend da aplicação móvel.

  4. Feche a aplicação e reinicie-a para verificar se os novos itens que criou são persistidos na loja local.

  5. (Opcional) No Estúdio Visual, abra o Server Explorer. Navegue na sua base de dados em Bases de DadosAzure-SQL>. Clique com o botão direito na sua base de dados e selecione Abrir em SQL Server Object Explorer. Agora pode navegar para a sua tabela de base de dados SQL e o seu conteúdo. Verifique se os dados na base de dados de backend não foram alterados.

  6. (Opcional) Utilize uma ferramenta REST, como o Fiddler ou o Carteiro, para consultar o seu backend móvel, utilizando uma consulta GET no formulário https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Atualize a aplicação para reconectar o backend da sua Aplicação Móvel

Nesta secção, volta a ligar a aplicação ao backend da aplicação móvel. Estas alterações simulam uma reconexão de rede na aplicação.

Quando executou a aplicação pela primeira vez, o manipulador de OnNavigatedTo eventos liga InitLocalStoreAsync. Este método, por sua vez, chama SyncAsync para sincronizar a sua loja local com a base de dados backend. A aplicação tenta sincronizar-se no arranque.

  1. Open App.xaml.cs no projeto partilhado, e descompromei-lo com a sua inicialização anterior de MobileServiceClient usar o URL correto da aplicação móvel.

  2. Pressione a tecla F5 para reconstruir e executar a aplicação. A aplicação sincroniza as suas alterações locais com o backend da App Móvel Azure utilizando operações de push e pull quando o manipulador de OnNavigatedTo eventos executa.

  3. (Opcional) Consulte os dados atualizados utilizando SQL Server Object Explorer ou uma ferramenta REST como o Fiddler. Note que os dados foram sincronizados entre a base de dados de backend da Azure Mobile e a loja local.

  4. Na aplicação, clique na caixa de verificação ao lado de alguns itens para os completar na loja local.

    UpdateCheckedTodoItem chamadas SyncAsync para sincronizar cada item concluído com o backend da Aplicação Móvel. SyncAsync chama tanto empurrar e puxar. No entanto, sempre que executa um puxão contra uma tabela à qual o cliente fez alterações, um empurrão é sempre executado automaticamente. Este comportamento garante que todas as tabelas na loja local, juntamente com as relações, permanecem consistentes. Este comportamento pode resultar num impulso inesperado. Para obter mais informações sobre este comportamento, consulte Offline Data Sync em Azure Mobile Apps.

Resumo da API

Para suportar as funcionalidades offline dos serviços móveis, utilizamos a interface IMobileServiceSyncTable e o MobileServiceClient.SyncContext com uma base de dados SQLite local. Quando offline, as operações normais da CRUD para aplicações móveis funcionam como se a aplicação ainda estivesse conectada enquanto as operações ocorrem contra a loja local. Os seguintes métodos são utilizados para sincronizar a loja local com o servidor:

  • PushAsync Como este método é membro do IMobileServicesSyncContext, as mudanças em todas as tabelas são empurradas para o backend. Apenas registos com alterações locais são enviados para o servidor.
  • PullAsync Inicia-se um pull a partir de um IMobileServiceSyncTable. Quando há mudanças rastreadas na tabela, é executado um impulso implícito para garantir que todas as mesas na loja local, juntamente com relacionamentos, permanecem consistentes. O parâmetro pushOtherTables controla se outras tabelas no contexto são empurradas num impulso implícito. O parâmetro de consulta requer uma cadeia de consulta IMobileServiceTableQuery<T> ou OData para filtrar os dados devolvidos. O parâmetro consultaid é usado para definir sincronização incremental. Para mais informações, consulte Offline Data Sync em Azure Mobile Apps.
  • PurgeAsync A sua aplicação deve ligar periodicamente para este método para expurgar dados antigos da loja local. Utilize o parâmetro de força quando necessitar de purgar quaisquer alterações que ainda não tenham sido sincronizadas.

Para obter mais informações sobre estes conceitos, consulte Offline Data Sync em Azure Mobile Apps.

Saiba mais

Os seguintes tópicos fornecem informações de fundo adicionais sobre a funcionalidade de sincronização offline de Aplicações Móveis: