Lägga till offlinedatasynkronisering i Xamarin.Android-appen

Den här självstudien beskriver funktionen för offlinesynkronisering i Azure Mobile Apps för snabbstartsappen Xamarin.Android. 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 Xamarin.Android, som innefattar att skapa en lämplig serverdelstjänst. Vi antar också att du har lagt till autentisering i ditt program. Detta är dock valfritt.

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 Backas upp av en SQLite-databas på enheten och synkroniseras med serverdelsdatabasen.

I Visual Studio:

  1. Högerklicka på TodoApp lösningen och välj sedan Hantera NuGet-paket för lösning....

  2. På den nya fliken väljer du Bläddra och anger sedan Microsoft.Datasync.Client i sökrutan.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Välj paketet Microsoft.Datasync.Client.SQLiteStore .

  4. I den högra rutan väljer du alla klientprojekt (förutom TodoAppService.NET6 projektet).

  5. Välj Installera.

  6. Godkänn licensavtalet när du uppmanas att göra det.

Uppdatera fjärrtjänstklienten

TodoApp.Data Öppna projektet och leta upp RemoteTodoService.cs klassen (i Services katalogen). Uppdatera klassen enligt följande:

  1. Lägg till följande using -instruktion överst i filen:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Ändra definitionen av _table till en IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Lägg till en ny egenskap för lagring av offlinedatabasplatsen:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. InitializeAsync Uppdatera metoden 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;
    
  5. RefreshItemsAsync() Uppdatera 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

Redigera filen i TodoApp.Android projektet App.xaml.cs . Ändra definitionen av RemoteTodoService följande:

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Om du inte har slutfört autentiseringsguiden bör definitionen se ut så här i stället:

TodoService = new RemoteTodoService()
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Testa appen

Appen synkroniseras inte med serverdelen förrän uppdateringsikonen trycks ner. Så här testar du:

  1. Öppna Azure Portal.

  2. Öppna den resursgrupp som innehåller resurserna för snabbstarten.

  3. quickstart Välj databasen.

  4. Välj Frågeredigeraren (förhandsversion).

  5. 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.
  6. I frågeredigeraren anger du SELECT * FROM [dbo].[TodoItems]. Välj sedan Kör.

En lista över aktuella TodoItems visas.

Screenshot of the results in the S Q L query editor.

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 din app 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.

  1. Öppna Azure Portal.
  2. Välj den resursgrupp som innehåller snabbstartsresurserna.
  3. Välj Ta bort resursgrupp.
  4. 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 azd down kommandot i stället.

Borttagningen tar några minuter att slutföra.

Nästa steg