Habilitar sincronização offline para o seu aplicativo do Windows
Visão geral
Este tutorial mostra como adicionar suporte offline para um aplicativo da UWP (Plataforma Universal do Windows) usando o back-end de aplicativos móveis do Azure. 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á 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ê atualizará o projeto de aplicativo da 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 baixado do início rápido do servidor, deve adicionar os pacotes de extensão de acesso de dados autenticação ao seu projeto. Para obter mais informações sobre pacotes de extensão do servidor, confira Trabalhar com o servidor .NET back-end do SDK para Aplicativos Móveis do Azure.
Para saber mais sobre o recurso de sincronização offline, confira o tópico Sincronização de dados offline nos Aplicativos Móveis do Azure.
Requisitos
Este tutorial exige os seguintes pré-requisitos:
- Visual Studio 2013 em execução no Windows 8.1 ou mais recente.
- Conclusão de Criar um aplicativo do Windows.
- Armazenamento do SQLite dos Serviços Móveis Azure
- SQLite para desenvolvimento na Plataforma Universal do Windows
Atualize o aplicativo cliente para dar suporte aos 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ê deve inicializar um SyncContext em um repositório local. Em seguida, referencie sua tabela através da interface IMobileServiceSyncTable. O SQLite é usado como o repositório local no dispositivo.
Instale o runtime do SQLite para a Plataforma Universal do Windows.
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. Procure e instale o pacote NuGet Microsoft.Azure.Mobile.Client.SQLiteStore.
Em Gerenciador de Soluções, clique com o botão direito do mouse em Referências>Adicionar Referência...>Universal do Windows>Em seguida, habilite o SQLite para Plataforma Universal do Windows e o Runtime do Visual C++ 2015 para aplicativos Plataforma Universal do Windows.
Abra o arquivo MainPage.xaml.cs e remova a definição
#define OFFLINE_SYNC_ENABLED
.No Visual Studio, pressione a tecla F5 para recompilar e executar o aplicativo cliente. O aplicativo funciona da mesma forma que antes de 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 desconectar o back-end
Nesta seção, você interrompe a conexão com seu Aplicativo Móvel de back-end para simular uma situação offline. Quando você adicionar itens de dados, o manipulador de exceção informará que o aplicativo está operando no modo offline. Nesse estado, novos itens são adicionados ao repositório local e serão sincronizados com o back-end do aplicativo móvel da próxima vez que o envio por push for executado em um estado conectado.
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.
Pressione F5 para compilar e executar o aplicativo. Observe a falha de sincronização na atualização, quando o aplicativo é iniciado.
Insira novos itens e observe que o push falha com um status CancelledByNetworkError sempre que você clicar em Salvar. Contudo, os novos itens de tarefas pendentes existem apenas no repositório local até serem 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.
Feche o aplicativo e reinicie-o para verificar se os novos itens que você criou persistem no armazenamento local.
(Opcional) No Visual Studio, abra o Gerenciador de Servidores. Navegue até o banco de dados nos Bancos de DadosAzure-SQL>. Clique com o botão direito do mouse em seu banco de dados e selecione Abrir no Pesquisador de Objetos do SQL Server. Agora você pode navegar até sua tabela de banco de dados SQL e seu conteúdo. Verifique se os dados no banco de dados back-end não foram alterados.
(Opcional) Use uma ferramenta REST, como o 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ê reconecta o aplicativo ao back-end do aplicativo móvel. Essas alterações simulam uma reconexão de rede no aplicativo.
Quando você executar o aplicativo pela primeira vez, o manipulador de eventos de OnNavigatedTo
chamará 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.
Abra o App.xaml.cs no projeto compartilhado e remova o comentário de sua inicialização anterior do
MobileServiceClient
para usar a URL correta do aplicativo móvel.Pressione a tecla F5 para recompilar e executar o projeto. 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 manipulador de eventos de
OnNavigatedTo
é executado.(Opcional) Exiba os dados atualizados usando o Gerenciador 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 armazenamento local.
No aplicativo, clique na caixa de seleção ao lado de alguns itens a serem concluídos no repositório local.
UpdateCheckedTodoItem
chamaSyncAsync
para sincronizar cada item concluído com o back-end do Aplicativo Móvel.SyncAsync
chama push e pull. No entanto, sempre que você executar um pull em uma tabela na qual o cliente fez alterações, um push será sempre executado automaticamente. Esse comportamento garante que todas as tabelas no repositório local juntamente com os relacionamentos permaneçam consistentes. Esse comportamento pode resultar em um push inesperado. Para obter mais informações sobre esse comportamento, confira Sincronização de Dados Offline em Aplicativos Móveis do Azure.
Resumo da API
Para oferecer suporte a recursos offline dos serviços móveis, usamos a interface IMobileServiceSyncTable e inicializamos o MobileServiceClient.SyncContext com um banco de dados SQLite local. Quanto estiver offline, as operações CRUD normais nos aplicativos móveis funcionam como se o aplicativo ainda estivesse conectado, porém 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 é um membro do IMobileServicesSyncContext, as alterações feitas em todas as tabelas são enviadas ao back-end. Somente os registros com as alterações locais são enviados para o servidor.
- PullAsync Um pull é iniciado de um IMobileServiceSyncTable. Quando houver alterações controladas na tabela, um envio por push implícito é executado para certificar-se de que todas as tabelas no repositório local, bem como suas relações, permaneçam consistentes. O parâmetro pushOtherTables controla se outras tabelas no contexto são enviadas em um push implícito. 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 esse método periodicamente para limpar os dados obsoletos do repositório local. Use o parâmetro force quando for necessário limpar as alterações que ainda não foram sincronizadas.
Para saber mais sobre esses conceitos, veja 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 dos Aplicativos Móveis: