Dela via


Aktivera offlinesynkronisering för din Windows-app

Översikt

Den här självstudien visar hur du lägger till offlinestöd till en UWP-app (Universal Windows Platform) med hjälp av en Azure Mobile App-serverdel. Med offlinesynkronisering kan slutanvändarna interagera med en mobilapp – visa, lägga till eller ändra data – även om det inte finns någon nätverksanslutning. Ändringar lagras i en lokal databas. När enheten är online igen synkroniseras dessa ändringar med fjärrserverdelen.

I den här självstudien uppdaterar du UWP-appprojektet från självstudien Skapa en Windows-app för att stödja offlinefunktionerna i Azure Mobile Apps. Om du inte använder det nedladdade snabbstartsserverprojektet måste du lägga till paketen för dataåtkomsttillägg i projektet. Mer information om servertilläggspaket finns i Work with the .NET backend server SDK for Azure Mobile Apps.

Mer information om funktionen för offlinesynkronisering finns i avsnittet Offline Data Sync i Azure Mobile Apps.

Krav

Den här handledningen kräver följande förutsättningar:

Uppdatera klientappen för att stödja offlinefunktioner

Med offlinefunktioner i Azure Mobile App kan du interagera med en lokal databas när du befinner dig i ett offlinescenario. Om du vill använda dessa funktioner i din app initierar du en SyncContext- till en lokal butik. Referera sedan till tabellen via gränssnittet IMobileServiceSyncTable. SQLite används som det lokala arkivet på enheten.

  1. Installera SQLite-körtidsmiljön för den universella Windows-plattformen.

  2. I Visual Studio öppnar du NuGet-pakethanteraren för UWP-appprojektet som du slutförde i självstudien Skapa en Windows-app. Sök efter och installera Microsoft.Azure.Mobile.Client.SQLiteStore NuGet-paketet.

  3. I Solution Explorer högerklickar du på Referenser>Lägg till referens...>Universella Windows>-tilläggoch aktiverar sedan både SQLite för Universal Windows Platform och Visual C++ 2015 Runtime för universella Windows Platform-appar.

    Lägg till SQLite UWP-referens

  4. Öppna filen MainPage.xaml.cs och ta bort kommentarerna från #define OFFLINE_SYNC_ENABLED-definitionen.

  5. I Visual Studio trycker du på F5- för att återskapa och köra klientappen. Appen fungerar på samma sätt som den gjorde innan du aktiverade offlinesynkronisering. Men den lokala databasen fylls nu med data som kan användas i ett offlinescenario.

Uppdatera appen för att koppla bort från backend

I det här avsnittet bryter du anslutningen till mobilappens serverdel för att simulera en offlinesituation. När du lägger till dataobjekt meddelar undantagshanteraren att appen är i offlineläge. I det här tillståndet läggs nya artiklar till i den lokala butiken och synkroniseras till mobilappens serverdel när push nästa gång körs i ett anslutet tillstånd.

  1. Redigera App.xaml.cs i det delade projektet. Kommentera ut initieringen av MobileServiceClient- och lägg till följande rad, som använder en ogiltig mobilapps-URL:

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    Du kan också demonstrera offlinebeteende genom att inaktivera wifi och mobilnät på enheten eller använda flygplansläge.

  2. Tryck på F5 för att skapa och köra appen. Observera att synkroniseringen misslyckades vid uppdatering när appen startades.

  3. Ange nya objekt och observera att push misslyckas med statusen CancelledByNetworkError varje gång du klickar på Spara. De nya att göra-objekten finns dock i det lokala arkivet tills de kan push-överföras till mobilappens serverdel. Om du undertrycker dessa undantag i en produktionsapp fungerar klientappen som om den fortfarande är ansluten till mobilappens serverdel.

  4. Stäng appen och starta om den för att kontrollera att de nya objekten som du skapade är kvar i det lokala lagret.

  5. (Valfritt) Öppna Server Exploreri Visual Studio. Gå till din databas i Azure->SQL Databases. Högerklicka på databasen och välj Öppna i SQL Server Object Explorer. Nu kan du bläddra till sql-databastabellen och dess innehåll. Kontrollera att data i serverdelsdatabasen inte har ändrats.

  6. (Valfritt) Använd ett REST-verktyg som Fiddler eller Postman för att fråga din mobila serverdel med hjälp av en GET-fråga i formuläret https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

Uppdatera appen för att återansluta mobilappens serverdel

I det här avsnittet ska du återansluta appen till mobilappens serverdel. Dessa ändringar simulerar en nätverksåteranslutning i appen.

När du först kör programmet anropar OnNavigatedTo händelsehanteraren InitLocalStoreAsync. Den här metoden anropar i sin tur SyncAsync för att synkronisera ditt lokala arkiv med bakgrundsdatabasen. Appen försöker synkronisera vid start.

  1. Öppna App.xaml.cs i det delade projektet och avkommentera din tidigare initiering av MobileServiceClient för att använda rätt webbadress till mobilappen.

  2. Tryck på F5 för att återskapa och köra appen. Appen synkroniserar dina lokala ändringar med Azure Mobile App-serverdelen med hjälp av push- och pull-åtgärder när OnNavigatedTo händelsehanterare körs.

  3. (Valfritt) Visa uppdaterade data med antingen SQL Server Object Explorer eller ett REST-verktyg som Fiddler. Observera att data har synkroniserats mellan Azure Mobile App-backenddatabasen och det lokala arkivet.

  4. I appen klickar du på kryssrutan bredvid några artiklar för att slutföra dem i den lokala butiken.

    UpdateCheckedTodoItem anropar SyncAsync för att synkronisera varje slutfört objekt med mobilappens serverdel. SyncAsync anropar både push och pull. Men när du utför en dragning mot en tabell som klienten har gjort ändringar i, utförs en push automatiskt. Det här beteendet säkerställer att alla tabeller i det lokala arkivet tillsammans med relationer förblir konsekventa. Det här beteendet kan resultera i en oväntad push. Mer information om det här beteendet finns i Offline Data Sync i Azure Mobile Apps.

API-sammanfattning

För att stödja offlinefunktionerna i mobila tjänster använde vi gränssnittet IMobileServiceSyncTable och initierade MobileServiceClient.SyncContext med en lokal SQLite-databas. När du är offline fungerar de normala CRUD-åtgärderna för mobilappar som om appen fortfarande är ansluten, medan åtgärderna lagras i den lokala butiken. Följande metoder används för att synkronisera det lokala arkivet med servern:

  • PushAsync Eftersom den här metoden är medlem i IMobileServicesSyncContextpushas ändringar i alla tabeller till serverdelen. Endast poster med lokala ändringar skickas till servern.
  • PullAsync En hämtning initieras från en IMobileServiceSyncTable. När det finns spårade ändringar i tabellen körs en implicit push för att säkerställa att alla tabeller i den lokala lagringen tillsammans med relationer förblir konsekventa. Parametern pushOtherTables styr om andra tabeller i kontexten pushas i en implicit push-överföring. Parametern för fråga accepterar en IMobileServiceTableQuery-<T-> eller OData-frågesträng för att filtrera de returnerade data. Parametern queryId används för att definiera inkrementell synkronisering. Mer information finns i Offline Data Sync i Azure Mobile Apps.
  • PurgeAsync Appen bör regelbundet anropa den här metoden för att rensa inaktuella data från det lokala arkivet. Använd parametern force när du behöver ta bort ändringar som ännu inte har synkroniserats.

Mer information om dessa begrepp finns i Offline Data Sync i Azure Mobile Apps.

Mer information

Följande avsnitt innehåller ytterligare bakgrundsinformation om funktionen för offlinesynkronisering i Mobile Apps: