Offline gegevenssynchronisatie toevoegen aan uw Xamarin.Android-app

In deze zelfstudie wordt de offlinesynchronisatiefunctie van Azure Mobile Apps voor de quickstart-app Xamarin.Android besproken. Met offlinesynchronisatie kunnen eindgebruikers communiceren met een mobiele app, zoals het weergeven, toevoegen of wijzigen van gegevens, zelfs als er geen netwerkverbinding is. Wijzigingen worden opgeslagen in een lokale database. Zodra het apparaat weer online is, worden deze wijzigingen gesynchroniseerd met de externe back-end.

Voordat u aan deze zelfstudie begint, moet u de quickstart voor Xamarin.Android hebben voltooid, waaronder het maken van een geschikte back-endservice. We gaan er ook van uit dat u verificatie hebt toegevoegd aan uw toepassing. Dit is echter optioneel.

De app bijwerken ter ondersteuning van offlinesynchronisatie

In onlinebewerking leest en schrijft u van een IRemoteTable<T>. Wanneer u offlinesynchronisatie gebruikt, leest u in plaats daarvan naar en schrijft u hiervan IOfflineTable<T> . De IOfflineTable database wordt ondersteund door een SQLite-database op het apparaat en gesynchroniseerd met de back-enddatabase.

In Visual Studio:

  1. Klik met de rechtermuisknop op de TodoApp oplossing en selecteer NuGet-pakketten beheren voor oplossing....

  2. Selecteer Bladeren op het nieuwe tabblad en voer Vervolgens Microsoft.Datasync.Client in het zoekvak in.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Selecteer het Microsoft.Datasync.Client.SQLiteStore pakket.

  4. Selecteer in het rechterdeelvenster alle clientprojecten (behalve het TodoAppService.NET6 project).

  5. Selecteer Installeren.

  6. Accepteer de gebruiksrechtovereenkomst wanneer hierom wordt gevraagd.

De externe serviceclient bijwerken

Open het TodoApp.Data project en zoek de RemoteTodoService.cs klasse (in de Services map). Werk de klasse als volgt bij:

  1. Voeg de volgende using instructie toe aan het begin van het bestand:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Wijzig de definitie van _table het type :IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Voeg een nieuwe eigenschap toe voor het opslaan van de locatie van de offlinedatabase:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Werk de InitializeAsync methode bij om de offlinedatabase te definiƫren:

    // 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. Werk de RefreshItemsAsync() offlinesynchronisatie bij:

    /// <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;
    }
    

De locatie van de offlinedatabase instellen

Bewerk het bestand in het TodoApp.AndroidApp.xaml.cs project. Wijzig de definitie van het RemoteTodoService volgende:

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

Als u de verificatiezelfstudie nog niet hebt voltooid, moet de definitie er als volgt uitzien:

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

De app testen

De app wordt pas gesynchroniseerd met de back-end als het vernieuwingspictogram is ingedrukt. Testen:

  1. Open de Azure Portal.

  2. Open de resourcegroep met de resources voor de quickstart.

  3. Selecteer de quickstart database.

  4. Selecteer de Query-editor (preview).

  5. Meld u aan met SQL Server-verificatie met dezelfde referenties die u voor de database hebt ingesteld.

    • Indien nodig wordt u gevraagd om toegang tot uw IP-adres toe te staan. Selecteer de koppeling om de acceptatielijst bij te werken en druk vervolgens op OK om de aanmelding opnieuw uit te voeren.
  6. Voer in de queryeditor het volgende in SELECT * FROM [dbo].[TodoItems]. Selecteer vervolgens Uitvoeren.

Er wordt een lijst met de huidige taken weergegeven.

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

Breng nu enkele wijzigingen aan via uw app. DRUK NOG NIET OP VERNIEUWEN .

Herhaal de SQL-instructie in Azure Portal en controleer of er geen wijzigingen zijn aangebracht in de gegevens in de database.

Selecteer het pictogram Vernieuwen in uw app om de gegevens in de wachtrij naar de back-endservice te pushen. U ziet dat de HTTP-transacties plaatsvinden in het venster Uitvoerdebug.

Herhaal de SQL-instructie in Azure Portal en controleer of uw wijzigingen naar de externe service zijn gepusht.

Resources opschonen

Tenzij u nog een zelfstudie aan de slag gaat, kunt u de resources die zijn gekoppeld aan de back-endservice nu verwijderen.

  1. Open de Azure Portal.
  2. Selecteer de resourcegroep met de quickstart-resources.
  3. Selecteer Resourcegroep verwijderen.
  4. Volg de instructies om het verwijderen te bevestigen.

U kunt ook de Azure CLI gebruiken:

az group delete -g quickstart

Als u de Azure Developer CLI hebt gebruikt om resources te implementeren, kunt u in plaats daarvan de azd down opdracht gebruiken.

Het verwijderen duurt enkele minuten.

Volgende stappen