Delen via


Offlinesynchronisatie inschakelen voor uw mobiele Xamarin.iOS-app

Overzicht

In deze zelfstudie maakt u kennis met de functie voor offlinesynchronisatie van Azure Mobile Apps voor Xamarin.iOS. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app, zoals het weergeven, toevoegen of wijzigen van gegevens, zelfs wanneer er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe service.

In deze zelfstudie werkt u het Xamarin.iOS-app-project bij vanuit Een Xamarin iOS-app maken om de offlinefuncties van Azure Mobile Apps. Als u het gedownloade quickstart-serverproject niet gebruikt, moet u de extensiepakketten voor gegevenstoegang toevoegen aan uw project. Zie Work with the .NET backend server SDK for Azure Mobile Apps (Werken met de SDK voor de .NET-back-en-Mobile Apps) voor meer informatie over serverextensiepakketten.

Zie het onderwerp Offline Data Sync in Azure Mobile Apps voor meer informatie over de functie voor offlinesynchronisatie.

De client-app bijwerken om offlinefuncties te ondersteunen

Met offlinefuncties van De mobiele app van Azure kunt u communiceren met een lokale database wanneer u offline bent. Als u deze functies in uw app wilt gebruiken, initialiseert u een SyncContext in een lokale store. Verwijs naar uw tabel via de interface [IMobileServiceSyncTable]. SQLite wordt gebruikt als het lokale winkel op het apparaat.

  1. Open NuGet Package Manager in het project dat u hebt voltooid in de zelfstudie Een Xamarin iOS-app maken en zoek en installeer het Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-pakket.
  2. Open het bestand QSTodoService.cs en wijs de definitie uit #define OFFLINE_SYNC_ENABLED .
  3. Bouw de client-app opnieuw op en voer deze uit. De app werkt op dezelfde manier als voor u offlinesynchronisatie hebt ingeschakeld. De lokale database is nu echter gevuld met gegevens die kunnen worden gebruikt in een offlinescenario.

De app bijwerken om de verbinding met de back-en-back-te verbreken

In deze sectie verbreekt u de verbinding met de back-end van uw mobiele app om een offline situatie te simuleren. Wanneer u gegevensitems toevoegt, laat de uitzonderings-handler u weten dat de app in de offlinemodus is. In deze status worden nieuwe items toegevoegd in het lokale opslagitems die worden gesynchroniseerd met de back-end van de mobiele app wanneer de push de volgende keer in een verbonden status wordt uitgevoerd.

  1. Bewerk QSToDoService.cs in het gedeelde project. Wijzig de applicationURL om te wijzen naar een ongeldige URL:

      const string applicationURL = @"https://your-service.azurewebsites.fail";
    

    U kunt ook offlinegedrag demonstreren door Wi-Fi en mobiele netwerken uit te schakelen op het apparaat of door gebruik te maken van de vliegtuigmodus.

  2. Bouw de app en voer deze uit. U ziet dat de synchronisatie is mislukt bij het vernieuwen wanneer de app wordt gestart.

  3. Voer nieuwe items in en u ziet dat het pushen mislukt met de status [CancelledByNetworkError] telkens wanneer u op Opslaan klikt. De nieuwe todo-items bestaan echter in de lokale store totdat ze naar de back-end van de mobiele app kunnen worden pushen. Als u deze uitzonderingen onderdrukt, gedraagt de client-app zich in een productie-app alsof deze nog steeds is verbonden met de back-end van de mobiele app.

  4. Sluit de app en start deze opnieuw om te controleren of de nieuwe items die u hebt gemaakt, persistent zijn in de lokale store.

  5. (Optioneel) Als u een Visual Studio op een pc hebt geïnstalleerd, opent u Server Explorer. Navigeer naar uw database in Azure-SQL>Databases. Klik met de rechtermuisknop op uw database en selecteer Openen in SQL Server Objectverkenner. U kunt nu bladeren naar uw SQL databasetabel en de inhoud ervan. Controleer of de gegevens in de back-enddatabase niet zijn gewijzigd.

  6. (Optioneel) Gebruik een REST-hulpprogramma zoals Fiddler of Postman om een query uit te voeren op uw mobiele back-end, met behulp van een GET-query in de vorm https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Werk de app bij om opnieuw verbinding te maken met de back-end van uw mobiele app

In deze sectie maakt u de app opnieuw verbinding met de back-end van de mobiele app. Hiermee wordt gesimuleerd dat de app wordt verplaatst van een offline status naar een online status met de back-end van de mobiele app. Als u de netwerkstoring hebt gesimuleerd door de netwerkverbinding uit te schakelen, zijn er geen codewijzigingen nodig. Schakel het netwerk opnieuw in. Wanneer u de toepassing voor het eerst hebt uitgevoerd, wordt RefreshDataAsync de methode aangeroepen. Hiermee wordt aanroepen om SyncAsync uw lokale opslag te synchroniseren met de back-enddatabase.

  1. Open QSToDoService.cs in het gedeelde project en keer uw wijziging van de eigenschap applicationURL terug .

  2. Bouw de app opnieuw en voer deze uit. De app synchroniseert uw lokale wijzigingen met de back-end van de mobiele Azure-app met behulp van push- en pull-bewerkingen wanneer de OnRefreshItemsSelected methode wordt uitgevoerd.

  3. (Optioneel) Bekijk de bijgewerkte gegevens met behulp SQL Server Objectverkenner of een REST-hulpprogramma zoals Fiddler. U ziet dat de gegevens zijn gesynchroniseerd tussen de back-enddatabase van De mobiele app van Azure en het lokale opslagbestand.

  4. Klik in de app op het selectievakje naast een paar items om ze in de lokale store te voltooien.

    CompleteItemAsync roept aan SyncAsync om elk voltooid item te synchroniseren met de back-end van de mobiele app. SyncAsync roept zowel push als pull aan. Wanneer u een pull uitvoert voor een tabel waarin de client wijzigingen heeft aangebracht, wordt een push naar de clientsynchronisatiecontext altijd automatisch eerst uitgevoerd. De impliciete push zorgt ervoor dat alle tabellen in de lokale opslag samen met relaties consistent blijven. Zie Offline Data Sync in Azure Mobile Apps voor meer informatie over dit Mobile Apps.

De clientsynchronisatiecode controleren

Het Xamarin-clientproject dat u hebt gedownload toen u de zelfstudie Een Xamarin iOS-app maken hebt voltooid, bevat al code die offline synchronisatie ondersteunt met behulp van een lokale SQLite-database. Hier is een kort overzicht van wat al is opgenomen in de code van de zelfstudie. Zie Offline Data Sync in Azure Mobile Apps voor een conceptueel overzicht van Mobile Apps.

  • Voordat tabelbewerkingen kunnen worden uitgevoerd, moet het lokale opslag worden initialiseren. De lokale store-database wordt initialiseren wanneer QSTodoListViewController.ViewDidLoad() wordt uitgevoerd QSTodoService.InitializeStoreAsync(). Met deze methode maakt u een nieuwe lokale SQLite-database met behulp MobileServiceSQLiteStore van de klasse die wordt geleverd door de client-SDK van de Azure Mobile App.

    Met DefineTable de methode maakt u een tabel in het lokale opslagopslag die overeenkomt met de velden in het opgegeven type, ToDoItem in dit geval. Het type hoeft niet alle kolommen in de externe database op te nemen. Het is mogelijk om slechts een subset kolommen op te slaan.

      // 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);
      }
    
  • Het todoTable lid van QSTodoService is van het IMobileServiceSyncTable type in plaats van IMobileServiceTable. De IMobileServiceSyncTable stuurt alle CRUD-tabelbewerkingen (maken, lezen, bijwerken en verwijderen) door naar de lokale store-database.

    U bepaalt door aan te roepen wanneer deze wijzigingen naar de back-end van de mobiele Azure-app worden pushen IMobileServiceSyncContext.PushAsync(). De synchronisatiecontext helpt tabelrelaties te behouden door wijzigingen in alle tabellen bij te houden en te pushen die een client-app heeft gewijzigd wanneer PushAsync deze wordt aangeroepen.

    De opgegeven code roept aan QSTodoService.SyncAsync() om te synchroniseren wanneer de todoitem-lijst wordt vernieuwd of een todoitem wordt toegevoegd of voltooid. De app wordt gesynchroniseerd na elke lokale wijziging. Als er een pull-bewerking wordt uitgevoerd voor een tabel met wachtende lokale updates die door de context worden bijgespoord, wordt met die pull-bewerking automatisch eerst een context-push uitgevoerd.

    In de opgegeven code worden alle records in TodoItem de externe tabel opgevraagd, maar het is ook mogelijk om records te filteren door een query-id en query door te geven aan PushAsync. Zie de sectie Incrementele synchronisatie in offline-Data Sync in 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);
          }
      }
    

Aanvullende resources