Share via


Ativar sincronização offline para a sua aplicação móvel Xamarin.iOS

Descrição Geral

Este tutorial introduz a funcionalidade de sincronização offline de Azure Mobile Apps para Xamarin.iOS. 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, atualize o projeto de aplicação Xamarin.iOS da Create a Xamarin iOS app 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, inicialize um SyncContext para uma loja local. Consulte a sua tabela através da interface [IMobileServiceSyncTable]. A SQLite é utilizada como a loja local do dispositivo.

  1. Abra o gestor de pacotes NuGet no projeto que concluiu no tutorial de aplicações Create a Xamarin iOS , em seguida, procure e instale o pacote NuGet Microsoft.Azure.Mobile.Client.SQLiteStore NuGet.
  2. Abra o ficheiro QSTodoService.cs e desfaça a #define OFFLINE_SYNC_ENABLED definição.
  3. 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 QSToDoService.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.

  2. Compile e execute 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) Se tiver Visual Studio instalado num PC, 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.

  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, volte a ligar a aplicação ao backend da aplicação móvel. Isto simula a mudança da aplicação de um estado offline para um estado online com o backend da aplicação móvel. Se simular a rutura da rede desligando a conectividade da rede, não são necessárias alterações de código. Ligue a rede de novo. Quando se faz a primeira aplicação, o RefreshDataAsync método chama-se. Isto, por sua vez, chama SyncAsync para sincronizar a sua loja local com a base de dados backend.

  1. Abra o QSToDoService.cs no projeto partilhado e reverta a sua alteração da propriedade do applicationURL .

  2. 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.

  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.

    CompleteItemAsync chamadas SyncAsync 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 impulso no contexto de sincronização do cliente é sempre executado primeiro automaticamente. O impulso implícito garante que todas as mesas da loja local, juntamente com as relações, permanecem consistentes. 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 iOS já contém sincronização offline de suporte a códigos utilizando uma base de dados 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 QSTodoListViewController.ViewDidLoad() executada QSTodoService.InitializeStoreAsync(). Este método cria uma nova base de dados SQLite local utilizando a MobileServiceSQLiteStore classe fornecida pelo cliente da Azure Mobile App 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.

      // QSTodoService.cs
    
      public async Task InitializeStoreAsync()
      {
          var store = new MobileServiceSQLiteStore(localDbPath);
          store.DefineTable<ToDoItem>();
    
          // Uses the default conflict handler, which fails on conflict
          await client.SyncContext.InitializeAsync(store);
      }
    
  • O todoTable membro é QSTodoService do IMobileServiceSyncTable tipo em vez de IMobileServiceTable. 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 essas 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 quando PushAsync é chamada.

    O código fornecido chama QSTodoService.SyncAsync() para sincronizar sempre que a lista de todoitem é atualizada ou um todoitem é adicionado ou concluído. A aplicação sincroniza após cada mudança local. Se uma pressão for executada contra uma tabela que tenha atualizações locais pendentes rastreadas pelo contexto, essa operação de puxar irá automaticamente desencadear um impulso de contexto primeiro.

    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 a PushAsync. Para mais informações, consulte a secção Incremental Sync em offline Sincronização de Dados em Azure Mobile Apps.

      // QSTodoService.cs
      public async Task SyncAsync()
      {
          try
          {
              await client.SyncContext.PushAsync();
              await todoTable.PullAsync("allTodoItems", todoTable.CreateQuery()); // query ID is used for incremental sync
          }
    
          catch (MobileServiceInvalidOperationException e)
          {
              Console.Error.WriteLine(@"Sync Failed: {0}", e.Message);
          }
      }
    

Recursos Adicionais