Hinzufügen der Offlinedatensynchronisierung zu Ihrer Xamarin.Android-App

In diesem Lernprogramm wird die Offlinesynchronisierungsfunktion von Azure Mobile Apps für die Schnellstart-App Xamarin.Android behandelt. Die Offlinesynchronisierung ermöglicht Endbenutzern die Interaktion mit einer mobilen App – Anzeigen, Hinzufügen oder Ändern von Daten – auch wenn keine Netzwerkverbindung vorhanden ist. Änderungen werden in einer lokalen Datenbank gespeichert. Sobald das Gerät wieder online ist, werden diese Änderungen mit dem Remote-Back-End synchronisiert.

Bevor Sie mit diesem Tutorial beginnen, sollten Sie das Schnellstarttutorial für Xamarin.Android durchführen, in dem Sie u. a. einen geeigneten Back-End-Dienst erstellen. Wir gehen auch davon aus, dass Sie Ihrer Anwendung die Authentifizierung hinzugefügt haben. Dies ist jedoch optional.

Aktualisieren der App für die Unterstützung von Offlinesynchronisierung

Beim Onlinevorgang lesen Sie Daten aus einer IRemoteTable<T> und schreiben Daten in diese Tabelle. Bei der Offlinesynchronisierung verwenden Sie stattdessen eine IOfflineTable<T> zum Lesen und Schreiben von Daten. Die IOfflineTable wird durch eine SQLite-Datenbank auf einem Gerät unterstützt und mit der Back-End-Datenbank synchronisiert.

In Visual Studio:

  1. Klicken Sie mit der rechten Maustaste auf die TodoApp Lösung, und wählen Sie dann "NuGet-Pakete für Lösung verwalten" aus.

  2. Wählen Sie auf der neuen Registerkarte " Durchsuchen" aus, und geben Sie dann "Microsoft.Datasync.Client " in das Suchfeld ein.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Wählen Sie das Microsoft.Datasync.Client.SQLiteStore-Paket aus.

  4. Wählen Sie im rechten Bereich alle Clientprojekte (mit Ausnahme des TodoAppService.NET6 Projekts) aus.

  5. Wählen Sie Installieren aus.

  6. Akzeptieren Sie den Lizenzvertrag, wenn Sie dazu aufgefordert werden.

Aktualisieren des Remotedienstclients

Öffnen Sie das TodoApp.Data Projekt, und suchen Sie die RemoteTodoService.cs Klasse (im Services Verzeichnis). Aktualisieren Sie die Klasse wie folgt:

  1. Fügen Sie die folgende using-Anweisung am Anfang der Datei hinzu:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Ändern sie die Definition von _table :IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Fügen Sie eine neue Eigenschaft zum Speichern des Offlinedatenbankspeicherorts hinzu:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Aktualisieren Sie die InitializeAsync Methode, um die Offlinedatenbank zu definieren:

    // 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. Aktualisieren Sie die RefreshItemsAsync() Offlinesynchronisierung:

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

Festlegen des Offlinedatenbankspeicherorts

Bearbeiten Sie die App.xaml.cs Datei im TodoApp.Android Projekt. Ändern Sie die Definition wie RemoteTodoService folgt:

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

Wenn Sie das Authentifizierungslernprogramm noch nicht abgeschlossen haben, sollte die Definition stattdessen wie folgt aussehen:

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

Testen der App

Die App wird erst mit dem Back-End synchronisiert, wenn das Aktualisierungssymbol gedrückt wird. Für Test:

  1. Öffnen Sie das Azure-Portal.

  2. Öffnen Sie die Ressourcengruppe, die die Ressourcen für die Schnellstartanleitung enthält.

  3. Wählen Sie die quickstart Datenbank aus.

  4. Wählen Sie den Abfrage-Editor (Vorschau) aus.

  5. Melden Sie sich mit der SQL Server-Authentifizierung mit denselben Anmeldeinformationen an, die Sie für die Datenbank eingerichtet haben.

    • Bei Bedarf werden Sie aufgefordert, den Zugriff auf Ihre IP-Adresse zuzulassen. Wählen Sie den Link aus, um die Zulassungsliste zu aktualisieren, und drücken Sie dann OK , um die Anmeldung erneut zu versuchen.
  6. Geben Sie SELECT * FROM [dbo].[TodoItems] in den Abfrage-Editor ein. Wählen Sie dann Ausführen aus.

Eine Liste der aktuellen TodoItems wird angezeigt.

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

Nehmen Sie nun einige Änderungen über Ihre App vor. DRÜCKEN SIE NICHT DIE AKTUALISIERUNG (noch).

Wiederholen Sie die SQL-Anweisung in der Azure-Portal, und stellen Sie sicher, dass an den Daten in der Datenbank keine Änderungen vorgenommen wurden.

Wählen Sie das Symbol "Aktualisieren" in Ihrer App aus, um die Daten in der Warteschlange an den Back-End-Dienst zu übertragen. Im Ausgabedebugfenster werden die HTTP-Transaktionen angezeigt.

Wiederholen Sie die SQL-Anweisung in der Azure-Portal, und stellen Sie sicher, dass Ihre Änderungen an den Remotedienst übertragen wurden.

Bereinigen von Ressourcen

Wenn Sie kein weiteres Schnellstart-Lernprogramm ausführen, können Sie die ressourcen löschen, die dem Back-End-Dienst zugeordnet sind.

  1. Öffnen Sie das Azure-Portal.
  2. Wählen Sie die Ressourcengruppe aus, die die Schnellstartressourcen enthält.
  3. Wählen Sie die Option Ressourcengruppe löschen.
  4. Folgen Sie den Anweisungen, um den Löschvorgang zu bestätigen.

Sie können auch die Azure CLI verwenden:

az group delete -g quickstart

Wenn Sie die Azure Developer CLI zum Bereitstellen von Ressourcen verwendet haben, können Sie stattdessen den azd down Befehl verwenden.

Der Löschvorgang dauert einige Minuten.

Nächste Schritte