Ative a sincronização offline para a sua aplicação móvel Xamarin.Android
Descrição Geral
Este tutorial introduz a funcionalidade de sincronização offline de Azure Mobile Apps para Xamarin.Android. 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 serviço remoto.
Neste tutorial, atualiza o projeto do cliente a partir do tutorial Criar uma aplicação Xamarin Android 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 Sincronização de Dados em Azure Mobile Apps.
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.
- Em Visual Studio, abra o gestor de pacotes NuGet no projeto que completou no tutorial de aplicações Create a Xamarin Android. Procure e instale o pacote NuGet Microsoft.Azure.Mobile.Client.SQLiteStore .
- Abra o ficheiro ToDoActivity.cs e descodi a
#define OFFLINE_SYNC_ENABLED
definição. - Em Visual Studio, prima 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 são sincronizados com o backend da aplicação móvel quando um empurrão é executado em um estado conectado.
Editar ToDoActivity.cs no projeto partilhado. Altere o applicationURL para apontar para um URL inválido:
const string applicationURL = @"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.
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.
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.
Feche a aplicação e reinicie-a para verificar se os novos itens que criou são persistidos na loja local.
(Opcional) Em Visual Studio, abra o Server Explorer. Navegue na sua base de dados em Azure-SQL Bases de> Dados. 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 SQL tabela de bases de dados e o seu conteúdo. Verifique se os dados na base de dados de backend não foram alterados.
(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, volte a ligar a aplicação ao backend da aplicação móvel. Quando executou a aplicação pela primeira vez, o manipulador de OnCreate
eventos liga OnRefreshItemsSelected
. Este método chama SyncAsync
para sincronizar a sua loja local com a base de dados backend.
Open ToDoActivity.cs no projeto partilhado e reverta a sua alteração da propriedade applicationURL .
Pressione a tecla F5 para reconstruir e executar a aplicação. A aplicação sincroniza as alterações locais com o backend da App Azure Mobile utilizando operações de impulso e puxar quando o
OnRefreshItemsSelected
método executa.(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.
Na aplicação, clique na caixa de verificação ao lado de alguns itens para os completar na loja local.
CheckItem
chamadasSyncAsync
para sincronizar cada item concluído com o backend da Aplicação Móvel.SyncAsync
chama tanto empurrar e puxar. Sempre que executa um puxão contra uma tabela à qual o cliente fez alterações, um empurrão é sempre executado automaticamente. Isto garante que todas as mesas da 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 Sincronização de Dados em Azure Mobile Apps.
Reveja o código de sincronização do cliente
O projeto do cliente Xamarin que descarregou quando completou o tutorial Criar uma aplicação Xamarin Android já contém sincronização offline de suporte a códigos utilizando uma base de dados LOCAL SQLite local. Aqui está uma breve visão geral do que já está incluído no código tutorial. Para uma visão geral conceptual da funcionalidade, consulte offline Sincronização de Dados em Azure Mobile Apps.
Antes de qualquer funcionação de mesa, a loja local deve ser inicializada. A base de dados da loja local é inicializada quando
ToDoActivity.OnCreate()
executadaToDoActivity.InitLocalStoreAsync()
. Este método cria uma base de dados SQLite local utilizando aMobileServiceSQLiteStore
classe fornecida pelo cliente Azure Mobile Apps SDK.O
DefineTable
método cria uma tabela na loja local que corresponde aos campos do tipo fornecido,ToDoItem
neste caso. O tipo não tem de incluir todas as colunas que estão na base de dados remota. É possível armazenar apenas um subconjunto de colunas.// ToDoActivity.cs private async Task InitLocalStoreAsync() { // new code to initialize the SQLite store string path = Path.Combine(System.Environment .GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename); if (!File.Exists(path)) { File.Create(path).Dispose(); } var store = new MobileServiceSQLiteStore(path); store.DefineTable<ToDoItem>(); // Uses the default conflict handler, which fails on conflict // To use a different conflict handler, pass a parameter to InitializeAsync. // For more details, see https://go.microsoft.com/fwlink/?LinkId=521416. await client.SyncContext.InitializeAsync(store); }
O
toDoTable
membro éToDoActivity
doIMobileServiceSyncTable
tipo em vez deIMobileServiceTable
. O IMobileServiceSyncTable direciona todas as operações de tabela de criação, leitura, atualização e eliminação (CRUD) para a base de dados da loja local.Você decide quando as alterações são empurradas para o backend da App Azure Mobile ligando
IMobileServiceSyncContext.PushAsync()
. O contexto de sincronização ajuda a preservar as relações de mesa, rastreando e empurrando mudanças em todas as tabelas que uma aplicação do cliente modificou quandoPushAsync
é chamada.O código fornecido chama
ToDoActivity.SyncAsync()
para sincronizar sempre que a lista de todoitem é atualizada ou um todoitem é adicionado ou concluído. O código sincroniza-se depois de cada mudança local.No código fornecido, todos os registos da tabela remota
TodoItem
são consultados, mas também é possível filtrar registos através de uma identificação de consulta e consulta aPushAsync
. Para mais informações, consulte a secção Incremental Sync em offline Sincronização de Dados em Azure Mobile Apps.// ToDoActivity.cs private async Task SyncAsync() { try { await client.SyncContext.PushAsync(); await toDoTable.PullAsync("allTodoItems", toDoTable.CreateQuery()); // query ID is used for incremental sync } catch (Java.Net.MalformedURLException) { CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error"); } catch (Exception e) { CreateAndShowDialog (e, "Error"); } }