Compartilhar via


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

Visão geral

Este tutorial mostra como adicionar suporte offline a um aplicativo UWP (Plataforma Universal do Windows) 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, exibindo, adicionando ou modificando dados, mesmo quando não há nenhuma conexão de rede. As alterações são armazenadas em um banco de dados local. Depois que o dispositivo estiver online novamente, essas alterações serão sincronizadas com o back-end remoto.

Neste tutorial, você atualizará 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 Trabalhe com o SDK do servidor back-end do .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 nos Aplicativos Móveis do Azure.

Requisitos

Este tutorial requer os seguintes pré-requisitos:

Atualizar o aplicativo cliente para dar 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 usar esses recursos em seu aplicativo, você inicializa um SyncContext para um repositório local. Em seguida, faça referência à tabela por meio da interface IMobileServiceSyncTable . O SQLite é usado como o repositório local no dispositivo.

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

  2. No Visual Studio, abra o gerenciador de pacotes NuGet para o projeto de aplicativo UWP que você concluiu no tutorial Criar um aplicativo do Windows . Pesquise e instale o pacote NuGet Microsoft.Azure.Mobile.Client.SQLiteStore .

  3. No Gerenciador de Soluções, clique com o botão direito do mouse em As Referências>Adicionar Referência...>Extensões do Windows Universal>. Em seguida, habilite o SQLite para a Plataforma Universal do Windows e o Runtime do Visual C++ 2015 para aplicativos da Plataforma Universal do Windows.

    Adicionar referência UWP do SQLite

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

  5. No Visual Studio, pressione a tecla F5 para recompilar e executar o aplicativo cliente. O aplicativo funciona da mesma forma que antes de você habilitar 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ê interromperá a conexão com o back-end do Aplicativo Móvel para simular uma situação offline. Quando você adiciona itens de dados, o manipulador de exceções informa que o aplicativo está no modo offline. Nesse estado, novos itens que são adicionados no armazenamento local serão sincronizados com o backend 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 offline desabilitando redes wi-fi e celulares no dispositivo ou usando o modo avião.

  2. Pressione F5 para compilar e executar o aplicativo. Repare que a sincronização falhou ao atualizar durante o lançamento do aplicativo.

  3. Insira novos itens e observe que o push falha com um status CancelledByNetworkError sempre que você clicar em Salvar. No entanto, os novos itens todo existem no repositório local até que possam ser enviados por push 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 são mantidos no repositório local.

  5. (Opcional) No Visual Studio, abra o Gerenciador de Servidores. 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 SQL Server Object Explorer. 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 formulário https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

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

Nesta seção, você reconectará 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 OnNavigatedTo manipulador de eventos chama InitLocalStoreAsync. Esse método, por sua vez, chama SyncAsync para sincronizar seu repositório 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 recompilar e executar o aplicativo. O aplicativo sincroniza as alterações locais com o back-end do Aplicativo Móvel do Azure usando operações de push e pull quando o OnNavigatedTo manipulador de eventos é 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 no repositório local.

    UpdateCheckedTodoItem chama SyncAsync para sincronizar cada item concluído com o back-end do aplicativo móvel. SyncAsync executa push e pull. No entanto, sempre que você executa um pull em uma tabela na qual o cliente fez alterações, um push é sempre executado automaticamente. Esse comportamento garante que todas as tabelas no repositório local, assim como as relações, permaneçam consistentes. Esse comportamento pode resultar em um push inesperado. Para obter mais informações sobre esse comportamento, consulte Sincronização de Dados Offline nos Aplicativos Móveis do Azure.

Resumo da API

Para dar suporte aos 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 métodos a seguir são usados para sincronizar o repositório local com o servidor:

  • PushAsync Como esse método é membro do 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 para o 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 as relações, permaneçam consistentes. O parâmetro pushOtherTables controla se outras tabelas no contexto são empurradas em um push automático. O parâmetro de consulta usa uma cadeia de caracteres de consulta IMobileServiceTableQuery<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 nos 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 nos Aplicativos Móveis do Azure.

Mais informações

Os tópicos a seguir fornecem informações adicionais em segundo plano sobre o recurso de sincronização offline dos Aplicativos Móveis: