Lägga till datasynkronisering offline i din Uno Platform-app
Not
Den här produkten har dragits tillbaka. En ersättning för projekt som använder .NET 8 eller senare finns i Community Toolkit Datasync-biblioteket.
Den här självstudien beskriver funktionen för offlinesynkronisering i Azure Mobile Apps för snabbstartsappen Uno Platform. 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.
Innan du påbörjar den här självstudien bör du ha slutfört snabbstartsguiden för Uno Platform, vilket innefattar att skapa en lämplig serverdelstjänst. Vi antar också att du har lagt till autentisering i ditt program. Du kan lägga till offlinefunktioner i din app utan autentisering.
Uppdatera appen för att stödja offlinesynkronisering
I onlineåtgärden läser du till och skriver från en IRemoteTable<T>
. När du använder offlinesynkronisering läser du till och skriver från en IOfflineTable<T>
i stället.
IOfflineTable<T>
använder en SQLite-databas på enheten som du synkroniserar med en fjärrtjänst.
Lägg till nödvändiga NuGet-paket
I Visual Studio:
Högerklicka på den
TodoApp
lösningen och välj sedan Hantera NuGet-paket för lösning....På den nya fliken väljer du Bläddraoch anger sedan Microsoft.Datasync.Client i sökrutan.
Välj det
Microsoft.Datasync.Client.SQLiteStore
paketet.I den högra rutan väljer du alla klientprojekt (förutom det
TodoAppService.NET6
projektet).Välj Installera.
Godkänn licensavtalet när du uppmanas att göra det.
Uppdatera fjärrtjänstklienten
Öppna TodoApp.Data
-projektet och leta upp klassen RemoteTodoService.cs
(i katalogen Services
). Uppdatera klassen enligt följande:
Lägg till följande
using
-instruktion överst i filen:using Microsoft.Datasync.Client.SQLiteStore;
Ändra definitionen av
_table
till enIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Lägg till en ny egenskap för lagring av offlinedatabasplatsen:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Uppdatera metoden
InitializeAsync
för att definiera offlinedatabasen:// Create the offline store definition var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString(); var store = new OfflineSQLiteStore(connectionString); store.DefineTable<TodoItem>(); var options = new DatasyncClientOptions { OfflineStore = store, HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() } }; // Create the datasync client. _client = TokenRequestor == null ? new DatasyncClient(Constants.ServiceUri, options) : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options); // Initialize the database await _client.InitializeOfflineStoreAsync(); // Get a reference to the offline table. _table = _client.GetOfflineTable<TodoItem>(); // Set _initialized to true to prevent duplication of locking. _initialized = true;
Uppdatera
RefreshItemsAsync()
för att utföra offlinesynkronisering:/// <summary> /// Refreshes the TodoItems list manually. /// </summary> /// <returns>A task that completes when the refresh is done.</returns> public async Task RefreshItemsAsync() { await InitializeAsync(); // First, push all the items in the table. await _table.PushItemsAsync(); // Then, pull all the items in the table. await _table.PullItemsAsync(); return; }
Ange platsen för offlinedatabasen
I TodoApp.Uno
-projektet redigerar du filen MainPage.xaml.cs
. Ändra definitionen av RemoteTodoService
enligt följande:
_service = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/offline.db"
};
Om du inte har slutfört självstudien om autentiseringbör definitionen se ut så här i stället:
_service = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/offline.db"
};
Not
Du kan lagra offlinedatabasen oavsett var du har läs-/skriv-/skapa-behörigheter i ett Windows-system. Klassen Environment.SpecialFolder
ger standardplatser enligt programmet.
Testa appen
Appen synkroniseras inte med serverdelen förrän uppdateringsikonen trycks ner. Så här testar du:
Öppna Azure-portalen.
Öppna den resursgrupp som innehåller resurserna för snabbstarten.
Välj den
quickstart
databasen.Välj Frågeredigeraren (förhandsversion).
Logga in med SQL Server-autentisering med samma autentiseringsuppgifter som du har konfigurerat för databasen.
- Om det behövs uppmanas du att tillåta åtkomst för din IP-adress. Välj länken för att uppdatera listan över tillåtna och tryck sedan på OK för att försöka logga in igen.
I frågeredigeraren anger du
SELECT * FROM [dbo].[TodoItems]
. Välj sedan Kör.
En lista över aktuella TodoItems visas.
Gör nu några ändringar via din app. TRYCK INTE PÅ UPPDATERA (ännu).
Upprepa SQL-instruktionen i Azure-portalen och kontrollera att inga ändringar har gjorts i data i databasen.
Välj ikonen Uppdatera i appen för att skicka data i kön till serverdelstjänsten. Http-transaktionerna visas i fönstret Utdatafelsökning.
Upprepa SQL-instruktionen i Azure-portalen och kontrollera att ändringarna har överförts till fjärrtjänsten.
Rensa resurser
Om du inte gör en ny snabbstartsguide kan du ta bort de resurser som är associerade med serverdelstjänsten nu.
- Öppna Azure-portalen.
- Välj den resursgrupp som innehåller snabbstartsresurserna.
- Välj Ta bort resursgrupp.
- Följ anvisningarna för att bekräfta borttagningen.
Du kan också använda Azure CLI:
az group delete -g quickstart
Om du använde Azure Developer CLI för att distribuera resurser kan du använda kommandot azd down
i stället.
Borttagningen tar några minuter att slutföra.
Nästa steg
- Läs dokumentationen om HUR DU GÖR: