Partilhar via


Habilitar a sincronização offline para seu aplicativo do Windows

Visão geral

Este tutorial mostra como adicionar suporte offline a um aplicativo da Plataforma Universal do Windows (UWP) usando um back-end do Aplicativo Móvel do Azure. A sincronização offline permite que os usuários finais interajam com um aplicativo móvel - visualizando, adicionando ou modificando dados - mesmo quando não há conexão de rede. As alterações são armazenadas em um banco de dados local. Quando o dispositivo estiver online novamente, essas alterações serão sincronizadas com o back-end remoto.

Neste tutorial, você atualiza o projeto de aplicativo UWP do tutorial Criar um aplicativo do Windows para dar suporte aos recursos offline dos Aplicativos Móveis do Azure. Se você não usar o projeto de servidor de início rápido baixado, deverá adicionar os pacotes de extensão de acesso a dados ao seu projeto. Para obter mais informações sobre pacotes de extensão de servidor, consulte Trabalhar com o SDK do servidor back-end .NET para Aplicativos Móveis do Azure.

Para saber mais sobre o recurso de sincronização offline, consulte o tópico Sincronização de Dados Offline em Aplicativos Móveis do Azure.

Requerimentos

Este tutorial requer os seguintes pré-requisitos:

Atualizar o aplicativo cliente para oferecer suporte a recursos offline

Os recursos offline do Aplicativo Móvel do Azure permitem que você interaja com um banco de dados local quando estiver em um cenário offline. Para utilizar estes recursos na sua aplicação, inicialize um SyncContext para uma loja local. Em seguida, faça referência à sua tabela através da interface IMobileServiceSyncTable. SQLite é usado como o armazenamento local no dispositivo.

  1. Instale o runtime SQLite para a Plataforma Universal do Windows.

  2. No Visual Studio, abra o gerenciador de pacotes NuGet para o projeto de aplicativo UWP concluído no tutorial Criar um aplicativo do Windows. Procure e instale o pacote Microsoft.Azure.Mobile.Client.SQLiteStore NuGet.

  3. No Explorador de Soluções, clique com o botão direito do rato em Referências e selecione>Adicionar Referência...>Extensões Universais do Windows>. Em seguida, ative tanto o SQLite para a Plataforma Universal do Windows como o Runtime do Visual C++ 2015 para aplicações da Plataforma Universal do Windows.

    Adicionar referência SQLite UWP

  4. Abra o arquivo de MainPage.xaml.cs e descomente a definição de #define OFFLINE_SYNC_ENABLED.

  5. No Visual Studio, pressione a tecla F5 para reconstruir e executar o aplicativo cliente. O aplicativo funciona da mesma forma que antes de ativar a sincronização offline. No entanto, o banco de dados local agora é preenchido com dados que podem ser usados em um cenário offline.

Atualizar o aplicativo para se desconectar do back-end

Nesta seção, você interrompe a conexão com o back-end do aplicativo móvel para simular uma situação offline. Quando você adiciona itens de dados, seu manipulador de exceções informa que o aplicativo está no modo offline. Nesse estado, os novos itens adicionados na loja local serão sincronizados com o back-end do aplicativo móvel quando o push for executado em um estado conectado.

  1. Edite App.xaml.cs no projeto compartilhado. Comente a inicialização do MobileServiceClient e adicione a seguinte linha, que usa uma URL de aplicativo móvel inválida:

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

    Você também pode demonstrar o comportamento off-line desativando as redes Wi-Fi e celular no dispositivo ou usando o modo avião.

  2. Pressione F5 para criar e executar o aplicativo. Observe que a sincronização falhou ao atualizar quando a aplicação foi iniciada.

  3. Insira novos itens e observe que o push falha com o status CancelledByNetworkError cada vez que clicar em Salvar. No entanto, os novos itens existem na loja local até que possam ser enviados para o back-end do aplicativo móvel. Em um aplicativo de produção, se você suprimir essas exceções, o aplicativo cliente se comportará como se ainda estivesse conectado ao back-end do aplicativo móvel.

  4. Feche o aplicativo e reinicie-o para verificar se os novos itens criados persistem no repositório local.

  5. (Opcional) Em Visual Studio, abra Server Explorer. Navegue até seu banco de dados no Azure->Bancos de Dados SQL. Clique com o botão direito do mouse no banco de dados e selecione Abrir no Pesquisador de Objetos do SQL Server. Agora você pode navegar até a tabela do banco de dados SQL e seu conteúdo. Verifique se os dados no banco de dados de back-end não foram alterados.

  6. (Opcional) Use uma ferramenta REST como Fiddler ou Postman para consultar seu back-end móvel, usando uma consulta GET no formato https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Atualize o aplicativo para reconectar seu back-end do aplicativo móvel

Nesta seção, você reconecta o aplicativo ao back-end do aplicativo móvel. Essas alterações simulam uma reconexão de rede no aplicativo.

Quando você executa o aplicativo pela primeira vez, o manipulador de eventos OnNavigatedTo chama InitLocalStoreAsync. Esse método, por sua vez, chama SyncAsync para sincronizar seu armazenamento local com o banco de dados de back-end. O aplicativo tenta sincronizar na inicialização.

  1. Abra App.xaml.cs no projeto compartilhado e descomente sua inicialização anterior de MobileServiceClient para usar a URL correta do aplicativo móvel.

  2. Pressione a tecla F5 para reconstruir e executar a aplicação. O aplicativo sincroniza suas alterações locais com o back-end do Aplicativo Móvel do Azure usando operações push e pull quando o manipulador de eventos OnNavigatedTo é executado.

  3. (Opcional) Exiba os dados atualizados usando o Pesquisador de Objetos do SQL Server ou uma ferramenta REST como o Fiddler. Observe que os dados foram sincronizados entre o banco de dados de back-end do Aplicativo Móvel do Azure e o repositório local.

  4. No aplicativo, clique na caixa de seleção ao lado de alguns itens para concluí-los na loja local.

    UpdateCheckedTodoItem chama SyncAsync para sincronizar cada item concluído com o back-end do aplicativo móvel. SyncAsync invoca tanto o empurrar como o puxar. No entanto, sempre que você executa um pull em uma tabela na qual o cliente fez alterações, um push é sempre executado automaticamente. Este comportamento assegura que todas as tabelas na loja local, juntamente com os relacionamentos, permaneçam consistentes. Este comportamento pode provocar um impulso inesperado. Para obter mais informações sobre esse comportamento, consulte Sincronização de Dados Offline em Aplicativos Móveis do Azure.

Resumo da API

Para suportar os recursos offline dos serviços móveis, usamos a interface IMobileServiceSyncTable e inicializamos MobileServiceClient.SyncContext com um banco de dados SQLite local. Quando offline, as operações CRUD normais para Aplicativos Móveis funcionam como se o aplicativo ainda estivesse conectado enquanto as operações ocorrem no repositório local. Os seguintes métodos são usados para sincronizar o armazenamento local com o servidor:

  • PushAsync Como esse método é membro de IMobileServicesSyncContext, as alterações em todas as tabelas são enviadas por push para o back-end. Somente registros com alterações locais são enviados ao servidor.
  • PullAsync Um pull é iniciado a partir de um IMobileServiceSyncTable. Quando há alterações controladas na tabela, um push implícito é executado para garantir que todas as tabelas no repositório local, juntamente com os relacionamentos, permaneçam consistentes. O parâmetro pushOtherTables controla se outras tabelas no contexto são enviadas por push implícito. O parâmetro query usa uma IMobileServiceTableQuery<cadeia de caracteres de consulta T> ou OData para filtrar os dados retornados. O parâmetro queryId é usado para definir a sincronização incremental. Para obter mais informações, consulte Sincronização de Dados Offline em Aplicativos Móveis do Azure.
  • PurgeAsync Seu aplicativo deve chamar periodicamente esse método para limpar dados obsoletos do repositório local. Use o parâmetro force quando precisar limpar as alterações que ainda não foram sincronizadas.

Para obter mais informações sobre esses conceitos, consulte Sincronização de Dados Offline em Aplicativos Móveis do Azure.

Mais informações

Os tópicos a seguir fornecem informações básicas adicionais sobre o recurso de sincronização offline de aplicativos móveis: